web-dev-qa-db-ja.com

JavaでWebサービスを使用するだけです

非常に単純なSOAP= WebサービスをJavaクライアントから使用する必要があります。サードパーティライブラリを使用せずにこれを達成する最も簡単な方法は何ですか? ?要件は、wsを呼び出すたびに、ホストとポートがweb.xmlから読み取られることです。

35
Deano

CXFライブラリをお勧めします。これを使用すると、Webサービスを呼び出すためのいくつかのオプションがあります。

  1. 動的プロキシ を使用して呼び出します(Java wsdl2Javaを使用してスタブを作成する必要はありません)。

    DynamicClientFactory dcf = DynamicClientFactory.newInstance();
    Client client = dcf.createClient("http://admin:password@localhost:8080"+
                                     "/services/MyService?wsdl");
    Object[] a = client.invoke("test", "");
    System.out.println(a);
    
  2. Java wsdl2Javaを使用してWSDLから生成されたスタブを使用します。

  3. サーバーがCXFを使用して作成された場合、インターフェイスコードを直接再利用できます(インターフェイスから作成されたWSDLでwsdl2Javaを使用する代わりに!)

#2と#3の両方について、次のコードはCXFの使用例を示しています。

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setAddress("http://admin:password@localhost:8080/services/MyService");
factory.setServiceClass(ITest.class);
ITest client = (ITest) factory.create();
client.test();
23
FoxyBOA

使用しているJavaのバージョンに応じて、JAX-WSの一部が組み込まれています。JDK6にはJavaのJAX-WS標準実装があり、そのまま使用できます。

以下を参照してください。

22
anjanb

「サードパーティライブラリなし」の要件を緩和でき、Webサービス用のWSDLがある場合、Axisを使用すると非常に簡単になります。 wsdl2Javaを使用してWSDLをコンパイルするだけで、生成されたJavaクラスを使用してWebサービスを使用できます。

8
Dónal

サードパーティのライブラリを使用せずに? SOAP標準をよく理解し、SAXを愛することを学んでください。

SAXが気に入らない場合は、no-third-party-libs要件を緩和し、代わりにStAX(woodstoxを使用)を使用してください。

このアプローチは「最も簡単な」(no-third-party-libsの要件を考慮して)かもしれませんが、easyになるとは思いません。

1
Chris Vest