web-dev-qa-db-ja.com

RPC /エンコードされたWebサービスを利用する最良の方法は?

バックエンドに古いRPC /エンコードされたWSDL Webサービスを使用する必要があります。最初はApache CXFとJAX-WSを使用してみましたが、JAX-WS wsimportツールはrpc/enoded WSDLを使用しません。

[エラー] rpc/encoded wsdlsはJAXWS 2.0ではサポートされていません。

この仕事にJAX-RPCを使用することにも疑問があります。 Axis 1.4は5年前のツールです。

現在、これらの3つのオプションが表示されます。

  1. jAX-WSを使用してくださいjavax.xml.ws.Dispatch =SOAPを送受信し、どういうわけかそれを解析します 1つの例
  2. jAX-RPCを使用し、時代遅れのテクノロジーを使用することで悪いカルマを得ます。
  3. すべて手動で行い、後で自分を嫌います。

これらはどちらも良い音ではないので、良いリードを与えて、何をすべきか、そしてそれを解決する方法を考えていただければ幸いです。

32
Taavi Ilves

更新

私の場合は、encodedからliteralへのWSDLの手動編集で解決されました(基本的に、操作の入力と出力の下でuse="literal"が唯一の置き換えでした)そして、Apache CXFでスタブを生成できました。エンドポイントがRPC /エンコードされたパースを正確に解析しておらず、RPC /エンコードされた仕様XMLをWSDLに対して検証できなかったため、それは可能でした。

Axis 1.4はうまくいくかもしれませんが、その小さなWSDLハックでApache CXFを使用する方がより良い方法かもしれません。


[古い答え]

参考までに、今回はJAX-RPCとAxis 1.4の使用を選択しました。クライアントコードを生成しましたが、サービスがアップグレードされたときに、それをJAX-WS実装に置き換えることができれば幸いです。

16
Taavi Ilves

誰かが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>
0
Foyta