ID: 39179 Comment by: stuart at stuartherbert dot com Reported By: jchernia at netsuite dot com Status: No Feedback Bug Type: SOAP related Operating System: Windows XP PHP Version: 5.1.6 Assigned To: dmitry New Comment:
Looks like jchernia is trying to access Netsuite's web service (Netsuite is a popular hosted ERP solution). You can't access their SOAP service w/out a valid account, but if you had such an account, the following code triggers the error: <?php class GetRequest { public $baseRef = null; } class LoginRequest { public $passport = null; } class Passport { public $email = null; public $password = null; public $account = null; public $role = null; } class BaseRef { public $name = null; } class RecordRef extends BaseRef { public $internalId = null; public $externalId = null; public $type = null; } $user = new Passport(); $user->email='<your netsuite login>'; $user->password='<your netsuite password>'; $user->account='<your netsuite account ID>'; $user->role=new RecordRef; $user->role->internalId=<your role ID>; $loginRequest = new LoginRequest; $loginRequest->passport = $user; $soapClient = new SoapClient('https://webservices.netsuite.com/wsdl/v2008_1_0/netsuite.wsdl', array('trace' => 1)); $result = $soapClient->login($loginRequest); $requestRef = new RecordRef; $requestRef->externalId = 200; $requestRef->type = 'issue'; try { $issue = $soapClient->get(array('recordRef' => $requestRef)); var_dump($issue); } catch (Exception $e) { var_dump($e); var_dump($soapClient->__getLastRequest()); var_dump($soapClient->__getLastResponse()); } ?> __getLastRequest() reports: <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:messages_2008_2.platform.webservices.netsuite.com"><SOAP-ENV:Body><ns1:get><ns1:baseRef/></ns1:get></SOAP-ENV:Body></SOAP-ENV:Envelope> and __getLastResponse() reports: <?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> <soapenv:Fault> <faultcode>soapenv:Server.userException</faultcode> <faultstring>org.xml.sax.SAXException: {urn:core_2008_2.platform.webservices.netsuite.com}BaseRef is an abstract type and cannot be instantiated</faultstring> <detail> <ns1:hostname xmlns:ns1="http://xml.apache.org/axis/">partners-java001.svale.netledger.com</ns1:hostname> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope> Note the empty <ns1:baseRef/> in the request. baseRef is an abstract type, in this case extended the recordRef. The correct SOAP request is listed by the original poster. Hope that helps. If you need a Netsuite account for testing purposes, contact me privately and I'll sort one out for you. Best regards, Stu -- Previous Comments: ------------------------------------------------------------------------ [2006-10-31 01:00:01] php-bugs at lists dot php dot net No feedback was provided for this bug for over a week, so it is being suspended automatically. If you are able to provide the information that was originally requested, please do so and change the status of the bug back to "Open". ------------------------------------------------------------------------ [2006-10-23 05:38:17] [EMAIL PROTECTED] Could you provide full WSDL file and SOAP request or reeponce that ext/soap cannot handle correct. ------------------------------------------------------------------------ [2006-10-18 22:24:46] jchernia at netsuite dot com Still fails with 5.2. Is there a way to indicate that you want the subclass, not the abstract class? I don't see any in the documentation and I've tried lots of things. ------------------------------------------------------------------------ [2006-10-17 17:52:43] [EMAIL PROTECTED] Please try using this CVS snapshot: http://snaps.php.net/php5.2-latest.tar.gz For Windows: http://snaps.php.net/win32/php5.2-win32-latest.zip ------------------------------------------------------------------------ [2006-10-17 17:47:11] jchernia at netsuite dot com Description: ------------ This is very similar to bug 36575 http://bugs.php.net/bug.php?id=36575), but I still see this in the latest code. If an operation takes an abstract type, I can not get SoapClient (in WSDL mode) to produce one of the subclass instances of it, even if I set type, etc. Both Axis and .NET generated client classes will send the correct subclass if you specify it. NuSoap does not, but allows you to specify additional attributes in WSDL mode. Reproduce code: --------------- Operation <complexType name="GetRequest"> <sequence> <element name="baseRef" type="platformCore:BaseRef"/> </sequence> </complexType> <element name="get" type="platformMsgs:GetRequest"/> XSD: <complexType name="BaseRef" abstract="true"> <sequence> <element name="name" type="xsd:string" minOccurs="0"/> <!-- record name --> </sequence> </complexType> <element name="baseRef" type="platformCore:BaseRef"/> <complexType name="RecordRef"> <complexContent> <extension base="platformCore:BaseRef"> <attribute name="internalId" type="xsd:string"/> <attribute name="externalId" type="xsd:string"/> <attribute name="type" type="platformCoreTyp:RecordType"/> </extension> </complexContent> </complexType> Expected result: ---------------- <ns1:get> <ns1:baseRef internalId="17" type="customer" xsi:type="ns1:RecordRef"/> </get> Either this, or the ability to set these attributes in WSDL mode. Actual result: -------------- <ns1:get> <ns1:baseRef/> </ns1:get> ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=39179&edit=1