1. Webサービスアプリケーションの開発

1.1. チュートリアル

WebOTX Developerを使うと、簡単にWebサービスを作成することができます。ここでは、WebOTX Developerを使ってシンプルなWebサービスを作成し、開発の手順やWebOTX Developerの操作を実際に体験していただきます。まずは、最初から説明の通りに操作して、開発の流れを理解してください。

Caution
ここで紹介している方法でWebサービスをテストするには、WebOTX Developer のインストール時に テスト用サーバ も選択してインストールしておく必要があります。

ここでは、Webサービスの作成方法として以下の4通りの方法を説明します。

Memo
JAX-RPCは旧互換のための機能です。 新規にSOAP Webサービスを作成する場合は、JAX-WSに準拠するサービスを作成してください。


1.1.1. SOAP Webサービスの作成

1.1.1.1. JAX-WSに準拠するWebサービスの新規作成

JAX-WSに準拠するWebサービスを一から作成します。
Java EEパースペクティブに切り替えます
右上のショートカットバーで Java EE パースペクティブを選択します。


図1.1.1.1-1

Webサービスを新規作成します
メニュー ファイル > 新規 > その他 を選択して、 新規 ダイアログを表示させます。


図1.1.1.1-2


新規画面で Web サービス > Web サービス(JAX-WS/JAX-RPC) を選択し、 次へ をクリックします。


図1.1.1.1-3


プロジェクト名に「HelloService」を指定し、Webサービス仕様 は 「JAX-WS」を選択し、新規に作成 を選択し、次へをクリックします。


図1.1.1.1-4


Webサービス名 に「HelloService」を指定し、Webサービスの属する名前空間URI に 「http://sample/Hello」を指定し、次へをクリックします。


図1.1.1.1-5


何も変更せず、次へをクリックします。


図1.1.1.1-6


完了をクリックします。しばらくすると、パッケージエクスプローラに「HelloService」プロジェクトが表示されます。


図1.1.1.1-7


生成されたプロジェクト「HelloService」の「src」フォルダ配下にあるsample.hello.helloservice.HelloServiceファイルにメソッド「 say_hello」を追加します。
/**
 * HelloService.java
 * 
 * This file was auto-generated
 * by the Web Service Director Eclipse Plugin Edition.
 */

package sample.hello.helloservice;

import javax.jws.WebService;

@WebService(targetNamespace = "http://sample/Hello", serviceName = "HelloService")
public class HelloService {
  //TODO: Add Operation
  public String say_hello(String name) {
    return "Hello " + name + " !";
  }
}
ここまでで、JAX-WSに準拠するWebサービスの作成が完了しました。
次は作成したWebサービスをアーカイブしてサーバに配備します。「WARファイルを作成します」を参照してください。

Memo
配備しないままで、WSDLファイルを入手しクライアントを生成することも可能です。詳細は「1.1.5. WSDLファイルの生成」を参照してください。


1.1.1.2. JAX-WSに準拠するWebサービスをWSDLファイルから作成

JAX-WSに準拠するWebサービスをWSDLファイルから作成します。ここでは、「1.5.3. WSDLから作成したサービス(ウィザード利用) 」 の 「AddNumbers.wsdl」を使用しています。
メニュー ファイル > 新規 > その他 を選択して、 新規 ダイアログを表示させます。


図1.1.1.2-1


新規画面でWeb サービス > Web サービス(JAX-WS/JAX-RPC) を選択し、 次へ をクリックします。


図1.1.1.2-2


プロジェクト名 に「HelloService_wsdl」を、Webサービス仕様 に 「JAX-WS」を、WSDLから作成を選択し、WSDLファイルのロケーション (WSDLファイルは添付の「AddNumbers.wsdl」ファイルのロケーション)を指定して、 次へをクリックします。


図1.1.1.2-3


何も変更せず、次へをクリックします。


図1.1.1.2-4


完了をクリックします。しばらくすると、パッケージエクスプローラに「HelloService_wsdl」プロジェクトが表示されます。


図1.1.1.2-5


