예제 #1
0
 public function dumpServiceDefinition(ServiceDefinition $definition, array $options = array())
 {
     Assert::thatArgumentNotNull('definition', $definition);
     $options = array_merge(array('endpoint' => ''), $options);
     $this->definition = $definition;
     $wsdl = new Wsdl($definition->getName(), $definition->getNamespace());
     $port = $wsdl->addPortType($this->getPortTypeName());
     $binding = $wsdl->addBinding($this->getBindingName(), 'tns:' . $this->getPortTypeName());
     $wsdl->addSoapBinding($binding, 'rpc');
     $wsdl->addService($this->getServiceName(), $this->getPortName(), 'tns:' . $this->getBindingName(), $options['endpoint']);
     foreach ($definition->getMethods() as $method) {
         $requestParts = array();
         $responseParts = array();
         foreach ($method->getArguments() as $argument) {
             $requestParts[$argument->getName()] = $wsdl->getType($argument->getType()->getPhpType());
         }
         if ($method->getReturn() !== null) {
             $responseParts['return'] = $wsdl->getType($method->getReturn()->getPhpType());
         }
         $wsdl->addMessage($this->getRequestMessageName($method), $requestParts);
         $wsdl->addMessage($this->getResponseMessageName($method), $responseParts);
         $portOperation = $wsdl->addPortOperation($port, $method->getName(), 'tns:' . $this->getRequestMessageName($method), 'tns:' . $this->getResponseMessageName($method));
         $portOperation->setAttribute('parameterOrder', implode(' ', array_keys($requestParts)));
         $bindingInput = array('parts' => implode(' ', array_keys($requestParts)), 'use' => 'literal', 'namespace' => $definition->getNamespace(), 'encodingStyle' => 'http://schemas.xmlsoap.org/soap/encoding/');
         $bindingOutput = array('parts' => implode(' ', array_keys($responseParts)), 'use' => 'literal', 'namespace' => $definition->getNamespace(), 'encodingStyle' => 'http://schemas.xmlsoap.org/soap/encoding/');
         $bindingOperation = $wsdl->addBindingOperation($binding, $method->getName(), $bindingInput, $bindingOutput);
         $wsdl->addSoapOperation($bindingOperation, $this->getSoapOperationName($method));
     }
     $this->definition = null;
     $wsdl->toDomDocument()->formatOutput = true;
     return $wsdl->toXml();
 }
예제 #2
0
 function testAddSoapOperation()
 {
     $wsdl = new Wsdl('MyService', 'http://localhost/MyService.php');
     $wsdl->addPortType('myPortType');
     $binding = $wsdl->addBinding('MyServiceBinding', 'myPortType');
     $wsdl->addSoapOperation($binding, 'http://localhost/MyService.php#myOperation');
     $wsdl->addBindingOperation($binding, 'operation1');
     $wsdl->addBindingOperation($binding, 'operation2', array('use' => 'encoded', 'encodingStyle' => "http://schemas.xmlsoap.org/soap/encoding/"), array('use' => 'encoded', 'encodingStyle' => "http://schemas.xmlsoap.org/soap/encoding/"));
     $this->assertEquals($this->sanitizeWsdlXmlOutputForOsCompability($wsdl->toXml()), '<?xml version="1.0"?>' . '<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" ' . 'xmlns:tns="http://localhost/MyService.php" ' . 'xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" ' . 'xmlns:xsd="http://www.w3.org/2001/XMLSchema" ' . 'xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" ' . 'xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" ' . 'name="MyService" targetNamespace="http://localhost/MyService.php">' . '<portType name="myPortType"/>' . '<binding name="MyServiceBinding" type="myPortType">' . '<soap:operation soapAction="http://localhost/MyService.php#myOperation"/>' . '<operation name="operation1"/>' . '<operation name="operation2">' . '<input>' . '<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>' . '</input>' . '<output>' . '<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>' . '</output>' . '</operation>' . '</binding>' . '</definitions>');
 }
예제 #3
0
 /**
  * @dataProvider ampersandInUrlDataProvider()
  */
 public function testAddBindingOperationWithAmpersandInUrl($actualUrl, $expectedUrl)
 {
     $wsdl = new Wsdl('MyService', 'http://localhost/MyService.php');
     $wsdl->addPortType('myPortType');
     $binding = $wsdl->addBinding('MyServiceBinding', 'myPortType');
     $wsdl->addBindingOperation($binding, 'operation1', array('use' => 'encoded', 'encodingStyle' => $actualUrl), array('use' => 'encoded', 'encodingStyle' => $actualUrl), array('name' => 'MyFault', 'use' => 'encoded', 'encodingStyle' => $actualUrl));
     $expectedXml = '<operation name="operation1">' . '<input>' . '<soap:body use="encoded" encodingStyle="' . $expectedUrl . '"/>' . '</input>' . '<output>' . '<soap:body use="encoded" encodingStyle="' . $expectedUrl . '"/>' . '</output>' . '<fault name="MyFault">' . '<soap:fault name="MyFault" use="encoded" encodingStyle="' . $expectedUrl . '"/>' . '</fault>' . '</operation>';
     $this->assertContains($expectedXml, $wsdl->toXML());
 }