Лучший способ использовать RPC/ закодированный веб-сервис?
Мне нужно использовать старый школьный RPC/ WSDL-сервис для своей серверной части. Сначала я пытался использовать Apache CXF и JAX-WS для этого, но JAX-WS wsimport
инструмент не ест rpc / enoded WSDL.
[ОШИБКА] rpc/ закодированный wsdls не поддерживается в JAXWS 2.0.
Я также сомневаюсь в использовании JAX-RPC для этой работы, потому что она устарела. Axis 1.4 - это 5-летний инструмент.
В настоящее время я вижу эти три варианта:
- использовать JAX-WS
javax.xml.ws.Dispatch
отправить и получить SOAP и разобрать его как-то, один пример - использовать JAX-RPC и получить плохую карму за использование устаревшей технологии,
- делай все вручную и ненавидь себя позже.
Ни один из них не звучит слишком хорошо, поэтому я был бы признателен, если бы вы могли дать несколько хороших указаний, подумать, что делать и как это решить.
3 ответа
ОБНОВИТЬ
Мой случай был решен ручным редактированием WSDL из кодированного в буквальный (в основном при операциях ввода и вывода) use="literal"
была единственная замена) и тогда я мог генерировать заглушки с Apache CXF. Это могло быть сделано, потому что конечная точка не анализировала RPC/ кодировалась точно, а XML спецификации RPC/ кодировался не может быть проверен на соответствие WSDL).
Хотя Axis 1.4 может работать на вас, лучше использовать Apache CXF с этим небольшим взломом WSDL.
[Старый ответ]
Для справки - на этот раз я выбрал JAX-RPC и Axis 1.4. Я сгенерировал клиентский код и, надеюсь, смогу заменить его реализацией JAX-WS при обновлении сервиса.
В случае, если кто-то хочет (ну, "здесь" - не то слово;-), чтобы использовать Axis 1.4, вот плагин maven, который может генерировать соответствующие классы и интерфейс порта.
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>axistools-maven-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<goals>
<goal>wsdl2java</goal>
</goals>
<configuration>
<!-- Use your .wsdl location here-->
<sourceDirectory>${basedir}/src/main/resources/wsdl</sourceDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<!-- Here the libraries that you need to call the Axis WS client -->
<dependencies>
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis-jaxrpc</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>commons-discovery</groupId>
<artifactId>commons-discovery</artifactId>
<version>0.5</version>
</dependency>
<dependency>
<groupId>axis</groupId>
<artifactId>axis-wsdl4j</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis-saaj</artifactId>
<version>1.4</version>
</dependency>
<!-- activation+mail: To stop Axis generating WARNING about "Attachment support being disabled" -->
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
</dependencies>
У меня та же проблема со стилем WS RPC, у меня есть проект springboot с eclipse и java 1.8, и это... WS от провайдера (это означает, что я не могу изменить опубликованный wsdl).
Если вы используете Springboot, я использую плагин org.codehaus.mojo для создания исходников и работы.
- сохраните свой wsdl локально (я поместил его в корень моего весеннего проекта Myspringproyectfolder/wsdl/servicio.wsdl)
- В WSDL измените весь текст с use="encoded" на use="literal", как сказано в верхнем ответе.
- Изменение в подключаемом модуле POM приписывает измененный локальный WSDL вместо исходного URL-адреса WSDL.
пом.xml
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>wsimport-from-jdk</id>
<goals>
<goal>wsimport</goal>
</goals>
</execution>
</executions>
<configuration>
<wsdlUrls>
<wsdlUrl>wsdl/servicio.wsdl</wsdlUrl>
</wsdlUrls>
<keep>true</keep>
<packageName>com.cbb.facturalo.wsclient.generated</packageName>
<sourceDestDir>src/main/java</sourceDestDir>
</configuration>
</plugin>
4.- запустите maven/install, чтобы сгенерировать источники, тип порта, фабрику объектов и т. д. и т. д.