来自 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 自动生成wsdl 修改请求默认Request后缀的问题