JAX-WS (Java API for XML Web Services)

JAX-WS (Java API for XML Web Services)はJava EEのAPIであり、Webサービスを作成することができる。JAX-WSは標準的なJavaとWSDLのマッピングを定義している。

JAX-WSのアノテーション

JAX-WSには次のアノテーションがある。

JAX-WSのアノテーション
Annotaion type Description
@javax.jws.WebService Webサービスを実装するクラスを指定する。
@javax.jws.WebMethod Webサービスオペレーションを実装するメソッドを指定する。
@javax.jws.OneWay 操作が呼び出し側アプリケーションに値を戻さないことを指定する。
@javax.jws.WebParam Webサービス操作の入力パラメータと生成されたWSDLファイルの要素のマッピング及びパラメータの動作を指定する。
@javax.jws.WebResult Webサービス操作の戻り値と生成されたWSDLファイルの対応する要素のマッピングを指定する。
@javax.jws.HandlerChain 外部ハンドラチェーンを指定する。
@javax.jws.soap.SOAPBinding WebサービスのSOAPバインディングを指定する。

JAX-WSアノテーションの使用例を次に示す。

package service;

import javax.jws.WebService;

@WebService(targetNameSpace = "http://www.exsample.com/foo",
          endpointInterface = "service.fooPortType",
          portName = "fooPort")
public class fooPortTypeImpl implements fooPortType {
  public int foo(int n) {
    return n * 2;
  }
}
javax.jws.WebServiceアノテーションの属性
Attribute Description
endpointInterface サービスエンドポイントインタフェースの完全修飾名
name Webサービスの名前
portName Webサービスのポート名
serviceName Webサービスのサービス名
targetNamespace このWebサービスから生成されたWSDLとXML要素で使用するXML名前空間。デフォルト値はJAX-RPC仕様で定義されている値。
wsdlLocation あらかじめ定義されているWSDLファイルの相対又は絶対URL

javax.xml.wsパッケージ

javax.xml.wsはJAX-WSコアAPIを提供するパッケージである。

javax.xml.wsパッケージのクラス
Class Description
Endpoint Webサービス端点
Sevice Webサービスのクライアントビュー
WebServiceFeature Webサービスに対して有効又は無効にすることのできる機能
javax.xml.wsパッケージの注釈型
Annotaion type Description
WebEndPoint 生成されたサービスインタフェースのgetPortName()メソッド
WebServiceClient 生成されたサービスインスタンス
WebServiceProvider プロバイダ実装クラス
javax.xml.ws.WebServiceClientアノテーションの属性
Attribute Description
name Webサービスのローカル名
targetNamespace Webサービスの名前空間
wsdlLocation サービスのWSDLの位置(URL)

javax.xml.ws.Endpoint

EndpointはWebサービス端点を表すクラスである。端点はEndpointクラスのstaticメソッドを使用して作成する。端点は常にひとつのBindingとひとつのimplementorに結合され、端点の作成時にこの両方が設定される。

Endpointクラスのメソッド
Method Description
create 端点を作成する。
publish この端点を発行する。

wsimport

wsimportはJDKに含まれるツールであり、JAX-WSアプリケーションを開発するために必要な成果物を生成することができる。

wsimport [option ...] wsdl

wsdlにはWSDLのURIを指定する。

wsimportのオプション
Option Description
-d directory 出力ファイルを格納する場所を指定する。
-b path 外部のJAX-WS又はJAXBバインディングファイルを指定する。
-B jaxbOption 指定したオプションをJAXBスキーマコンパイラに渡す。
-catalog 外部エンティティ参照を解決するためのカタログファイルを指定する。
-extension JAX-WS仕様で規定されていないベンダ拡張機能を許可する。
-help ヘルプを表示する。
-httpproxy:host:port HTTPプロキシサーバを指定する。
-keep 生成されたファイルを保持する。
-p package ターゲットのパッケージ名を指定する。
WSDL、スキーマバインディングのカスタマイズ及びJAX-WS仕様で定義されたデフォルトのパッケージ名よりも優先される。
-s directory 生成されるソースファイルを格納する場所を指定する。
-target version 指定したJAX-WS仕様のバージョンに従ってコードを生成する。
-verbose コンパイラが実行している処理に関するメッセージを出力する。
-version バージョン情報を出力する。
-quiet wsimport出力を抑制する。
-wsdlLocation location @WebServiceClient.wsdlLocation値を指定する。

wsimportコマンドで生成したスタブはクライアントから使用できる。クライアントプログラムの例を次に示す。

import com.fc2web.itref.service.SayHelloService;
import com.fc2web.itref.service.SayHelloServicePortType;
import com.fc2web.itref.service.SayHelloServiceOperationRequest;
import com.fc2web.itref.service.SayHelloServiceOperationResponse;

public class SayHelloClient {
  public static void main(String[] args) {
    SayHelloService service = new SayHelloService();
    SayHelloServicePortType port = service.getSayHelloServicePort();

    SayHelloServiceOperationRequest request = new SayHelloServiceOperationRequest();
    request.setIn("Marina");

    SayHelloServiceOperationResponse response = port.sayHelloServiceOperation(request);

    System.out.println(response.getOut());
  }
}