JAX-WS (Java API for XML Web Services)はJava EEのAPIであり、Webサービスを作成することができる。JAX-WSは標準的なJavaとWSDLのマッピングを定義している。
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;
}
}
| Attribute | Description |
|---|---|
| endpointInterface | サービスエンドポイントインタフェースの完全修飾名 |
| name | Webサービスの名前 |
| portName | Webサービスのポート名 |
| serviceName | Webサービスのサービス名 |
| targetNamespace | このWebサービスから生成されたWSDLとXML要素で使用するXML名前空間。デフォルト値はJAX-RPC仕様で定義されている値。 |
| wsdlLocation | あらかじめ定義されているWSDLファイルの相対又は絶対URL |
javax.xml.wsはJAX-WSコアAPIを提供するパッケージである。
| Class | Description |
|---|---|
| Endpoint | Webサービス端点 |
| Sevice | Webサービスのクライアントビュー |
| WebServiceFeature | Webサービスに対して有効又は無効にすることのできる機能 |
| Annotaion type | Description |
|---|---|
| WebEndPoint | 生成されたサービスインタフェースのgetPortName()メソッド |
| WebServiceClient | 生成されたサービスインスタンス |
| WebServiceProvider | プロバイダ実装クラス |
| Attribute | Description |
|---|---|
| name | Webサービスのローカル名 |
| targetNamespace | Webサービスの名前空間 |
| wsdlLocation | サービスのWSDLの位置(URL) |
EndpointはWebサービス端点を表すクラスである。端点はEndpointクラスのstaticメソッドを使用して作成する。端点は常にひとつのBindingとひとつのimplementorに結合され、端点の作成時にこの両方が設定される。
| Method | Description |
|---|---|
| create | 端点を作成する。 |
| publish | この端点を発行する。 |
wsimportはJDKに含まれるツールであり、JAX-WSアプリケーションを開発するために必要な成果物を生成することができる。
wsimport [option ...] wsdl
wsdlにはWSDLのURIを指定する。
| 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());
}
}