【问题标题】:Understanding WSDL's, SOAP, REST, etc了解 WSDL、SOAP、REST 等
【发布时间】:2013-03-09 23:16:56
【问题描述】:

我正在尝试学习如何使用 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"

【问题讨论】:

  • 您确定要将 wsdl 定义交给解析器吗?
  • 我不确定。我正在使用的插件需要一个 wsdl,我在配置中提供了它。它用于生成 Java 类。我不知道它是否可以将其传递到其他需要去的地方,但我认为可以。

标签: rest grails soap wsdl cxf


【解决方案1】:

我猜你只是将http://api.geonames.org/postalCodeSearch?placename=MN&username=demo 返回的 XML 作为参数发送到 Web 服务。显然,从返回的 WSDL 描述中可以看出,不存在名为 geonames 的元素,因此 SOAPFaultException 异常是一个相当公平的结果。

要修复它,您必须仔细参考WSDL 描述,以确保调用方法具有正确的参数,可与 USAZipCodeService WSDL 描述标签中定义的任何内容(如<wsdl:operation><wsdl:message>)配合使用。

另一个问题:在您的调用程序和 Config.groovy 中提到了 2 个不同的 WSDL。前者是 RESTful 服务,后者是 SOAP 服务。它们使用不同的调用方法和参数,因此请确保您的代码也具有一致的调用程序和参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 2016-05-12
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多