2

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

4

1 回答 1

5

是的你可以。

确保您的 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 替换它们。

于 2010-11-26T16:12:55.697 回答