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

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

【问题讨论】:

    标签: wsdl spring-ws


    【解决方案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 这给了我导入错误。事实证明,这些只是我想要使用的真实元素的占位符:) 也许你应该注意这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多