JAX-WSを使用してSOAP通信するプログラムを作成します。構成としてはサーバー側である「Web Service」とクライアント側である「Web Service Client」で、SOAP通信で接続します。
JAX-WSとは
JAX-WSとは、SOAPやRESTを使ったWebサービスを扱うためのAPIです。Java API for XML-Based Web Servicesの頭文字からその名称になりました。
本記事では、SOAP通信を使います。REST通信は使いません。
サーバー側の作成
まずは、サーバー側となるWeb Serviceを作成します。
eclipseでJaxWSHelloService という名前のJavaプロジェクトを作成し、次のソースコードを作成します。
package com.ibm.hello; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import javax.xml.ws.Endpoint; @WebService public class HelloUser { @SOAPBinding public String sayHello(String name) { return "Welcome"+ name; } public static void main(String[] args) { Endpoint endpoint = Endpoint.publish( "http://localhost:8091/wisequotes", new HelloUser()); } } }
作成すると自動でコンパイルされます。作成完了したら Run As > Java Application で実行します。
無事に起動できると、プロジェクト内にWSDLファイルが生成され、サーバーが起動しHTTPリクエストを受け付けるようになります。ブラウザから次のURLを入力して確認してみましょう。
http://localhost:8091/wisequotes?wsdl
WSDL(XMLのようなやつ)がブラウザに表示されたら無事に起動することが出来ています。これでサーバー側は作成完了です。
クライアント側の作成
次にクライアント側となるWeb Service Clientを作成します。
eclipseでJAXWSClient という名前でJavaプロジェクトを作成し、src配下にcom.ibm.hello というパッケージを作成します。
コマンドプロンプト上で上記helloフォルダに移動し、次のコマンドを実行します。
>wsimport -keep http://localhost:8091/wisequotes?wsdl
次の内容が表示され、ソースコードが自動生成されるので少々待ちます。
WSDLを解析しています... コードを生成しています... コードをコンパイルしています...
無事に終了すると次のソースコードが自動生成されます。
- HelloUser.java
- HelloUserService.java
- ObjectFactory.java
- package-info.java
- SayHello.java
- SayHelloResponse.java
クライアント側のメイン処理として次のソースコードを作成します。
package com.ibm.hello; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.io.*; import javax.xml.namespace.QName; public class HelloClient { public static void main(String[] args) { // Setting up the server connection HelloUserService service = new HelloUserService(); HelloUser servicePort = service.getHelloUserPort(); // Calling the web service System.out.println(servicePort.sayHello(" " +"" +"Kuntal")); // Alternatively if you want to specific the URL directly try { URL url = new URL("http://localhost:8091/wisequotes?wsdl"); HelloUserService serviceWithUrl = new HelloUserService(url,new QName("http://hello.ibm.com/","HelloUserService")); HelloUser servicePortWithUrl = serviceWithUrl.getHelloUserPort(); // To Enter user name from Console System.out.println("Enter your Name: "); InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); String s = br.readLine(); System.out.println(servicePortWithUrl.sayHello(s)); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
作成すると自動でコンパイルされます。作成完了したら Run As > Java Application で実行します。これでクライアント側の作成完了です。
コンソール出力でSOAP通信の疎通が確認できます。
参考
Web サービスを開発する: 第 2 回 JAX-WS を使用してファイル・ダウンロード Web サービスを開発する – IBM