生成されたプロジェクト「HelloService_wsdl」の「src」フォルダ配下にあるorg.duke.AddNumbersPortTypeImplファイルは下記のようにビジネスロジックを追加します。
/** 
* AddNumbersPortTypeImpl.java 
* 
* This file was auto-generated 
* by the Web Service Director Eclipse Plugin Edition. 
*/ 
package org.duke; 

import javax.jws.WebService; 

@WebService(endpointInterface="org.duke.AddNumbersPortType", serviceName = "AddNumbersService") 
public class AddNumbersPortTypeImpl { 
  public int addNumbers(int arg0, int arg1) { 
    //TODO implement this method 
    //throw new UnsupportedOperationException("Not implemented yet"); 
    return 1; 
  } 
  public void oneWayInt(int arg0) { 
    //TODO implement this method 
    //throw new UnsupportedOperationException("Not implemented yet"); 
    System.out.println("Service received: " + arg0); 
  } 
}
ここまでで、WSDLファイルからJAX-WSに準拠するWebサービスの作成が完了しました。
次は作成したWebサービスをアーカイブしてサーバに配備します。「WARファイルを作成します」を参照してください。

1.1.2. RESTful Webサービスの作成

1.1.2.1. XMLで通信するRESTful Webサービスの作成

XMLで通信するRESTful Webサービスの作成方法について説明します。
RESTful Webサービスプロジェクトの作成
メニューファイル新規プロジェクトで、Web動的Webプロジェクトを選択して、次へをクリックし、以下のように指定します。


図1.1.2.1-1

表1.1.2.1-1
項目
プロジェクト名 RestSampleXML
ターゲット・ランタイム WebOTX Application Server v9(Local Default)
変更をクリックし、プロジェクト・ファセットJAX-RS(REST Web Service)を選択し、OKをクリックします。


図1.1.2.1-2

次へで画面を進め、以下のように指定しして、完了をクリックします。


図1.1.2.1-3

