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

1. チュートリアル

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

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

ここでは、Webサービスの作成方法として以下の4通りの方法を説明します。
JAX-WS 4.0に準拠 JAX-RS 3.1に準拠

1.1. SOAP Webサービスの作成

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

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

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

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

メニュー 新規 その他


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

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


プロジェクト名に「HelloService」を指定し、 新規に作成 を選択し、次へをクリックします。

新規 Webサービス仕様


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

新規 Webサービス名


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

新規 実装形式選択


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

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


生成されたプロジェクト「HelloService」の「src/main/java」フォルダ配下にある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 jakarta.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ファイルを作成します」を参照してください。
Webサービスをサーバに配備せず、クライアントを作成する場合は、「WSDLファイルの生成」を参照してください。

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

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

新規 その他


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

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


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

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


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

新規 実装形式


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

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


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

import jakarta.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サービスの作成方法について説明します。
(サンプルプロジェクト RestSampleXML.zip)
1.2.1.1. RESTful Webサービスプロジェクトの作成
メニューファイル新規プロジェクトで、Web動的Webプロジェクトを選択して、次へをクリックし、以下のように指定します。

新規 動的Webプロジェクト

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

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

次へで画面を進め、web.xml デプロイメント記述子を生成ON にして、次へをクリックします。

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

以下のように指定して、終了をクリックします。

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

