JAX-WSを使用してSOAP通信するプログラムを作成する

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プロジェクトを作成し、次のソースコードを作成します。

HelloUser.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

クライアント側のメイン処理として次のソースコードを作成します。

HelloClient.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