表1.1.2.1-2
項目
JAX-RS Implementation Library ライブラリー構成を無効
JAX-RS servlet class name com.nec.webotx.jersey.spi.container.servlet.ServletContainer
URL マッピング・パターン /*
XML Beanクラスの作成
RestSampleXMLプロジェクトで右クリック > 新規 > クラスを選択し、パッケージsample.resourceに、Customerというクラスを作成します。
作成されたCustomerクラスをエディタで開いて、String型のlastnameおよびfirstnameフィールドを追加します。
package sample.resource;

public class Customer {
    private String lastname;
    private String firstname;
}
メニュー ソースGetterおよびSetterの生成 を選択し、すべて選択をクリックして、OK をクリックすると、Customer.javaにGetterおよびSetterが追加されます。
package sample.resource;

public class Customer {
    private String lastname;
    private String firstname;

    public String getLastname() {
        return lastname;
    }

    public void setLastname(String lastname) {
        this.lastname = lastname;
    }

    public String getFirstname() {
        return firstname;
    }

    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }
}
クラス名Customerを選択し、注釈プロパティービューでアノテーション@XmlRootElementを追加し、そのname属性の値を"氏名"に設定します。


図1.1.2.1-4

同様な方法で、属性lastnameにアノテーション@XmlElement(name = "姓")を追加し、属性firstnameにアノテーション@XmlElement(name = "名")を追加し、メソッドgetLastname()及びgetFirstname()にアノテーション@XmlTransientを追加します。
package sample.resource;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

@XmlRootElement(name = "氏名")
public class Customer {
    @XmlElement(name = "姓")
    private String lastname;
    @XmlElement(name = "名")
    private String firstname;
    
    @XmlTransient
    public String getLastname() {
        return lastname;
    }
    public void setLastname(String lastname) {
        this.lastname = lastname;
    }
    
    @XmlTransient
    public String getFirstname() {
        return firstname;
    }
    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }
}
ユーティリティークラスとデーターファイルの作成
Util.java
RestSampleXMLプロジェクトで右クリック > 新規 > クラスを選択し、パッケージsample.utilに、Utilというクラスを作成します。
作成されたUtilクラスをエディタで開いて、以下の太字部分の内容を追加し、保存します。
package sample.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

import sample.resource.Customer;

public class Util {
    public static Map<String, Customer> loadData(String datafile) {
        Map<String, Customer> map = new HashMap<String, Customer>();
        String contents = readFile(datafile);
        if (contents != null) {
            String[] line = contents.split("\n");
            for (int i = 0; i < line.length; i++) {
                String[] items = line[i].split(",");
                if (items.length == 3) {
                    Customer customer = new Customer();
                    customer.setLastname(items[1]);
                    customer.setFirstname(items[2]);
                    map.put(items[0], customer);
                }
            }
        }
        return map;
    }

    public static String readFile(String fileName) {
        StringBuffer sBuffer = new StringBuffer();
        BufferedReader br = null;
        try {
            br = new BufferedReader(new InputStreamReader(
                    Util.class.getResourceAsStream(fileName)));
            String tmpStr = br.readLine();
            while (tmpStr != null) {
                sBuffer.append(tmpStr).append("\n");
                tmpStr = br.readLine();
            }
            return sBuffer.toString();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                br.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return sBuffer.toString();
    }
}
customerlist.txt
RestSampleXMLプロジェクトで右クリック > 新規 > パッケージを選択し、sample.dataというパッケージを作成します。
RestSampleXMLプロジェクトで右クリック > 新規 > ファイルを選択し、dataフォルダにcustomerlist.txtというファイルを作成します。


図1.1.2.1-5

作成されたcustomerlist.txtファイルをエディタで開いて、以下の内容を追加し、保存します。
0001,田中,太郎
0002,鈴木,一郎
ルートリソースクラスの作成
RestSampleXMLプロジェクトで右クリック > 新規 > クラスを選択し、パッケージsampleに、CustomerResourceというクラスを作成します。
作成されたCustomerResourceクラスをエディタで開いて、以下のメソッドgetCustomerList()を追加し、保存します。
package sample;

import java.util.Map;

import sample.resource.Customer;
import sample.util.Util;

public class CustomerResource {
    public Customer getCustomerList(String id) {
        // load data
        Map<String, Customer> map = Util.loadData("/sample/data/customerlist.txt");
        Customer customer = map.get(id);
        return customer;
    }
}
クラス名CustomerResourceを選択し、注釈プロパティービューでアノテーション@Pathを追加し、そのvalue属性の値を"/name_list"に設定します。


図1.1.2.1-6

同様な方法で、メソッドgetCustomerList()にアノテーション@Path(value = "{id}")@GET及び@Produces(value = { "application/xml" })を追加し、パラメーター id にアノテーション@PathParam(value = "id")を追加します。
package sample;

import java.util.Map;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;

import sample.resource.Customer;
import sample.util.Util;

@Path(value = "/name_list")
public class CustomerResource {
    @Produces(value = { "application/xml" })
    @GET
    @Path(value = "{id}")
    public Customer getCustomerList(@PathParam(value = "id") String id) {
        // load data
        Map<String, Customer> map = Util.loadData("/sample/data/customerlist.txt");
        Customer customer = map.get(id);
        return customer;
    }
}

Memo
アノテーションのvalue属性の属性名が省略できますので、以下のソースは上のソースと同等な処理を持ちます。

package sample;

import java.util.Map;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;

import sample.resource.Customer;
import sample.util.Util;

@Path("/name_list")
public class CustomerResource {
    @Produces("application/xml")
    @GET
    @Path("{id}")
    public Customer getCustomerList(@PathParam("id") String id) {
        // load data
        Map<String, Customer> map = Util.loadData("/sample/data/customerlist.txt");
        Customer customer = map.get(id);
        return customer;
    }
}
ここまでで、XML で通信するJAX-RSに準拠するWebサービスの作成が完了しました。
次は作成したWebサービスをアーカイブしてサーバに配備します。 「WARファイルを作成します」を参照してください。

1.1.2.2. JSONで通信するRESTful Webサービスの作成

JSONで通信するRESTful Webサービスの作成方法について説明します。

上記の[1.1.2.1. XMLで通信するRESTful Webサービスの作成]で作成したWebサービスに、 CustomerResourceクラスの @Produces("application/xml") を @Produces("application/json")  に変更するたけで、JSONで通信するRESTful Webサービスに変更できます。
package sample;

import java.util.Map;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;

import sample.resource.Customer;
import sample.util.Util;

@Path("/name_list")
public class CustomerResource {
    @Produces("application/json")
    @GET
    @Path("{id}")
    public Customer getCustomerList(@PathParam("id") String id) {
        // load data
        Map<String, Customer> map = Util.loadData("/sample/data/customerlist.txt");
        Customer customer = map.get(id);
        return customer;
    }
}
サーバに配備については、XML で通信する場合と同様、 「WARファイルを作成します」を参照してください。

1.1.3. (ご参考)JAX-RPCに準拠するWebサービスの作成

Memo
本機能は旧互換のための機能です。 新規にWebサービスを作成する場合は、JAX-WSに準拠するサービスを作成してください。


JAX-RPCに準拠するWebサービスを既存のビジネスロジックから作成します。
Javaアプリケーションを作成します
まず始めに、Webサービス化するビジネスロジックを作成します。ここでは、あとの説明のために新規にビジネスロジックを作成しますが、実際にWebサービスを作成する時は、既存のビジネスロジックを利用することもできます。
Javaパースペクティブに切り替えます
右上のショートカットバーで パースペクティブを開く アイコンをクリックし、 Java を選択します。


図1.1.3-1


Javaプロジェクトを新規作成します
メニュー ファイル > 新規 > プロジェクト を選択して、 新規プロジェクト ダイアログを表示させます。


図1.1.3-2


新規プロジェクトダイアログでJavaプロジェクトを選択し、 次へをクリックします。


図1.1.3-3


プロジェクト名 に「Hello」を入力し、プロジェクト・レイアウトソースおよびクラス・ファイルのフォルダーを個別に作成 を選択して 次へ をクリックします。


図1.1.3-4


次へ をクリックします。


図1.1.3-5


完了 をクリックします。
しばらくすると、パッケージエクスプローラに生成されたHelloプロジェクトが表示されます。
Helloクラスを作成します
パッケージエクスプローラに表示されているHelloプロジェクト上で右クリックメニュー 新規 > クラス を選択します。


図1.1.3-6


パッケージ に「com.nec.webotx.webservice.sample」を、名前 に「 Hello」を指定し、完了をクリックします。
しばらくすると、Helloプロジェクトの中にHelloクラスが生成されます。


図1.1.3-7


生成されたHelloクラスに次のように実装し、保存します。ビルドを保存時に自動実行する設定にしていない場合には、保存後にプロジェクトビルドを手動で行ってください。
package com.nec.webotx.webservice.sample; 
public class Hello { 
  public String say_hello(String name) { 
    return "Hello " + name + " !"; 
  } 
}
Webサービス(JAX-RPC)を作成します
次は、作成したJava アプリケーションからWeb サービスを作成します。まず、Web サービス作成ウィザードを使って動的Web プロジェクトをつくります。
その後、動的Web プロジェクトに生成されたWeb サービスをWAR ファイルにアーカイブします。
Webサービス作成ウィザードを実行します
メニュー ファイル > 新規 > その他 を選択して、 新規 ダイアログを表示させます。


図1.1.3-8


新規画面で Web サービス > Web サービス(JAX-WS/JAX-RPC) を選択し、 次へをクリックします。


図1.1.3-9


プロジェクト名 に「HelloService」を指定し、Webサービス仕様 は「 JAX-RPC」を選択し、次へをクリックします。


図1.1.3-10


Webサービス名 に「Hello」、Webサービスの属する名前空間URI に「 http://sample/Hello」を指定し、次へをクリックします。


図1.1.3-11


そのまま 次へ をクリックします。


図1.1.3-12


Webサービスにする既存のビジネスロジックで プロジェクト を選択し、「Javaアプリケーションを作成します」で作成した Hello プロジェクトを指定し、次へ をクリックします。


図1.1.3-13


プルダウンメニューからcom.nec.webotx.webservice.sample を選択し、上側のリストに表示された Hello クラスを選択し、をクリックします。下側のリストに com.nec.webotx.webservice.sample.Hello が入っていることを確認して、 次へをクリックします。


図1.1.3-14


プルダウンメニューからcom.nec.webotx.webservice.sample.Hello を選択し、上側のリストに表示された say_hello メソッドを選択し、 をクリックします。下側のリストに com.nec.webotx.webservice.sample.Hello
#say_hello(java.lang.String)
が入っていることを確認して、 次へをクリックします。


図1.1.3-15


そのまま、次へ をクリックします。


図1.1.3-16


完了 をクリックします。しばらくすると、パッケージエクスプローラに「HelloService」プロジェクトが表示されます。


図1.1.3-17


はい をクリックすると、Java EEパースペクティブが表示されます。


図1.1.3-18


ここまでで、JAX-RPC に準拠するWebサービスの作成が完了しました。
次は作成したWebサービスをアーカイブしてサーバに配備します。「WARファイルを作成します」を参照してください。

1.1.4. Webサービスのデプロイ

WARファイルを作成します
メニュー ファイル > エクスポート を選択し、エクスポートダイアログを表示します。


図1.1.4-1


Web > WAR ファイルを選択し、次へ をクリックします。


図1.1.4-2


Web モジュール に作成したWebサービスのプロジェクト「HelloService」または「RestSampleXML」または 「HelloService_wsdl」を指定し、宛先  にWARファイルの出力先(D:\tmp\Hello.war)を指定し、完了 をクリックします。
ソース・ファイルのエクスポート と 既存ファイルを上書き  はデフォルトでOFFとなっている場合、ONにする。
これで、WebサービスのWARファイルが作成されます。


図1.1.4-3


次に作成したアーカイブをサーバに配備します。
まず、テスト用サーバが起動しているか確認します。起動していない場合、起動してください。


図1.1.4-4


上のショートカットバーでパースペクティブを開くアイコンをクリックし、パースペクティブを開くダイアログを開きます。


図1.1.4-5


WebOTX運用管理ツールを選択し、OKをクリックします。


図1.1.4-6


接続ダイアログが出たら、ドメイン に「domain1」、ポート番号 に「6212」、ユーザ名 に「admin」、パスワード に「adminadmin」が設定されているのを確認して、 接続をクリックします。なお、このユーザ名とパスワードは初期値です。先に変更した場合は、それに合わせてください。


図1.1.4-7


ドメインのツリーが表示されたら、アプリケーションのところで 右クリックメニュー コンポーネントの配備 を選択。


図1.1.4-8


コンポーネント配備ダイアログが表示されるので、コンポーネントタイプ で「 Webコンポーネント」を選択し、ファイルに先に作っておいたWARファイルを指定し、 配備 をクリックします。


図1.1.4-9


確認ダイアログでは、はい を選択。


図1.1.4-10


配備が実行されるのでお待ち下さい。


図1.1.4-11


配備が正常終了したら、OK をクリックします。これで配備は完了です。


図1.1.4-12


Memo
ここで紹介している方法でテストするには、WebOTX Developerのインストール時に、テスト用サーバ がインストールされている必要があります。

次は、配備したWebサービスをテストするクライアントを作成します。
JAX-RPC準拠のWebサービスを作成した場合は、既にクライアントが作成されていますので、 「1.1.7. Webサービスの実行」を参照してください。
JAX-WS準拠のWebサービスを作成した場合は [1.1.6. Webサービスクライアントの作成 > 1.1.6.1. JAX-WS の場合] を参照してください。
JAX-RS準拠のWebサービスを作成した場合は [1.1.6. Webサービスクライアントの作成 > 1.1.6.3. JAX-RS の場合] を参照してください。

1.1.5. WSDLファイルの生成

「JAX-WSに準拠するWebサービスを新規作成する」で生成したWebサービスを元にWSDLファイルを生成します。
「HelloService」プロジェクトを選択して、右クリックメニュー Web サービス > WSDLファイル生成 を選択します。


図1.1.5-1


WSDLファイル(HelloService.wsdl)は生成されました。
生成したWSDLファイルの位置は下記の通りです。
「HelloService/WebContent/WEB-INF/wsdl」


図1.1.5-2


次は、生成されたWSDLファイルを使用しWebサービスクライアントを作成します。

1.1.6. Webサービスクライアントの作成

配備したWebサービスから JAX-WS に準拠した Web サービスのクライアントを作成します。
RESTful Webサービスは、ブラウザでアクセスできますので、この手順は必要ありません。
JAX-RPCに準拠したWebサービスのクライアントは、JAX-RPCに準拠したWebサービスを作成時に既に作成されていますので、この手順は必要ありません。

1.1.6.1. JAX-WS の場合

JAX-WS に準拠した Web サービスのクライアントを作成するためには、Web サービス参照 機能を利用します。 Web サービス参照機能は、既存のプロジェクトに対して設定するため、まずは Java プロジェクトを作成します。

メニュー ファイル > 新規 > プロジェクト を選択して、 新規プロジェクト ダイアログを開きます。


図1.1.6.1-1

Java プロジェクト を選択して、次へ をクリックします。


図1.1.6.1-2

プロジェクト名 に 「wsreference」 を入力して、完了 をクリックします。


図1.1.6.1-3

パースペクティブの変更を促すダイアログが表示される場合がありますが、いいえを選んでください。


図1.1.6.1-4

続いて main メソッドを持つクラスを作成します。プロジェクトの右クリックメニューから 新規 > クラス をクリックします。


図1.1.6.1-5

パッケージ に 「main」、名前 に 「Main」 を入力し、public static void main(String[] args) にチェックを入れます。


図1.1.6.1-6

プロジェクトの右クリックメニューから、Web サービス > Web サービス参照 をクリックします。


図1.1.6.1-7

Web サービスを新規に作成した場合は、WSDL の URL を指定して作成 に 「http://localhost/Hello/HelloService?wsdl」 を指定します。

Web サービスを WSDL から作成した場合には、WSDL の URL を指定して作成 に 「http://localhost/Hello/AddNumbersService?wsdl」 を指定します。

完了 をクリックします。


図1.1.6.1-8


次に呼び出しコードを生成します。

生成されたプロジェクト wsreferencesrc フォルダ配下にある main/Main.java ファイルを開きます。

Web サービスを新規に作成した場合、プロジェクト・エクスプローラーの Web サービス参照ノード 配下の say_hello ノードを展開します。 利用したい呼び出し方式のノードを、Main.java のエディタにドラッグ&ドロップします。


図1.1.6.1-9

呼び出しコードが生成されます。以下は同期呼び出しの呼び出しコードです。

package main;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
try { // web service reference for HelloService
	sample.hello.HelloService_Service service = new sample.hello.HelloService_Service();
	sample.hello.HelloService port = service.getHelloServicePort();
	// TODO initialize arguments
	java.lang.String arg0 = "";
	java.lang.String result = port.sayHello(arg0);
	// TODO process result
	System.out.println(result);
} catch (Exception e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
} // web service reference for HelloService

	}
}

引数を指定します。

package main;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
try { // web service reference for HelloService
	sample.hello.HelloService_Service service = new sample.hello.HelloService_Service();
	sample.hello.HelloService port = service.getHelloServicePort();
	// TODO initialize arguments
	java.lang.String arg0 = "Bob";
	java.lang.String result = port.sayHello(arg0);
	// TODO process result
	System.out.println(result);
} catch (Exception e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
} // web service reference for HelloService

	}
}

Web サービスを WSDL から作成した場合、プロジェクト・エクスプローラーの Web サービス参照ノード 配下の addNumbers ノードを展開します。 利用したい呼び出し方式のノードを、Main.java のエディタにドラッグ&ドロップします。


図1.1.6.1-10

呼び出しコードが生成されます。以下は同期呼び出しの呼び出しコードです。

package main;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
try { // web service reference for AddNumbersService
	org.duke.AddNumbersService service = new org.duke.AddNumbersService();
	org.duke.AddNumbersPortType port = service.getAddNumbersServicePort();
	// TODO initialize arguments
	int arg0 = 0;
	int arg1 = 0;
	int result = port.addNumbers(arg0, arg1);
	// TODO process result
	System.out.println(result);
} catch (Exception e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
} // web service reference for AddNumbersService

	}
}
以上でクライアントの生成は完了です。次は、作成したクライアントを使用してWebサービスを実行します。「 1.1.7. Webサービスの実行」を参照してください。

Memo
メニュー(Webサービス > WSDLファイル生成)からWSDLファイルを生成した場合、 作成したWebサービスをアーカイブしてサーバに配備する必要があります。 「WARファイルを作成します」を参照してください。

1.1.6.2. JAX-RPC の場合

JAX-RPCに準拠したWebサービスのクライアントは、JAX-RPCに準拠したWebサービスを作成時に既に作成されています。

1.1.6.3. JAX-RS の場合

JAX-RS のクライアントには、
  1. Javaアプリケーション (アプリケーション層での呼び出し)
  2. JavaScript(プレゼンテーション層での呼び出し)
  3. Webブラウザ
などがあります。WEBブラウザ を利用する場合、特にクライアントとしての実装は不要ですので、 残る2つの実装について説明します。
アプリケーション層での実装 (Javaアプリケーション)
プロジェクトおよび、main メソッドを持つクラス の作成までは、JAX-WS の場合と同様です。
以下に、main メソッドの実装例を記載します。 この例では、パッケージ名を main、クラス名は RestSampleClient として、 main メソッドを実装しています。

HttpURLConnection を利用してWebサービスに接続し、取得したレスポンスを表示するという処理内容です。
package main;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class RestSampleClient {

  /**
   * @param args
   */
  public static void main(String[] args) {
    // WebリソースのURI
    String requestUrl = "http://localhost/RestSampleXML/name_list/0001";
    HttpURLConnection httpConn = null;
    URL url = null;

    int responseCode = -1;
    String responseEntity = "";

    try {
      // 呼び出す対象のWebリソースのURIを設定する
      url = new URL(requestUrl);
      httpConn = (HttpURLConnection) url.openConnection();
      // HTTPメソッドを"GET"に設定する
      httpConn.setRequestMethod("GET");
      // 接続を開始する
      httpConn.connect();

      responseCode = httpConn.getResponseCode();
      System.out.println("the resource specified by requestUrl "
          + requestUrl + " returned response code: " + responseCode);

      BufferedReader br = new BufferedReader(new InputStreamReader(
          httpConn.getInputStream()));
      StringBuilder sBuilder = new StringBuilder();

      // Webサービスからのレスポンスの読み取り
      String tmpResponseStr = br.readLine();
      while (tmpResponseStr != null) {
        sBuilder.append(tmpResponseStr);
        tmpResponseStr = br.readLine();
      }
      // レスポンスの表示
      responseEntity = sBuilder.toString();
      System.out.println("the resource specified by requestUrl "
          + requestUrl + " returned response entity: "
          + responseEntity);
    } catch (MalformedURLException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}
プレゼンテーション層での実装(JavaScript)
JavaScript の関数 callRS() を、html ファイル内の、form 内のボタン押下時に呼び出す事で、 Webサービスとの通信を行う例です。
レスポンスの取得処理は、その中で設定したコールバック関数 processResponse() で行っています。 取得したレスポンスは、画面内の テキストエリア に表示しています。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>

<Script language="JavaScript">
<!--

var xmlHttpRequest = null;

function callRS()
{
  // リソースの URI の指定
  var url = "http://localhost/RestSampleXML/name_list/0001";
  
  if(window.XMLHttpRequest){
    xmlHttpRequest=new XMLHttpRequest();
  }else if(window.ActiveXObject){
         xmlHttpRequest = new ActiveXObject('Msxml2.XMLHTTP');
  }else {
    alert("未サポート");
  }
  
  // 接続開始
  xmlHttpRequest.open("GET",url,false);
  // レスポンスを処理するコールバック関数の指定
  xmlHttpRequest.onreadystatechange=processResponse;
  xmlHttpRequest.send(null);
}

// レスポンスを処理するコールバック関数定義
function processResponse() 
{
  if(xmlHttpRequest.readyState == 4) {
    if(xmlHttpRequest.status == 200 || xmlHttpRequest.status == 201) {
            // リクエストの処理 
            // レスポンスの文字列を textarea に表示する。
      window.document.testForm.responseString.value
              = xmlHttpRequest.responseText;
    }else{  
      // エラー処理
      alert("レスポンスエラー:"+ xmlHttpRequest.readyState + ", " + xmlHttpRequest.status);
       }    
    }
}
//-->
</Script>

</head>
<body>

  <form action="・・・" method="Get" name="testForm">
    <input type="button" value="test" onClick="callRS();"><br>
    
    <textarea name="responseString" rows="8" cols="40"></textarea>
  </form>
</body>
</html>
      

1.1.7. Webサービスの実行

1.1.7.1. JAX-WSに準拠するWebサービスのテスト

メニューから 実行 > 実行構成 をクリックします。


図1.1.7.1-1


左の表で Javaアプリケーション を選択し、左上にある 新規の起動構成 をクリックします。名前 に「Main」を、 プロジェクト に「wsreference」 を、 メイン・クラスに「main.Main」を指定し、実行 をクリックします。 コンソールビューに、「Hello Bob !」 または 「1」と表示されれば、Webサービスのテストは完了です。


図1.1.7.1-2

1.1.7.2. RESTful Webサービスのテスト

ブラウザを用いる場合
Developer's Studio 外の一般のWebブラウザから、以下のURLへアクセスすることで、配備したRESTful Webサービスをテストする事ができます。
http://localhost/{アプリケーション名}/name_list/{id}
XMLで通信するWebサービスのテスト
http://localhost/Hello/name_list/0001にアクセスすると、 id0001のコンシューマの氏名が表示されます。


図1.1.7.2-1

http://localhost/Hello/name_list/0002にアクセスすると、 id0002のコンシューマの氏名が表示されます。


図1.1.7.2-2

JSONで通信するWebサービスのテスト
http://localhost/Hello/name_list/0001にアクセスすると、以下の警告イメージが表示されます。


図1.1.7.2-3

ファイルを開くを選択し、メモ帳を選択すると、id0001のコンシューマの氏名が表示されます。
{"姓":"田中","名":"太郎"}
http://localhost/Hello/name_list/0002にアクセスすると、以下の警告イメージが表示されます。


図1.1.7.2-4

ファイルを開くを選択し、メモ帳を選択すると、id0002のコンシューマの氏名が表示されます。
{"姓":"鈴木","名":"一郎"}
Javaアプリケーションクライアントの場合
[1.1.7.1. JAX-WSに準拠するWebサービスのテスト]と同様です。
JavaScriptの場合
[プレゼンテーション層での実装(JavaScript)]で作成したhtmlファイルを含む Webアプリケーションをデプロイし、 クライアントから ブラウザで html ファイルを開き、test ボタンを押すと、レスポンスがテキスト領域に表示されます。


図1.1.7.2-5


1.1.7.3. (ご参考)JAX-RPC準拠のWebサービスのテスト

メニュー実行 > 実行ダイアログを開く を選択。


図1.1.7.3-1

左の表でJavaアプリケーションを選択し、左上にある 新規の起動構成をクリックします。名前 に「Hello Service」を、プロジェクト に「HelloService」を、メインクラスに「 webotx.ws.ds.Hello.Main」を指定し、実行をクリックします。
コンソールビューに、「Hello  !」と表示されれば、Webサービスのテストは完了です。


図1.1.7.3-2