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

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

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

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

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

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

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

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 для создания исходников и работы.

  1. сохраните свой wsdl локально (я поместил его в корень моего весеннего проекта Myspringproyectfolder/wsdl/servicio.wsdl)
  2. В WSDL измените весь текст с use="encoded" на use="literal", как сказано в верхнем ответе.
  3. Изменение в подключаемом модуле 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, чтобы сгенерировать источники, тип порта, фабрику объектов и т. д. и т. д.

Другие вопросы по тегам