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

1. チュートリアル

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

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

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

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


1.1. SOAP Webサービスの作成

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

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

ショートカットバー Java EEパースペクティブ

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

メニュー 新規 その他


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

新規 Webサービス(JAX-WS/JAX-RPC) 選択


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

新規 Webサービス仕様


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

新規 Webサービス名


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

新規 実装形式選択


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

新規 Webサービスの作成開始


生成されたプロジェクト「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ファイルを入手しクライアントを生成することも可能です。詳細は「WSDLファイルの生成」を参照してください。


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

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

新規 その他


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

新規 Web サービス(JAX-WS/JAX-RPC) 選択


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

新規 Webサービス仕様 WSDLから作成


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

新規 実装形式


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

新規 Webサービスの作成開始


生成されたプロジェクト「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.2. RESTful Webサービスの作成

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

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

新規 動的Webプロジェクト

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

プロジェクト・ファセット JAX-RS(REST Web Service) 選択

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

JAX-RS Implementation Library ライブラリー構成を無効 選択

項目
JAX-RS Implementation Library ライブラリー構成を無効
JAX-RS servlet class name org.glassfish.jersey.servlet.ServletContainer
URL マッピング・パターン /*
1.2.1.2. 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属性の値を"氏名"に設定します。

Customerクラス 注釈プロパティビュー アノテーション追加

同様な方法で、属性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;
    }
}
1.2.1.3. ユーティリティークラスとデーターファイルの作成
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というファイルを作成します。

新規ファイル

作成されたcustomerlist.txtファイルをエディタで開いて、以下の内容を追加し、保存します。
0001,田中,太郎
0002,鈴木,一郎
1.2.1.4. ルートリソースクラスの作成
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"に設定します。

CustomerResourceクラス 注釈プロパティービュー アノテーション追加

同様な方法で、メソッド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.2.2. JSONで通信するRESTful Webサービスの作成

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

上記の[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.2.3. JAX-RS 2.0 準拠の RESTful Webサービスの作成

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

新規 動的Webプロジェクト

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

プロジェクト・ファセット JAX-RS(REST Web Service) 選択

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

JAX-RS 実装ライブラリー Disable Library Configuration 選択

項目
JAX-RS 実装ライブラリー Disable Library Configuration
JAX-RS サーブレット・クラス名 org.glassfish.jersey.servlet.ServletContainer
URL マッピング・パターン /*
次へで画面を進め、web.xml デプロイメント記述子を生成ON にして、終了をクリックします。

Webモジュール デプロイメント記述子を生成 ON

web.xml を開き、以下のように JAX−RSサーブレットの情報を追加します。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>RestSampleXML</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>JAX-RS Servlet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>JAX-RS Servlet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app>
1.2.3.2. XML Beanクラスの作成
[XMLで通信するRESTful Webサービスの作成] の [XML Beanクラスの作成] と同じ手順で Customer.java クラスを作成します。
1.2.3.3. ユーティリティークラスとデーターファイルの作成
[XMLで通信するRESTful Webサービスの作成] の [ユーティリティークラスとデーターファイルの作成] と同じ手順で Util.java クラス と customerlist.txt を作成します。
1.2.3.4. ルートリソースクラスの作成
[XMLで通信するRESTful Webサービスの作成] の [ルートリソースクラスの作成] と同じ手順で CustomerResource.java クラスを作成します。
1.2.3.5. web.xml にリソースクラスを指定
web.xmlに以下のコードを追加します。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>RestSampleXML</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>JAX-RS Servlet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>jersey.config.server.provider.classnames</param-name>
      <param-value>sample.CustomerResource</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>JAX-RS Servlet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app>

Memo
JAX-RS 2.0のリソースの登録は変わっていますので、Applicationを作成してリソースを登録するか、またはweb.xmlに明示的にリソースを指定するのが必要となります。

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

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

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

WARファイル作成 エクスポート


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

WARファイル選択


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

WAR エクスポート


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

WebOTX サービス起動


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

ショートカットバー パースペクティブを開くアイコン


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

パースペクティブを開く WebOTX運用管理ツール


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

WebOTX運用管理ツール 接続


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

アプリケーション コンポーネントの配備


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

コンポーネントの配備 Webコンポーネント 選択


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

コンポーネントの配備 確認ダイアログ


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

コンポーネントの配備 コンポーネントの配備中


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

コンポーネントの配備 正常終了


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

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

1.4. WSDLファイルの生成

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

Web サービス WSDLファイル生成


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

プロジェクトエクスプローラー WSDLファイルの位置


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

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

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

1.5.1. JAX-WS の場合

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

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

新規 プロジェクト

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

新規プロジェクト Javaプロジェクト 選択

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

新規プロジェクト プロジェクト名

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

新規プロジェクト パースペクティブの変更 いいえを選択

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

新規 クラス

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

新規Javaクラス パッケージ 名前 入力

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

Webサービス Webサービス参照

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

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

完了 をクリックします。

Webサービス参照 WSDLのURLを指定


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

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

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

プロジェクトエクスプローラー 呼び出し方式 呼び出しコード生成
図1.1.5.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 のエディタにドラッグ&ドロップします。

プロジェクトエクスプローラー 呼び出し方式 呼び出しコード生成

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

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サービスを実行します。「 Webサービスの実行」を参照してください。

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

1.5.2. JAX-RS の場合

JAX-RS のクライアントには、
  1. Javaアプリケーション (アプリケーション層での呼び出し)
  2. JavaScript(プレゼンテーション層での呼び出し)
  3. Webブラウザ
などがあります。WEBブラウザ を利用する場合、特にクライアントとしての実装は不要ですので、 残る2つの実装について説明します。
1.5.2.1. アプリケーション層での実装 (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();
    }
  }
}
1.5.2.2. プレゼンテーション層での実装(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.6. Webサービスの実行

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

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

実行 実行構成


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

実行構成 新規の起動構成

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

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

idが0001のブラウザ表示結果

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

idが0002のブラウザ表示結果

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

idが0001の警告イメージ

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

idが0002の警告イメージ

ファイルを開くを選択し、メモ帳を選択すると、id0002のコンシューマの氏名が表示されます。
{"姓":"鈴木","名":"一郎"}

JAX-RS 2.0 準拠のWebサービスのテスト

Memo
WebOTXサーバにデフォルトでJAX-RS 2.0のコンポーネントをインストールしていません。JAX-RS 2.0 準拠のWebサービスをテストする前に、以下 install-optional-component コマンドでJAX-RS 2.0 に切り替える必要があります。

運用管理コマンド(otxadmin)を起動し、WebOTXの管理ドメンにloginして、配備対象ドメンが停止している状態で以下のコマンドを実行します。実行後、配備対象ドメンを起動します。
otxadmin>install-optional-component --domain {domain名} --apgroup {アプリケーショングループ名} --pgroup {プロセスグループ名} jaxrs20
http://localhost/Hello/name_list/0001にアクセスすると、 id0001のコンシューマの氏名が表示されます。

idが0001のブラウザ表示結果

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

idが0002のブラウザ表示結果

1.6.2.2. Javaアプリケーションクライアントの場合
[JAX-WSに準拠するWebサービスのテスト]と同様です。
1.6.2.3. JavaScriptの場合
[プレゼンテーション層での実装(JavaScript)]で作成したhtmlファイルを含む Webアプリケーションをデプロイし、 クライアントから ブラウザで html ファイルを開き、test ボタンを押すと、レスポンスがテキスト領域に表示されます。

レスポンス ブラウザ表示結果