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