ID: 36908 Updated by: [EMAIL PROTECTED] Reported By: amatunin at iponweb dot net -Status: Assigned +Status: Closed Bug Type: SOAP related Operating System: Linux Debian testing PHP Version: 5CVS-2006-03-29 (snap) Assigned To: dmitry New Comment:
Fixed in CVS HEAD and PHP_5_1. The problem was in XML reference handling. Previous Comments: ------------------------------------------------------------------------ [2006-04-10 12:27:32] [EMAIL PROTECTED] Assigned to the maintainer. ------------------------------------------------------------------------ [2006-03-29 12:39:50] amatunin at iponweb dot net Description: ------------ PHP SOAP server may parse SOAP request from client incorrectly if some variable in wsdl has a default value. I.e. value in the request gets ignored and the default value from WSDL is being used. Apparently the problem is being triggered by certain SOAP clients which generate SOAP packets with multiple references (for example Java's Asix does that). If WSDL doesn't define default values then PHP SOAP server parses exactly the same SOAP request correctly. Reproduce code: --------------- ----test-server.php----- <?php class PublisherService { function add ($publisher) { return print_r ($publisher, true); } } $input = '<?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <ns1:add xmlns:ns1="urn:PublisherService" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <publisher href="#id0"/> </ns1:add> <multiRef xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns3="http://soap.dev/soap/types" id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns3:publisher"> <region_id href="#id5"/> </multiRef> <multiRef xmlns:ns5="http://soap.dev/soap/types" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" id="id5" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="xsd:long">9</multiRef> </soapenv:Body> </soapenv:Envelope>'; ini_set('soap.wsdl_cache_enabled', false); $server = new SoapServer("wsdl.xml"); $server->setClass("PublisherService"); $server->handle($input); ?> -------wsdl.xml-------- <?xml version="1.0"?> <wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:api="http://soap.dev/soap/PublisherService" xmlns:types="http://soap.dev/soap/types" targetNamespace="http://soap.dev/soap/PublisherService"> <wsdl:types> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:types="http://soap.dev/soap/types" targetNamespace="http://soap.dev/soap/types"> <xsd:complexType name="publisher"> <xsd:all> <xsd:element name="region_id" type="xsd:long" default="52"/> </xsd:all> </xsd:complexType> </xsd:schema> </wsdl:types> <wsdl:message name="addInput"> <wsdl:part name="publisher" type="types:publisher"/> </wsdl:message> <wsdl:message name="addOutput"> <wsdl:part name="out" type="xsd:string"/> </wsdl:message> <wsdl:portType name="PublisherServicePortType"> <wsdl:operation name="add"> <wsdl:input message="api:addInput"/> <wsdl:output message="api:addOutput"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="PublisherServiceBinding" type="api:PublisherServicePortType"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="add"> <soap:operation soapAction="urn:PublisherService#add" style="rpc"/> <wsdl:input> <soap:body use="encoded" namespace="urn:PublisherService" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </wsdl:input> <wsdl:output> <soap:body use="encoded" namespace="urn:PublisherService" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="PublisherService"> <wsdl:port name="PublisherServicePort" binding="api:PublisherServiceBinding"> <soap:address location="http://soap.dev/soap//publisher_test.php"/> </wsdl:port> </wsdl:service> </wsdl:definitions> Expected result: ---------------- <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:PublisherService" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:addResponse><out xsi:type="xsd:string">stdClass Object ( [region_id] => 9 ) </out></ns1:addResponse></SOAP-ENV:Body></SOAP-ENV:Envelope> Actual result: -------------- <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:PublisherService" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:addResponse><out xsi:type="xsd:string">stdClass Object ( [region_id] => 52 ) </out></ns1:addResponse></SOAP-ENV:Body></SOAP-ENV:Envelope> ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=36908&edit=1