我使用spring-ws创建了一个POX客户端(从XSD生成的jaxb2),但是对如何创建SOAP客户端(从WSDL生成)感到困惑。我正在使用wsimport生成存根,但似乎这对于使用spring-ws来说太过分了。存根实际上处理传输,与POX客户端一样,spring处理传输。所以,我的问题是:是否可以通过wsimport或jaxb2(如POX客户端)生成传输对象,或者我在WebServiceTemplate中调用/发送什么?
答案 0 :(得分:5)
是的,你可以。
确保您的XSD是从wsdl导入的,而不是嵌入在您的wsdl中。
在你的xsd指向xjc(来自Jaxb2)并让它生成你的类。
现在检查您的架构。
如果您的请求和响应元素具有嵌入的复杂类型,请使用:
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替换它们。