Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"Object reference not set to an instance of an object" error connecting to SOAP server from PHP

I'm making my first attempt to connect to a SOAP server from PHP, and I'm not understanding how to log in and get the data I need. The service I'm trying to connect to is the Hawley USA service http://hawleyusa.com/thcServices/StoreServices.asmx). I've been looking at a few posts on how to connect, and I get the basics. I've verified that I have SOAP enabled in my PHP, and I'm just trying to get an inventory list. Here's the code I'm using:

<?php
ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache
$wsdl_path = "http://hawleyusa.com/thcServices/StoreServices.asmx?WSDL";

$login_id = 'mylogin_id';
$password = 'mypassword';

$client = new SoapClient($wsdl_path);

try {
  echo "<pre>\n";
  print($client->InventoryList(array("LoginID" => $login_id, "Password" => $password)));
  echo "\n";
}
catch (SoapFault $exception) {
  echo $exception;      
} 

However, when I run this code, I get this error:

SoapFault exception: [soap:Server] Server was unable to process request. ---> Object reference not set to an instance of an object. in /Users/steve/Sites/mysite/hawley_client.php:12

When debugging, I can see the $client instance initiated, so I'm not sure why I'm getting this error.

Second question: Am I passing the user ID and password correctly?

Thanks.

Update: I threw in $client->__getLastRequest, and this is what I got:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"              xmlns:ns1="http://hawleyusa.com/thcServices/">
<SOAP-ENV:Body>
<ns1:InventoryList/>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

So I can see that I'm missing my login ID and password. How do I add them to my InventoryList call?

like image 395
wonder95 Avatar asked Jun 30 '11 22:06

wonder95


People also ask

How do you fix error object reference not set to an instance of an object?

To fix "Object reference not set to an instance of an object," you should try running Microsoft Visual Studio as an administrator. You can also try resetting the user data associated with your account or updating Microsoft Visual Studio to the latest version.

What causes object reference not set to an instance of an object?

The message "object reference not set to an instance of an object" means that you are referring to an object the does not exist or was deleted or cleaned up. It's usually better to avoid a NullReferenceException than to handle it after it occurs.

What is object reference not set to an instance of an object in VB net?

"instance of object" Means that the object is blank (or in VB speak, "Nothing"). When you are dealing with object variables, you have to create an instance of that object before referencing it. "not set to an " means that you tried to access an object, but there was nothing inside of it for the computer to access.


2 Answers

You're close. Looking at the WSDL the InventoryList method takes an object called "request". Modify your call line slightly:

$client->InventoryList(array("request" => array("LoginId" => $login_id, "Password" => $password));
like image 148
Jonathan Avatar answered Oct 11 '22 14:10

Jonathan


Probably it's not the same case but it also gives the same error if you don't specify empty strings in fields you don't need to use, taken from http://www.sitepoint.com/forums/showthread.php?755549-SOAP-XML-Object-reference-not-set-to-an-instance-of-an-object

like image 44
darkstar_mx Avatar answered Oct 11 '22 13:10

darkstar_mx