SOAP Request Not Working - WSDL Config Error

I have been trying to get a SOAP request working using the node-red-contrib-soap-httpcode node. I have put the WSDL http://www.opensolardb.org/wssolardata?wsdl into the WSDL field of the configuration but whenever I run the flow I get an error message:
WSDL Config Error: Error: ENOENT: no such file or directory, open 'http://www.opensolardb.org/wssolardata?wsdl'
If I use this URL in Chrome I get the correct XML data displayed but from Node-Red it doesn't seem to work.
I have tried some other WSDL's and they seem to have the same behaviour.

I should note that this is NODE RED running on a Raspberry Pi. I haven't yet had a chance to port to a PC and test.

Have you tried importing the example flow?

Does that work?

FYI

The example code does not work. It returns a 404. And there doesn't seem to be a way to add an issue in GitHub.

Node-red-contrib-soap-httpcode is a fork of a fork of the original node-red-contrib-soap

As @zenofmud says the example doesn’t work, you could either track down the author of the fork you are using and ask them, or switch to a different node.

You can also rate the node on flows.nodered.org if you have logged in

I explored a little further and found that the following works, based on the example code using a function to pass in the WSDL and parameters:

  • WSDL is http://www.opensolardb.org/wssolardata?wsdl for this test but it is passed to the SOAP node without the ?wsdl part, I think this is added in the function (later tested and it works with or without ?wsdl).

  • Tested using the method getPlacesInCountry and passed the parameter "AU" for the countryId:

var newmsg={
  server:"http://www.opensolardb.org/wssolardata?wsdl",
  options:{},
  headers:{},
  payload:{
      countryId:"AU"
  }
  
};
return newmsg;
  • The function returns a list of places in Australia as it should do.

The issue seems to be now that I get an error as follows if I try any method which does not accept parameters (eg. getAllCountries):

AssertionError [ERR_ASSERTION]: invalid message definition for rpc style binding
at....

I found this reference:

So I changed the javascript in the function to pass a null for the payload as follows:

var newmsg={
  server:"http://www.opensolardb.org/wssolardata?wsdl",
  options:{},
  headers:{},
  payload:null
  
};
return newmsg;

And it actually works now. I won't be assigning myself guru status any time soon but it feels good to have beaten the problem!

1 Like