ID: 34218 Updated by: [EMAIL PROTECTED] Reported By: Wojciech dot Szela at gmail dot com -Status: Open +Status: Feedback Bug Type: SOAP related Operating System: SuSe Linux 9.3 PHP Version: 5.0.4 New Comment:
Please try using this CVS snapshot: http://snaps.php.net/php5-latest.tar.gz For Windows: http://snaps.php.net/win32/php5-win32-latest.zip Previous Comments: ------------------------------------------------------------------------ [2005-08-23 10:16:12] Wojciech dot Szela at gmail dot com Description: ------------ There's a problem with objects' class name received by soap server, when passed in request object is inheriting from other one. For example: data type definition in wsdl: <xsd:complexType name="Vehicle"> <xsd:all> <xsd:element name="loadWeight" type="xsd:int"></xsd:element> </xsd:all> </xsd:complexType> <xsd:complexType name="Car"> <xsd:complexContent> <xsd:extension base="tns:Vehicle"> <xsd:all> <xsd:element name="engineNumber" type="xsd:string"></xsd:element> </xsd:all> </xsd:extension> </xsd:complexContent> </xsd:complexType> Second object is inheriting from the first one. And we have operation defined like that: <wsdl:message name="addCarResponse"> <wsdl:part name="return" type="tns:Car"></wsdl:part> </wsdl:message> <wsdl:message name="addCarRequest"> <wsdl:part name="car" type="tns:Car"></wsdl:part> </wsdl:message> <wsdl:operation name="addCar"> <soap:operation soapAction="http://www.foo.com/VehicleService/addCar"/> <wsdl:input> <soap:body use="encoded" namespace="http://www.foo.com/VehicleService/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </wsdl:input> <wsdl:output><soap:body use="encoded" namespace="http://www.foo.com/VehicleService/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </wsdl:output> </wsdl:operation> Soap client is written in Java (axis). Method addCar is invoked with variable of type Car. Soap server (PHP5) receives proper structure of object - it has all fields, inherited from father and it's own, but get_class(passedObject) returns father's class name (Vehicle). Class mapping is correct. WSDL file is correct. Even returned object, also of type Car, is correct. Reproduce code: --------------- $classmap = array( 'Car' => 'Car', 'Vehicle' => 'Vehicle' ); class fooService { public addCar($car) { $fh = fopen("foo.txt","a+"); fwrite($fh,get_class($car)+"\n"); fwrite($fh,var_export($car,true)); fclose($fh); $storedObject = $this->storeInDB($car); return $storedObject; } ini_set('soap.wsdl_cache_enabled',"0"); $server = new SoapServer('fooService.wsdl',array('classmap' => $classmap'); $server->setClass(fooService); $server->handle(); Expected result: ---------------- File content: Car Car: loadWeight->someValue Car: engineNumber->someOtherValue Actual result: -------------- File content: Vehicle Vehicle: loadWeight->someValue Vehicle: engineNumber->someOtherValue ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=34218&edit=1
