Клиент Spring-ws из WSDL

Я создал клиент POX (сгенерированный из jaxb2 из XSD) с помощью spring-ws, но не понимаю, как создать клиент SOAP (сгенерированный из WSDL). Я использую wsimport для создания заглушек, но кажется, что это слишком далеко для использования с spring-ws. Заглушка фактически обрабатывает транспорт, где, как и в случае с POX-клиентом, Spring обрабатывает транспорт. Итак, мой вопрос: можно ли генерировать только транспортные объекты через wsimport или jaxb2 (например, клиент POX), или что я вызываю/отправляю в WebServiceTemplate?


person wuntee    schedule 14.04.2010    source источник


Ответы (1)


Да, ты можешь.

Убедитесь, что ваш XSD импортирован из вашего 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 из вашей схемы.

person Axel Fontaine    schedule 26.11.2010
comment
Это помогло мне настроить клиент веб-сервиса с помощью Spring WS и JAXB2. Я дословно скопировал те RequestElement и ResponseElement, которые выдали мне ошибки импорта. Оказывается, это всего лишь заполнители для реальных элементов, которые я хочу использовать :) Возможно, вам следует это учесть. - person chris; 03.12.2010