2013-03-09 72 views
0

我在學習如何使用WSDL從Grails項目調用Web服務。我已經提供了WSDL和一些XML結果供參考。瞭解WSDL,SOAP,REST等

我已經能夠從WSDL生成Java代碼,並且一切似乎都正常工作。

這裏的WSDL:http://www.restfulwebservices.net/rest/USAZipCodeService.svc?wsdl

這裏是XML:http://api.geonames.org/postalCodeSearch?placename=MN&username=demo

我收到這個例外在我的項目:

ERROR client.WebServiceClientFactoryImpl $ WSClientInvocationHandler - 對 「GEONAMES」 沒有命名空間元件。 javax.xml.ws.soap.SOAPFaultException:「geonames」元素上沒有名稱空間。

它似乎是說,返回的XML對SOAP無效?我是否錯過/誤解了這裏的難題?這對我來說都很新鮮。

編輯: 我試圖用一個Grails插件叫做CXF客戶端: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" 
+0

你確定你將wsdl定義傳遞給解析器嗎? – 2013-03-09 23:18:32

+0

我不確定。我使用的插件需要一個wsdl,並且我在配置中提供了它。它被用來生成Java類。我不知道它是否能夠將它傳遞到任何需要去的地方,但我會認爲它確實如此。 – 2013-03-09 23:26:26

回答

1

我想你只是將從http://api.geonames.org/postalCodeSearch?placename=MN&username=demo返回的XML作爲參數發送到Web服務。顯然,從返回的WSDL描述中可以看到,沒有這樣的元素名爲geonames,所以SOAPFaultException異常是相當公平的結果。

爲了解決這個問題,你必須仔細參考WSDL說明,以確保invoke方法具有正確的參數與合作無論在像<wsdl:operation><wsdl:message>的USAZipCodeService WSDL描述標籤定義。

另一個問題:在您的調用程序和Config.groovy中提到了2個不同的WSDL。前者是一種RESTful服務,後者是一種SOAP。他們使用不同的調用方法和參數,因此請確保您的代碼具有一致的調用者和參數。