web-dev-qa-db-fra.com

Meilleur moyen de consommer un service Web RPC/encodé?

Je dois utiliser le service Web WSDL RPC/encodé de la vieille école pour mon backend. Au début, j'ai essayé d'utiliser Apache CXF et JAX-WS pour cela, mais l'outil JAX-WS wsimport ne consomme pas de WSDL rpc/enoded.

[ERREUR] Les fichiers wsdls rpc/encodés ne sont pas pris en charge dans JAXWS 2.0.

Je doute également d'utiliser JAX-RPC pour ce travail, car il est dépassé. L'axe 1.4 est un outil de 5 ans.

Actuellement, je vois ces trois options: 

  1. utilisez JAX-WS javax.xml.ws.Dispatch pour envoyer et recevoir SOAP et analysez-le d'une manière ou d'une autre, un exemple
  2. utilisez JAX-RPC et gagnez un mauvais karma pour utiliser une technologie obsolète,
  3. faites tout manuellement et me déteste plus tard.

Aucune de ces méthodes ne semble trop bonne, alors je vous serais reconnaissant de bien vouloir donner de bonnes pistes, de réfléchir à ce qu’il faut faire et à la façon de le résoudre.

31
Taavi Ilves

METTRE À JOUR

Mon cas a été résolu avec l'édition manuelle WSDL de encoded à literal (essentiellement sous opérations input et output use="literal" était le seul remplaçant) et je pouvais alors générer des stubs avec Apache CXF. Cela pourrait être fait, car le point de terminaison n'a pas analysé RPC/encodé de manière exacte et le XML de spécification RPC/encodé n'a pas pu être validé par rapport à WSDL).

Bien qu'Axis 1.4 puisse fonctionner pour vous, utiliser Apache CXF avec ce petit piratage WSDL peut constituer un meilleur moyen.


[Ancienne réponse]

Pour référence - J'ai opté pour l'utilisation de JAX-RPC et Axis 1.4 cette fois. J'ai généré le code client et j'espère pouvoir le remplacer par une implémentation JAX-WS lorsque le service sera mis à niveau.

16
Taavi Ilves

Au cas où quelqu'un voudrait (enfin, "comme" n'est pas le bon mot ici ;-) pour utiliser Axis 1.4, voici un plugin maven qui peut générer les classes et l'interface Port appropriées.

<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>
0
Foyta