項目
JAX-RS 実装ライブラリー ライブラリー構成を無効にする
Update Deployment Descriptor ON
JAX-RS サーブレット・クラス名 org.glassfish.jersey.servlet.ServletContainer
URL マッピング・パターン /*

プロジェクト名/src/main/webapp/WEB-INF/web.xml を開くと、以下のようになっています。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://jakarta.ee/xml/ns/jakartaee" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd" id="WebApp_ID" version="6.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>
    <description>JAX-RS Tools Generated - Do not modify</description>
    <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>

Caution
V12.1のDeveloperでは、「動的Webモジュールバージョン」に6.0を指定した場合、「JAX-RS Capabilities」画面で「Update Deployment Descriptor」チェックボックスが表示されません。
詳細については、[注意制限事項 > 「JAX-RS Capabilities」画面で「Update Deployment Descriptor」チェックボックスが表示されない]を参照してください。

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の生成 を選択し、すべて選択をクリックして、生成 をクリックすると、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 jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;
import jakarta.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), "UTF-8"));
            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();
    }
}

Caution
V11.1では、Utilクラスで取得データとなる customerlist.txt がSJISで作成されていたため、new InputStreamReader()の引数の文字コードを"SJIS"としていましたが、V11.2以降では customerlist.txt がWebOTX Developer上でUTF-8で作成されるようになったため、"UTF-8"としないと実行時にcustomerlist.txtから取得した日本語が文字化けします。

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 jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.PathParam;
import jakarta.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 jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.PathParam;
import jakarta.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;
    }
}
1.2.1.5. web.xml にリソースクラスを指定
web.xmlに以下のコードを追加します。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://jakarta.ee/xml/ns/jakartaee" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd" id="WebApp_ID" version="6.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>
    <description>JAX-RS Tools Generated - Do not modify</description>
    <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>
ここまでで、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 jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.PathParam;
import jakarta.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.3. Webサービスのデプロイ

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

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


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

WARファイル選択


Web モジュール に作成したWebサービスのプロジェクト「HelloService」または「RestSampleXML」または 「HelloService_wsdl」を指定し、宛先  にWARファイルの出力先を指定し、終了 をクリックします。
※WARファイル名は「{プロジェクト名}.war」としてください。

Export source files Overwrite existing file がデフォルトでOFFとなっている場合、ONにする。
これで、WebサービスのWARファイルが作成されます。

WAR エクスポート


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

WebOTX サービス起動


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

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


WebOTX 統合運用管理ツールを選択し、開くをクリックします。

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


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

WebOTX運用管理ツール 接続


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

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


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

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


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

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


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

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


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

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


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

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

1.4. WSDLファイルの生成

Webサービスを配備せずにクライアントを作成する場合はWSDLファイルを生成する必要があります。
「JAX-WSに準拠するWebサービスを新規作成する」で生成したWebサービスを元にWSDLファイルを生成します。
※Webサービスを配備してからクライアントを生成する場合はこの手順は不要です。

「HelloService」プロジェクトを選択して、右クリックメニュー Web サービス > WSDLファイル生成 を選択します。

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


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

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


WSDLファイルをエディタで開くと、soap:address要素のlocation属性がREPLACE_WITH_ACTUAL_URLになっているので「http://localhost/HelloService/HelloService」に修正します。
<soap:address location="http://localhost/HelloService/HelloService"/>
次は、生成されたWSDLファイルを使用しWebサービスクライアントを作成します。

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

配備したWebサービスから JAX-WS に準拠した Web サービスのクライアントを作成します。
RESTful 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/HelloService/HelloService?wsdl」 を指定してから 終了 をクリックします。

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

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

Web サービスを新規に作成した場合(サーバに配備していない)は、ワークスペース内のWSDLから作成 に 「WSDLファイルの生成」で作成したWSDLファイルを指定してから終了 をクリックします。

Webサービス参照 ワークスペース内のWSDLから作成


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

生成されたプロジェクト wsreferencesrc/main/java フォルダ配下にある 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.getAddNumbersPortTypeImplPort();
	// 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
WSDLファイルの生成」でWSDLファイルを生成した場合、 作成したWebサービスをアーカイブしてサーバに配備する必要があります。 「WARファイルを作成します」を参照してください。

1.5.2. JAX-RS の場合

JAX-RS のクライアントには、
  1. Javaアプリケーション (JAX-RSクライアントAPIでの呼び出し)
  2. JavaScript(プレゼンテーション層での呼び出し)
  3. Webブラウザ
などがあります。WEBブラウザ を利用する場合、特にクライアントとしての実装は不要ですので、 残る2つの実装について説明します。
1.5.2.1. JAX-RSクライアントAPIでの実装 (Javaアプリケーション)
JAX-RSには、RESTful Webサービスとの通信のための流暢なJavaベースのAPIであるJAX-RSクライアントAPIが導入されています。
詳細は「JAX-RSクライアントAPIのサポート」を参照してください。
プロジェクトおよび、main メソッドを持つクラス の作成(Webサービス参照の前)までは、JAX-WS の場合と同様です。
以下に、main メソッドの実装例を記載します。 この例では、パッケージ名を main、クラス名は RestSampleClient として、 main メソッドを実装しています。

JAX-RSクライアントAPI を利用してWebサービスに接続し、取得したレスポンスを表示するという処理内容です。
ビルド、実行するにはサーバー・ランタイムをクラスパスに追加する必要があります。追加方法は「プロジェクトの参照エラー(サーバー・ランタイム)」を参照してください。
package main;

import jakarta.ws.rs.client.Client;
import jakarta.ws.rs.client.ClientBuilder;
import jakarta.ws.rs.client.Invocation;
import jakarta.ws.rs.client.WebTarget;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;

public class RestSampleClient {

  public static void main(String[] args) {
    // WebリソースのURI
    String requestUrl = "http://localhost/RestSampleXML/name_list/0001";

    // クライアントオブジェクトnの作成
    Client client = ClientBuilder.newClient();

    // Webリソースを特定
    WebTarget target = client.target(requestUrl);

    // HTTPリクエストを作成
    Invocation.Builder invocationBuilder = target.request(MediaType.APPLICATION_XML);
    
    // HTTPレスポンスオブジェクトを取得
    Response response = invocationBuilder.get();

    // レスポンスの表示
    System.out.println(response.readEntity(String.class));

    // レスポンスオブジェクトの終了
    response.close();
  }

}
1.5.2.2. プレゼンテーション層での実装(JavaScript)
JavaScript の関数 callRS() を、html ファイル内の、form 内のボタン押下時に呼び出す事で、 Webサービスとの通信を行う例です。
リソースの URIは環境に合わせてIPアドレスを追記等、適宜修正してください。
レスポンスの取得処理は、その中で設定したコールバック関数 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サービスをテストする事ができます。URLは環境に合わせてIPアドレスを追記等、適宜修正してください。
http://localhost/{アプリケーション名}/name_list/{id}
XMLで通信するWebサービスのテスト
http://localhost/RestSampleXML/name_list/0001にアクセスすると、 id0001のコンシューマの氏名が表示されます。

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

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

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

JSONで通信するWebサービスのテスト
http://localhost/RestSampleXML/name_list/0001にアクセスすると、 id0001のコンシューマの氏名が表示されます。
{"firstname":"太郎","lastname":"田中"}
http://localhost/RestSampleXML/name_list/0002にアクセスすると、 id0002のコンシューマの氏名が表示されます。
{"firstname":"一郎","lastname":"鈴木"}

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

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