web-dev-qa-db-ja.com

Javaでwsdl Webサービスを使用する簡単な例?

最終的にはEclipseプラグインになるJavaでWSDL Webサービスを利用しようとしています。

「ファイル」>「新規」>「その他」を使用して「Webサービスクライアント」を選択できますが、Webサービスが変更されたときに変更/再生成する必要がある一連のファイルが生成されます。

どこを見ても、さまざまな方法が見られますが、実際に自分のやりたいことを実行させることはできません。

ここにいくつかのコードがあります:

String WsdlUrl = "http://localhost:port/path/to/wsdl";

ArrayList<String> args = new ArrayList();
args.add("arg1");
args.add("arg2");
// etc

Webservice ws = setupWebserviceObject( WsdlUrl );
Object result = ws.invoke("methodname",args);

System.out.println(result);

基本的に私が必要なのは、「Webservice」、「setupWebserviceObject」、「invoke」を、事前に生成されたクラスを必要とせず、他の迷惑なフラフを最小限にして、機能するものに変更することです。

難しいことではないようですが、今のところ明確な例はわかりません。

誰か助けてもらえますか?

8
Peter Boughton

「シンプル」の概念はWSDLのすべてのものと互換性がないと思いますが、ここにいくつかの例があります:

[注]誰かの役に立つように、元の誤解されていた応答を以下に残しました。

この記事は、WSDLからサービスを実装するためのオプションの良い要約です。 5 WSDLからJava Webサービスを作成するためのテクニック

Java 6+を使用している場合は、JAX-WSプロバイダーAPIの実装が最も簡単な方法です。

8
maerics

ステップバイステップの簡単な方法:

これは、Apache CXFおよびMaven依存関係管理を使用して作成されました。

1-ファイルに保存されたサービスのWSDL記述子を取得します。プロジェクトのリソースフォルダーに配置します(Eclipseを使用している場合、フォルダーはプロジェクトのソースフォルダーリストにある必要があります)。

2-pom.xmlで依存関係を宣言します。

<dependency>
    <groupId>org.Apache.cxf</groupId>
    <artifactId>cxf-rt-frontend-jaxws</artifactId>
    <version>2.7.7</version>
</dependency>
<dependency>
    <groupId>org.Apache.cxf</groupId>
    <artifactId>cxf-rt-transports-http</artifactId>
    <version>2.7.7</version>
</dependency>

3-次のMavenプラグインを使用してJavaクラスを生成します:

    <plugin>
        <groupId>org.Apache.cxf</groupId>
        <artifactId>cxf-codegen-plugin</artifactId>
        <version>2.7.7</version>
        <executions>
            <execution>
                <id>generate-sources</id>
                <phase>generate-sources</phase>
                <configuration>
                    <sourceRoot>${project.build.directory}/generated/cxf</sourceRoot>
                    <wsdlOptions>
                        <wsdlOption>
                            <wsdl>${basedir}/resources/WebService.wsdl.xml</wsdl>
                        </wsdlOption>
                    </wsdlOptions>
                </configuration>
                <goals>
                    <goal>wsdl2Java</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

4-次のコードを使用して呼び出しを行います。

String methodName = "getSomethingFromMyWebService";
DynamicClientFactory dcf = DynamicClientFactory.newInstance();
Client client = dcf.createClient(ConsumeTest.class.getClassLoader().getResource("WebService.wsdl.xml"));

Object[] res = client.invoke(methodName,parameter1,parameter2, parameterN);
SomethingObject[] somethingObjectList = (SomethingObject[])res[0];
Class.forName(res.getClass().getName()).isArray();
for(SomethingObject so : somethingObjectList){
    // do something!
}

5-利益!

注:メソッドが何かのリストを返さない場合は、代わりにそれが返すオブジェクトにキャストする必要があります。

1
Ric Jafe

Axis2コマンドラインツールを使用することをお勧めします。

Java2wsdl -cn完全修飾クラス名

wsdl2Java -uri wsdlLocation -ss -sd -uw -g -o outputLocation

cdoutputLocationに入れてantを実行します

生成された.aarファイルからWEB-INF/servicesフォルダを使用してサービスを作成し(クライアントが必要な場合は不要)、生成されたスタブファイルをソースフォルダにコピーします。 YourServiceSkeletonクラスを使用してビジネスロジックを実装し、クライアントにYourServiceStubクラスを使用できます

0
mdikici