0

私はWSDLを使用してGrailsプロジェクトからWebサービスを呼び出す方法を学ぼうとしています。参照用にWSDLといくつかのXML結果が提供されています。

WSDLからJavaコードを生成することができましたが、すべてが正しく機能しているようです。

これがWSDLです:http://www.restfulwebservices.net/rest/USAZipCodeService.svc?wsdl

そしてここにXMLがあります:http ://api.geonames.org/postalCodeSearch?placename = MN&username = demo

私のプロジェクトでこの例外を受け取っています:

エラーclient.WebServiceClientFactoryImpl$WSClientInvocationHandler-「geonames」要素に名前空間がありません。javax.xml.ws.soap.SOAPFaultException:「geonames」要素に名前空間がありません。

返されたXMLがSOAPに対して無効であると言っているようです。私はここでパズルのいくつかのピースを見逃している/誤解していますか?それはすべて私にとってかなり新しいものです。

編集:cxfクライアントと呼ばれるGrailsプラグインを使用しようとしています:https ://github.com/ctoestreich/cxf-client

Config.groovyで次のように構成されています(ここで何かが間違っている/欠落している可能性がありますか?):

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

1 に答える 1

1

http://api.geonames.org/postalCodeSearch?placename=MN&username=demoパラメータとして返されたXMLをWebサービスに送信したと思います。明らかに、返されたWSDL記述から、という名前のそのような要素がないことがわかりますgeonames。したがって、SOAPFaultException例外はかなり公正な結果です。

これを修正するには、WSDL記述を注意深く参照して、invokeメソッドが、やなどのUSAZipCodeServiceWSDL記述タグで定義されたもので適切なパラメーターが機能することを確認する必要が<wsdl:operation>あり<wsdl:message>ます。

別の問題:2つの異なるWSDLが呼び出し側とConfig.groovyで使用されていました。前者はRESTfulサービスであり、後者はSOAPサービスです。これらはさまざまな呼び出しメソッドとパラメーターで機能するため、コードに一貫した呼び出し元とパラメーターも含まれていることを確認してください。

于 2013-03-11T04:03:32.550 に答える