最終的には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」を、事前に生成されたクラスを必要とせず、他の迷惑なフラフを最小限にして、機能するものに変更することです。
難しいことではないようですが、今のところ明確な例はわかりません。
誰か助けてもらえますか?
「シンプル」の概念はWSDLのすべてのものと互換性がないと思いますが、ここにいくつかの例があります:
[注]誰かの役に立つように、元の誤解されていた応答を以下に残しました。
この記事は、WSDLからサービスを実装するためのオプションの良い要約です。 5 WSDLからJava Webサービスを作成するためのテクニック 。
Java 6+を使用している場合は、JAX-WSプロバイダーAPIの実装が最も簡単な方法です。
ステップバイステップの簡単な方法:
これは、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-利益!
注:メソッドが何かのリストを返さない場合は、代わりにそれが返すオブジェクトにキャストする必要があります。
Axis2コマンドラインツールを使用することをお勧めします。
Java2wsdl -cn完全修飾クラス名
wsdl2Java -uri wsdlLocation -ss -sd -uw -g -o outputLocation
cd
をoutputLocation
に入れてantを実行します
生成された.aar
ファイルからWEB-INF/services
フォルダを使用してサービスを作成し(クライアントが必要な場合は不要)、生成されたスタブファイルをソースフォルダにコピーします。 YourServiceSkeleton
クラスを使用してビジネスロジックを実装し、クライアントにYourServiceStub
クラスを使用できます