Web Service – Web Service Client(JAX-WS)のサンプル作成

JAX-WSを使って「Web Service」と「Web Service Client」を接続するサンプルを作成します。参考にしたサイト ※本手順書では 例 1までを実施。例2までは実施していない。

Web Service

まずは、受け口となるWeb Serviceを作成する。(絵があると分かりやすいな。。。)

Javaプロジェクトを作成する。

eclipseでJaxWSHelloService という名前でJavaプロジェクトを作成する。

src配下にcom.ibm.hello というパッケージを作成する。

上記パッケージ配下に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) {
    HelloUser server = new HelloUser();
    Endpoint endpoint = Endpoint.publish(
        "http://localhost:8091/wisequotes", server);
    }
  }
}

実行 / 確認

HelloUser.java ファイルにカーソルを合わせてJava Application実行。

Run As > Java Application

すると、プロジェクト内にWSDLファイルが生成される。そして、内部のサーバーが起動してローカルホストアドレス空間でWSDLファイルにアクセスすることが出来る。ちゃんと実行できたかの確認がてらアクセスしてみる。

ブラウザからURLを入力して確認する

http://localhost:8091/wisequotes?wsdl

WSDL(XMLのようなやつ)がブラウザに表示されたら実行確認完了。

スタブ自動生成

次にWeb Serviceのスタブを作成する。スタブは先ほど作成したWeb Serviceから自動生成させる。

どこでもいいので、空のフォルダを作成する。作成したらコマンドプロンプトを起動し、今作成した空のフォルダに移動する。

次のコマンドを入力して実行

>wsimport -keep http://localhost:8091/wisequotes?wsdl

次の内容が表示される。

WSDLを解析しています...

コードを生成しています...

コードをコンパイルしています...

元の場所に戻ってきたら完了。

移動した空のフォルダにClassとJavaファイルが作成される。これがスタブで、内容は次のとおり。フォルダ階層は、先ほど作成したWeb Serviceのパッケージに従って作成される。

  • com\ibm\hello\HelloUser.class
  • com\ibm\hello\HelloUser.java
  • com\ibm\hello\HelloUserService.class
  • com\ibm\hello\HelloUserService.java
  • com\ibm\hello\ObjectFactory.class
  • com\ibm\hello\ObjectFactory.java
  • com\ibm\hello\package-info.class
  • com\ibm\hello\package-info.java
  • com\ibm\hello\SayHello.class
  • com\ibm\hello\SayHello.java
  • com\ibm\hello\SayHelloResponse.class
  • com\ibm\hello\SayHelloResponse.java

Web Service Client

次にWeb Service Clientを作成する。このWeb Service ClientはWeb Service に接続することが出来る。

Javaプロジェクト作成

eclipseでJAXWSClient という名前でJavaプロジェクトを作成する。

必要なファイルを移植

src配下にcom.ibm.hello というパッケージを作成する。

先ほど作成したスタブ(ファイルのみ)をコピーする。

  • HelloUser.class
  • HelloUser.java
  • HelloUserService.class
  • HelloUserService.java
  • ObjectFactory.class
  • ObjectFactory.java
  • package-info.class
  • package-info.java
  • SayHello.class
  • SayHello.java
  • SayHelloResponse.class
  • SayHelloResponse.java

srcと同階層にlibフォルダを作成し必要なライブラリを配置する。←どこからライブラリ(jarファイル)を持ってきたのか忘れた。

com.ibm.hello 配下に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();
    }
  }

}

実行 / 確認

HelloClient.javaファイルにカーソルを合わせてJava Application実行。

Run As > Java Application

すると、コンソール出力される。これでSOAP疎通確認の完了。

※このとき、Web Server側が起動している必要がある。

まとめ

今回、SOAPのサンプルを作成しましたが仕組みについて理解の浅さを感じます。ですので、引き続き手を動かして調査をしようと思います。やってみようと思うのは、SOPA通信からREST通信へ変更する方法です。

次のサイトたちで勉強させてもらい調査していこうと思います。

  • https://www.ibm.com/developerworks/jp/webservices/library/ws-devaxis2part2/index.html
  • https://www.ibm.com/developerworks/jp/webservices/library/ws-devaxis2part1/
  • https://axis.apache.org/axis2/java/core/download.html
  • https://blogs.yahoo.co.jp/dk521123/31944955.html




Let's share SNS