来自 WSDL 的 Spring-ws 客户端

Posted

技术标签:

【中文标题】来自 WSDL 的 Spring-ws 客户端【英文标题】:Spring-ws client from WSDL 【发布时间】:2010-04-14 21:06:47 【问题描述】:

我使用 spring-ws 创建了一个 POX 客户端(从 XSD 的 jaxb2 生成),但对如何创建 SOAP 客户端(从 WSDL 生成)感到困惑。我正在使用 wsimport 来生成存根,但对于与 spring-ws 一起使用,这似乎走得太远了 1 步。存根实际上处理传输,与 POX 客户端一样,spring 处理传输。所以,我的问题是:是否可以通过 wsimport 或 jaxb2(如 POX 客户端)仅生成传输对象,或者我在 WebServiceTemplate 中调用/发送什么?

【问题讨论】:

【参考方案1】:

是的,你可以。

确保您的 XSD 是从您的 wsdl 导入的,而不是嵌入到您的 wsdl 中。

将 xjc(来自 Jaxb2)指向您的 xsd 并让它生成您的类。

现在检查您的架构。

如果您的请求和响应元素已嵌入复杂类型,请使用:

RequestElement requestElement = new RequestElement();
ResponseElement responseElement = (ResponseElement) webServiceTemplate.marshalSendAndReceive(requestElement);

否则(引用的复杂类型)使用这个:

RequestType requestType = new RequestType();
JAXBElement<RequestType> request = new ObjectFactory().createRequestType(requestType);
ResponseType responseType = ((JAXBElement<ResponseType>) webServiceTemplate.marshalSendAndReceive(request)).getValue();

RequestElement、ResponseElement、RequestType 和 ResponseType 当然只是示例。用从您的模式生成的任何类 Xjc 替换它们。

【讨论】:

这帮助我使用 Spring WS 和 JAXB2 设置了我的 web 服务客户端。我逐字复制了 RequestElement 和 ResponseElement 这给了我导入错误。事实证明,这些只是我想要使用的真实元素的占位符:) 也许你应该注意这一点。

以上是关于来自 WSDL 的 Spring-ws 客户端的主要内容,如果未能解决你的问题,请参考以下文章

Spring-ws自动生成WSDL时生成java类的最佳方式

SPRING-WS CLIENT 端 WSDL 试用

Spring-ws 自动生成wsdl 修改请求默认Request后缀的问题

使用 Spring-WS 路由 WS-Addressing 响应

能否结合来自 WCF 服务的 WSDL 和 XSD 数据?

SOAPUI 不显示来自 WSDL 的操作