]> granicus.if.org Git - php/commitdiff
Fixed bug #42692 (Procedure 'int1' not present with doc/lit SoapServer)
authorDmitry Stogov <dmitry@php.net>
Tue, 13 Nov 2007 15:10:16 +0000 (15:10 +0000)
committerDmitry Stogov <dmitry@php.net>
Tue, 13 Nov 2007 15:10:16 +0000 (15:10 +0000)
ext/soap/soap.c
ext/soap/tests/bugs/bug42692.phpt [new file with mode: 0755]
ext/soap/tests/bugs/bug42692.wsdl [new file with mode: 0755]

index d981396a0049071f44321d1140a038100e242975..437c529e4944e0b698cca1cb16e3163cee725644 100644 (file)
@@ -4487,6 +4487,7 @@ static sdlFunctionPtr get_doc_function(sdlPtr sdl, xmlNodePtr params)
                                                                break;
                                                        }
                                                        zend_hash_move_forward((*tmp)->requestParameters);
+                                                       node = node->next;
                                                }
                                                if (ok /*&& node == NULL*/) {
                                                        return (*tmp);
diff --git a/ext/soap/tests/bugs/bug42692.phpt b/ext/soap/tests/bugs/bug42692.phpt
new file mode 100755 (executable)
index 0000000..6511556
--- /dev/null
@@ -0,0 +1,37 @@
+--TEST--
+Bug #42692 (Procedure 'int1' not present with doc/lit SoapServer)
+--FILE--
+<?php
+ini_set('soap.wsdl_cache_enabled','0');
+
+function checkAuth($peid,$auth) {
+       return $peid;
+}
+
+class TestSoap extends SoapClient {
+
+       function __construct($wsdl, $options) {
+               parent::__construct($wsdl, $options);
+               $this->server = new SoapServer($wsdl, $options);
+               $this->server->addFunction("checkAuth");
+       }
+
+       function __doRequest($request, $location, $action, $version) {
+               ob_start();
+               $this->server->handle($request);
+               $response = ob_get_contents();
+               ob_end_clean();
+               return $response;
+       }
+}
+
+$client = new TestSoap(dirname(__FILE__) . "/bug42692.wsdl", array("trace"=>1));
+try {
+       $result = $client->checkAuth(1,"two");
+       echo "Auth for 1 is $result\n";
+} catch (Exception $e) {
+       echo $e->getMessage();
+}
+?>
+--EXPECT--
+Auth for 1 is 1
diff --git a/ext/soap/tests/bugs/bug42692.wsdl b/ext/soap/tests/bugs/bug42692.wsdl
new file mode 100755 (executable)
index 0000000..c8928e3
--- /dev/null
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<definitions name="netDB"\r
+        targetNamespace="urn:netDB"\r
+        xmlns:typens="urn:netDB"\r
+        xmlns:xsd="http://www.w3.org/2001/XMLSchema"\r
+        xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"\r
+        xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"\r
+        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"\r
+        xmlns="http://schemas.xmlsoap.org/wsdl/">\r
+       <message name="checkAuthIN">\r
+               <part name="peid" type="xsd:integer" />\r
+               <part name="auth" type="xsd:string" />\r
+       </message>\r
+       <message name="checkAuthOUT">\r
+               <part name="peidx" type="xsd:integer" />\r
+       </message>\r
+       <portType name="netDB">\r
+               <operation name="checkAuth">\r
+                       <input message="typens:checkAuthIN" />\r
+                       <output message="typens:checkAuthOUT" />\r
+               </operation>\r
+       </portType>\r
+       <binding name="netDB" type="typens:netDB">\r
+               <soap:binding type="rpc" transport="http://schemas.xmlsoap.org/soap/http" />\r
+               <operation name="checkAuth">\r
+                       <soap:operation soapAction="urn:checkAuth" />\r
+                       <input>\r
+                               <soap:body use="encoded" namespace="urn:netDB" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />\r
+                       </input>\r
+                       <output>\r
+                               <soap:body use="encoded" namespace="urn:netDB" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />\r
+                       </output>\r
+               </operation>\r
+       </binding>\r
+       <service name="netDB">\r
+               <port name="netDBPort" binding="typens:netDB">\r
+                       <soap:address location="http://netdb.alphawest.com.au/xml/soap/server.php"/>\r
+               </port>\r
+       </service>\r
+</definitions>\r