2009-12-01 27 views
23

Webサービスは何も知らず、wsdlで記述されているいくつかの "isAlive"サービスを呼び出そうとしています。Webサービス(wsdlで記述)をJavaから呼び出す方法

誰もが任意のアイデアを持っているなどこれは、コードのこれ以上2-5以下の行を取る必要があります何かのように私には思われるが、私は、サードパーティ製のパッケージを含む巨大な長い例が、何かを見つけるように見えることはできませんか?なぜそれがとても複雑でなければならないのかということに関しては、長いことが分かっているといいでしょう。 私はEclipseを使用しており、wsdlはSOAPです。

+0

で正常に動作し、非常に小さなコードスニペットを生成しますが、IDEを提供していただけますあなたが使う? – JCasso

+0

SOAPでも他のプロトコルであれ、wsdlを見ることができますか?私はそれがSOAPだと確信しています。 –

+0

soapです:xmlns:ns2 = "http://schemas.xmlsoap.org/soap/encoding 私はEclipse IDEを使用しています – codekitty

答えて

4

Webサービスを消費するために必要なコードを生成するIDE用のプラグインがあります。

プラグインがあなたの基本メソッドを生成した後、あなたは、単にそのようなWebサービスを呼び出す:

TransportServiceSoap service = new TransportServiceLocator().getTransportServiceSoap(); 
service.getCities(); 

http://urbas.tk/index.php/2009/02/20/eclipse-plug-in-as-a-web-service-client/

+0

偉大なリンク。すぐに私の問題を解決しました –

5

を見てくださいJDK 6は、JAX-WS、あなたが開発するために必要なすべてのものが付属していますWebサービスのクライアント。

私が投稿するいくつかの簡単な十分な例を見つけることができないんだけど、https://jax-ws.dev.java.net/

編集で起動します。ここでは簡単な例だ - このWebサービスのクライアント:http://xmethods.com/ve2/ViewListing.po?key=427565

C:\temp> md generated 
C:\temp>"c:\Program Files\Java\jdk1.6.0_17"\bin\wsimport -keep -d generated http://www50.brinkster.com/vbfacileinpt/np.asmx?wsdl 

PrimeClientを作成します。以下のように見えるのjava:

import javax.xml.ws.WebServiceRef; 
import com.microsoft.webservices.*; 
//the above namespace is from the generated code from the wsdl. 

public class PrimeClient { 
//Cant get this to work.. @WebServiceRef(wsdlLocation="http://www50.brinkster.com/vbfacileinpt/np.asmx?wsdl") 
    static PrimeNumbers service; 

    public static void main(String[] args) { 
    try { 
    service = new PrimeNumbers(); 
     PrimeClient client = new PrimeClient(); 
     client.doTest(args); 
    } catch(Exception e) { 
     e.printStackTrace(); 
    } 
    } 

    public void doTest(String[] args) { 
    try { 
     System.out.println("Retrieving the port from the following service: " + service); 
     PrimeNumbersSoap pm = service.getPrimeNumbersSoap(); 
     System.out.println("Invoking the getPrimeNumbersSoap operation "); 
     System.out.println(pm.getPrimeNumbers(100)); 
    } catch(Exception e) { 
     e.printStackTrace(); 
    } 
    } 
} 

コンパイルして実行します。

C:\temp>"c:\Program Files\Java\jdk1.6.0_17"\bin\javac -cp generated PrimeClient.java 
C:\temp>"c:\Program Files\Java\jdk1.6.0_17"\bin\java -cp .;generated PrimeClient 
Retrieving the port from the following service: com.microsoft.webservices.PrimeN 
[email protected] 
Invoking the getPrimeNumbersSoap operation 
1,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97 
+0

あなたは確信していませんか? –

+1

@AngeloNeuschitzer wdslにはネットワークアドレスが含まれており、生成されたコードがそのサービスへの接続を設定します。コードはネットワークコールを参照してください。サーバーが到達不能になるため、オフラインになっている場合、これは明らかに機能しません。 – nos

+2

回答のリンクが両方とも無効です。 – tdgtyugdyugdrugdr

1

There are three ways to write a web service client

  1. 動的プロキシ
  2. 動的起動インターフェース(DII)
  3. アプリケーションクライアント

例動的プロキシクライアントの

import java.net.URL; 

import javax.xml.rpc.Service; 

import javax.xml.rpc.JAXRPCException; 

import javax.xml.namespace.QName; 

import javax.xml.rpc.ServiceFactory; 

import dynamicproxy.HelloIF; 

public class HelloClient { 

    public static void main(String[] args) { 
     try { 

      String UrlString = "Your WSDL URL"; // 
      String nameSpaceUri = "urn:Foo"; 
      String serviceName = "MyHelloService"; 
      String portName = "HelloIFPort"; 

      System.out.println("UrlString = " + UrlString); 
      URL helloWsdlUrl = new URL(UrlString); 

      ServiceFactory serviceFactory = 
       ServiceFactory.newInstance(); 

      Service helloService = 
       serviceFactory.createService(helloWsdlUrl, 
       new QName(nameSpaceUri, serviceName)); 

      dynamicproxy.HelloIF myProxy = 
       (dynamicproxy.HelloIF) 
       helloService.getPort(
       new QName(nameSpaceUri, portName), 
       dynamicproxy.HelloIF.class); 

      System.out.println(myProxy.sayHello("Buzz")); 

     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 
} 

I hope , this would solve your question.

+0

これは簡単に見える、私は今これを試してみるつもりです。 – codekitty

+0

eclipseはこれらのインポートを見つけることができません。ビルドパスにどのパッケージを追加する必要がありますか? – codekitty

+0

"import dynamicproxy.HelloIF;"を除くすべてのパッケージにはJDKが付属しています。このパッケージを削除できます。 – Tony

-2

私が使用することをこれまでに見つけた最も簡単なアイデアのIntelliJウィザードです - メトロライブラリを使用して - Javaの6

+0

downvote?その真実:) Java 6では、余分なライブラリがなくてもうまく動作します。 –

関連する問題