Charlie Mulic
Charlie Mulic

Reputation: 199

Understanding WSDL's, SOAP, REST, etc

I'm trying to learn how to use WSDL's to call web services from a Grails project. I've been provided with the WSDL and some XML results for reference.

I've been able to generate Java code from the WSDL, and everything seems to be working correctly.

Here's the WSDL: http://www.restfulwebservices.net/rest/USAZipCodeService.svc?wsdl

And here is the XML: http://api.geonames.org/postalCodeSearch?placename=MN&username=demo

I am receiving this exception in my project:

ERROR client.WebServiceClientFactoryImpl$WSClientInvocationHandler - No namespace on "geonames" element. javax.xml.ws.soap.SOAPFaultException: No namespace on "geonames" element.

It seems like it is saying that the XML returned isn't valid for SOAP? Am I missing/misunderstanding some pieces the puzzle here? It is all pretty new to me.

Edit: I am trying to use a Grails plugin called cxf client: https://github.com/ctoestreich/cxf-client

It is configured with the following in Config.groovy (something could be wrong/missing here?):

wsdl = "http://www.restfulwebservices.net/wcf/USAZipCodeService.svc?wsdl"
namespace = "cxf.client.postalcode"
clientInterface = "cxf.client.postalcode.IPostalCodeService" 
serviceEndpointAddress = "http://api.geonames.org/postalCodeSearch"

Upvotes: 0

Views: 564

Answers (1)

coderLMN
coderLMN

Reputation: 3076

I guess you just sent the XML returned from http://api.geonames.org/postalCodeSearch?placename=MN&username=demo as a parameter to the web service. Obviously, from the WSDL description returned you can see there is no such element named geonames, so the SOAPFaultException exception is quite a fair result.

To fix it, you have to refer to the WSDL description carefully, to make sure the invoke method has the right parameters work with whatever defined in the USAZipCodeService WSDL description tags like <wsdl:operation> and <wsdl:message>.

Another issue: 2 different WSDLs were metioned in your invoker and Config.groovy. The former is a RESTful service, and the later is a SOAP one. They work with different invoke methods and parameters, so make sure your code has consistent invoker and parameters, too.

Upvotes: 1

Related Questions