public function testSerialization() { $msg = new XPSoapMessage(); $msg->createCall('Test', 'testSerialization'); $this->assertEquals('Test', $msg->action); $this->assertEquals('testSerialization', $msg->method); $this->assertEquals('SOAP-ENV:Envelope', $msg->root()->getName()); $this->assertNotEmpty($msg->root()->getAttributes()); $msg->setData(array('int' => 1, 'float' => 6.1, 'string' => 'Binford', 'string2' => '"<&>"', 'bool' => TRUE, 'date' => Date::fromString('1977-12-14 11:55AM Europe/Berlin'), 'null' => NULL, 'array' => array(2, 3), 'hash' => array('class' => 'Test', 'method' => 'testSerialization'))); // Let's be somewhat forgiving on whitespace $src = trim(chop($msg->getSource(0))); $this->assertEquals('<SOAP-ENV:Envelope', substr($src, 0, 18)); $this->assertEquals('</SOAP-ENV:Envelope>', substr($src, -20)); $this->assertContains($src, '<int xsi:type="xsd:int">1</int>', 'integer'); $this->assertContains($src, '<float xsi:type="xsd:float">6.1</float>', 'float'); $this->assertContains($src, '<string xsi:type="xsd:string">Binford</string>', 'string'); $this->assertContains($src, '<string2 xsi:type="xsd:string">"<&>"</string2>', 'escaping'); $this->assertContains($src, '<bool xsi:type="xsd:boolean">true</bool>', 'bool'); $this->assertContains($src, '<date xsi:type="xsd:dateTime">1977-12-14T11:55:00+01:00</date>', 'date'); $this->assertContains($src, '<null xsi:nil="true"/>', 'null'); $this->assertContains($src, '<array xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="xsd:anyType[2]">', 'array'); $this->assertContains($src, '<item xsi:type="xsd:int">2</item>', 'array.inner'); $this->assertContains($src, '<item xsi:type="xsd:int">3</item>', 'array.inner'); $this->assertContains($src, '<hash xsi:type="xsd:struct">', 'hash'); $this->assertContains($src, '<class xsi:type="xsd:string">Test</class>', 'hash.inner'); $this->assertContains($src, '<method xsi:type="xsd:string">testSerialization</method>', 'hash.inner'); return $src; }
/** * Invoke method call * * @param string method name * @param var vars * @return var answer * @throws lang.IllegalArgumentException * @throws webservices.soap.SOAPFaultException */ public function invoke() { if (!$this->transport instanceof SOAPHTTPTransport) { throw new IllegalArgumentException('Transport must be a webservices.soap.transport.SOAPHTTPTransport'); } $args = func_get_args(); $message = new XPSoapMessage(); $message->setEncoding($this->encoding); $message->createCall($this->action, array_shift($args), $this->targetNamespace, $this->headers); $message->setMapping($this->mapping); $message->setData($args); // Send if (FALSE == ($response = $this->transport->send($message))) { return FALSE; } // Response if (FALSE == ($answer = $this->transport->retrieve($response))) { return FALSE; } $answer->setMapping($this->mapping); $data = $answer->getData(); if (sizeof($data) == 1) { return current($data); } if (sizeof($data) == 0) { return NULL; } return $data; }