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

JAX-WSの注釈型
Annotaion typeDescription
javax.jws.WebServiceWebサービスを実装するクラスを指定する。
javax.jws.WebMethodWebサービスオペレーションを実装するメソッドを指定する。
javax.jws.OneWay操作が呼び出し側アプリケーションに値を戻さないことを指定する。
javax.jws.WebParamWebサービス操作の入力パラメータと生成されたWSDLファイルの要素のマッピング及びパラメータの動作を指定する。
javax.jws.WebResultWebサービス操作の戻り値と生成されたWSDLファイルの対応する要素のマッピングを指定する。
javax.jws.HandlerChain外部ハンドラチェーンを指定する。
javax.jws.soap.SOAPBindingWebサービスの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アノテーションの属性
AttributeDescription
endpointInterfaceサービスエンドポイントインタフェースの完全修飾名
nameWebサービスの名前
portNameWebサービスのポート名
serviceNameWebサービスのサービス名
targetNamespaceこのWebサービスから生成されたWSDLとXML要素で使用するXML名前空間。デフォルト値はJAX-RPC仕様で定義されている値。
wsdlLocationあらかじめ定義されているWSDLファイルの相対又は絶対URL

javax.xml.wsパッケージ

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

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

javax.xml.ws.Endpoint

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

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

wsimport

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

wsimport [option ...] wsdl

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

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