rest - 了解 WSDL、SOAP、REST 等

标签 rest grails soap wsdl cxf

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

最佳答案

我猜你刚刚发送了从 http://api.geonames.org/postalCodeSearch?placename=MN&username=demo 返回的 XML作为 Web 服务的参数。显然,从返回的 WSDL 描述中您可以看到没有名为 geonames 的元素。 ,所以 SOAPFaultException异常(exception)是一个相当公平的结果。

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

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

关于rest - 了解 WSDL、SOAP、REST 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15317042/

相关文章:

Android:将 JSON 转换为 POJO 是正确的方法吗?

java - 无法反序列化对对象数组的 JSON 响应

excel - Grails excel导入

grails - 除Grails中的字符串以外的其他类型的映射

Grails 3.X 将服务注入(inject)自定义监听器

c# - 如何消费https wcf服务?

java - 如何使用 Java 使用 rpc 编码的 SOAP Web 服务

java - 如何在 Java SE 环境中部署 JAX-RS 应用程序?

http - 带有 HEAD 请求的 Content-Length header ?

javax.xml.soap.SOAPException : java. security.ProviderException:无法派生 key