Thursday, April 20, 2017

Why do I get this error “falseObject reference not set to an instance of an object.” when I call an operation in my webservice

Leave a Comment

I have a web service and I am calling one of its operations using SOAP client in PHP but all I get is this ["any"]=> string(120) "falseObject reference not set to an instance of an object.

I want to know is there anything wrong in my code because I belive that my connection to the web service is %100 working.

Is there anything wrong in the xml string that I am creating ?

The operation is :

<wsdl:operation name="XmlIslet">     <wsdl:input message="tns:XmlIsletSoapIn"/>     <wsdl:output message="tns:XmlIsletSoapOut"/> </wsdl:operation> 

and the description of its parameters in the WSDL is :

<wsdl:types>     <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">         <s:element name="XmlIslet">             <s:complexType>                 <s:sequence>                     <s:element minOccurs="0" maxOccurs="1" name="xmlIslem">                         <s:complexType>                             <s:sequence>                                 <s:any/>                             </s:sequence>                         </s:complexType>                     </s:element>                     <s:element minOccurs="0" maxOccurs="1" name="xmlYetki">                         <s:complexType>                             <s:sequence>                                 <s:any/>                             </s:sequence>                         </s:complexType>                     </s:element>                 </s:sequence>             </s:complexType>         </s:element>         <s:element name="XmlIsletResponse">             <s:complexType>                 <s:sequence>                     <s:element minOccurs="0" maxOccurs="1" name="XmlIsletResult">                         <s:complexType mixed="true">                             <s:sequence>                                 <s:any/>                             </s:sequence>                         </s:complexType>                     </s:element>                 </s:sequence>             </s:complexType>         </s:element>     </s:schema> </wsdl:types> 

My soap and PHP code is the following :

<?php $username = "username"; $password = "password"; $xmlString = "<Firmalar></Firmalar>";  function strtoXmldocument($str) {     $dom = new DOMDocument();     $str1 = $str;     return $dom->loadXML($str1); }  function stringToDataset($xmlString, $username, $password)      {                            $client = new SoapClient('http://1.1.1.1/WSTEST/Service.asmx?WSDL');      $response = $client->XmlIslet(strtoXmldocument($xmlString)->documentElement,   strtoXmldocument("<Kullanici><Adi>" .$username. "</Adi><Sifre>" .$password. "</Sifre></Kullanici>")->documentElement);  var_dump($response); }  stringToDataset($xmlString, $username, $password); ?> 

The SOAP request is as the following:

POST /WSTEST/Service.asmx HTTP/1.1 Host: 1.1.1.1 Content-Type: application/soap+xml; charset=utf-8 Content-Length: length  <?xml version="1.0" encoding="utf-8"?> <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">   <soap12:Body>     <XmlIslet xmlns="http://tempuri.org/">       <xmlIslem>xml</xmlIslem>       <xmlYetki>xml</xmlYetki>     </XmlIslet>   </soap12:Body> </soap12:Envelope> 

The SOAP response :

HTTP/1.1 200 OK Content-Type: application/soap+xml; charset=utf-8 Content-Length: length  <?xml version="1.0" encoding="utf-8"?> <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">   <soap12:Body>     <XmlIsletResponse xmlns="http://tempuri.org/">       <XmlIsletResult>xml</XmlIsletResult>     </XmlIsletResponse>   </soap12:Body> </soap12:Envelope> 

vardump output is :

usernamepasswordobject(stdClass)#2 (1) { ["XmlIsletResult"]=> object(stdClass)#3 (1) { ["any"]=> string(120) "falseObject reference not set to an instance of an object." } }  

EDIT : I tried to get the request xml using htmlentities($client->__getLastRequest()) which shows me an empty body of my request :

========= REQUEST ==========  string(292)  "<?xml version="1.0" encoding="UTF-8"?>  <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/"> <SOAP-ENV:Body> <ns1:XmlIslet> <ns1:xmlIslem/> <ns1:xmlYetki/> </ns1:XmlIslet> </SOAP-ENV:Body> </SOAP-ENV:Envelope> " 

1 Answers

Answers 1

You're most likely communicating with a .NET service. This error message is basically a "variable undefined" message.

The WSDL file says, you request must contain two entities: xmlIslem and xmlYetki. But their internal structure is not properly defined, it can be "any"-thing. This, however, doesn't mean, that the remove web service doesn't expect you to provide some data. It looks like you need to pass some data, which you don't, hence the error.

I would contact the web service provider and requested the documentation or specific request examples.

If You Enjoyed This, Take 5 Seconds To Share It

0 comments:

Post a Comment