Лучший способ использовать RPC / закодированный веб-сервис? - PullRequest
31 голосов
/ 02 сентября 2011

Мне нужно использовать старый школьный RPC / WSDL-сервис для своей серверной части. Сначала я пытался использовать Apache CXF и JAX-WS для этого, но инструмент JAX-WS wsimport не использует WSDL с кодировкой rpc / enoded.

[ОШИБКА] RPC / кодированные wsdls не поддерживаются в JAXWS 2.0.

Я также сомневаюсь в использовании JAX-RPC для этой работы, потому что она устарела. Axis 1.4 - инструмент 5 лет.

В настоящее время я вижу эти три варианта:

  1. используйте JAX-WS javax.xml.ws.Dispatch для отправки и получения SOAP и его анализа каким-либо образом, один пример
  2. используйте JAX-RPC и получайте плохую карму за использование устаревшей технологии,
  3. делай все вручную и ненавидь себя позже.

Ничего из этого не звучит слишком хорошо, поэтому я был бы признателен, если бы вы дали хорошие подсказки, подумали, что делать и как это решить.

Ответы [ 2 ]

16 голосов
/ 06 сентября 2011

UPDATE

Мой случай был решен ручным редактированием WSDL из в кодировке в литерал (в основном при операциях ввода и вывода use="literal" была единственной заменой), а затем я мог генерировать заглушки с Apache CXF . Это можно сделать, потому что конечная точка не выполняет точный синтаксический анализ RPC / кодируется, а XML спецификации RPC / кодируется не может быть проверен на соответствие WSDL).

Хотя Axis 1.4 может работать для вас, лучше использовать Apache CXF с этим небольшим взломом WSDL.


[Старый ответ]

Для справки - на этот раз я выбрал JAX-RPC и Axis 1.4. Я сгенерировал клиентский код и, надеюсь, смогу заменить его реализацией JAX-WS при обновлении сервиса.

0 голосов
/ 22 ноября 2018

На случай, если кто-то захочет (ну, «здесь» - не то слово ;-), чтобы использовать 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>
...