Cosminexus V9 アプリケーションサーバ Webサービス開発ガイド
J2EEサーバ上で動作するWebサービスクライアントの,次に示すフィールドおよびメソッドにjavax.xml.ws.WebServiceRefアノテーションを指定すると,J2EEサーバが,Webサービスクライアントのインスタンス生成時にサービスクラスおよびポートの生成とインジェクションを行います。javax.xml.ws.WebServiceRefアノテーションについては,「19.3 アノテーションのサポート範囲」を参照してください。
javax.xml.ws.WebServiceRefアノテーションによるインジェクションの利用には,次のような利点があります。
Webサービスクライアントのインスタンスの生成については,「10.21.1(2) Webサービスクライアントのインスタンス生成」を参照してください。
javax.xml.ws.WebServiceRefアノテーションの指定例を次に示します。
...
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.ws.WebServiceRef;
import com.sample.AddNumbersImpl;
import com.sample.AddNumbersImplService;
public class TestClient extends HttpServlet {
// サービスクラスの例
// サービスクラス型のフィールドにサービスクラスのインスタンスをインジェクトする
@WebServiceRef
private AddNumbersImplService service;
// ポートの例
// ポート型のフィールドにポートのインスタンスをインジェクトする
@WebServiceRef(AddNumbersImplService.class)
private AddNumbersImpl port;
@Override
public void init() {
// Webサービスクライアントの実行前にアプリケーションサーバがサービスクラスと
// ポートをインジェクトするので,以下の処理は行う必要がない
//service = new AddNumbersImplService();
//port = service.getAddNumbersImplPort();
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException {
...
|
...
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.ws.WebServiceRef;
import com.sample.AddNumbersImpl;
import com.sample.AddNumbersImplService;
public class TestClient extends HttpServlet {
private AddNumbersImplService service;
private AddNumbersImpl port;
@Override
public void init() {
// アプリケーション開始時にアプリケーションサーバがsetterメソッドを使用して
// サービスクラスとポートをインジェクトするので,以下の処理は行う必要がない
//service = new AddNumbersImplService();
//port = service.getAddNumbersImplPort();
}
// サービスクラスの例
@WebServiceRef
public void setAddNumbersImplService(AddNumbersImplService service) {
// 引数serviceにサービスクラスのインスタンスをインジェクトする
this.service = service;
}
// ポートの例
@WebServiceRef(AddNumbersImplService.class)
public void setAddNumbersImpl(AddNumbersImpl port) {
// 引数portにポートのインスタンスをインジェクトする
this.port = port;
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException {
...
|
J2EEアプリケーションの開始時にWebサービスクライアントのインスタンスを生成するには,次のように設定します。
javax.xml.ws.WebServiceRefアノテーションを指定してインジェクトしたサービスクラスまたはポートでハンドラフレームワークを使用する場合,APIを使用してハンドラチェインを設定します。ハンドラチェインの設定については,「36.9.2 Web サービスクライアント側のハンドラチェインの設定」を参照してください。なお,ハンドラチェインの設定は,ポートに対して一度だけ実行すればいいので,Webサービスクライアントの初期化処理での実行をお勧めします。Webサービスを呼び出すごとに設定する必要はありません。初期化処理を実行するメソッドを次に示します。
ポート型のフィールドや,フィールドに対応するsetterメソッドに,javax.xml.ws.WebServiceRefアノテーションとフィーチャに対応するアノテーションを同時に指定すると,インジェクションを行うポートのフィーチャを有効化できます。ただし,フィーチャに対応するアノテーションを指定したフィールドまたはフィールドに対応するsetterメソッドに,javax.xml.ws.WebServiceRefアノテーションを指定しない場合は,フィーチャは有効になりません。また,サービスクラス型のフィールドやフィールドに対応するsetterメソッドに対しては,フィーチャに対応するアノテーションを指定できません。
フィーチャを有効化するときに,ポートに指定できるアノテーションを次に示します。各アノテーションについては,「16.2 JavaからWSDLへのマッピングのカスタマイズ」を参照してください。
インジェクションを行うポートでMTOM/XOP仕様形式の添付ファイルを利用できるように,フィーチャを有効化する場合の指定例を次に示します。
...
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.ws.WebServiceRef;
import com.sample.AddNumbersImpl;
import com.sample.AddNumbersImplService;
public class TestClient extends HttpServlet {
// インジェクションを行うポートでMTOM/XOP仕様形式の添付ファイルを有効化
@MTOM
@WebServiceRef(AddNumberImplService.class)
private AddNumbersImpl port;
@Override
public void init() {
...
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException {
...
|
...
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.ws.WebServiceRef;
import com.sample.AddNumbersImpl;
import com.sample.AddNumbersImplService;
public class TestClient extends HttpServlet {
private AddNumbersImpl port;
@Override
public void init() {
...
}
// インジェクションを行うポートでMTOM/XOP仕様形式の添付ファイルを有効化
@MTOM
@WebServiceRef(AddNumberImplService.class)
public void setAddNumbersImpl(AddNumbersImpl port) {
this.port = port;
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException {
...
|
インジェクションを行うポートの要求コンテキストのプロパティを変更する際は,Webサービスクライアントの初期化処理での実行をお勧めします。初期化処理を実行するメソッドを次に示します。
サーブレットとして実装したWebサービスクライアントの,ポートの要求コンテキストのプロパティを変更する例を次に示します。
...
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.WebServiceRef;
import com.sample.AddNumbersImpl;
import com.sample.AddNumbersImplService;
public class TestClient extends HttpServlet {
@WebServiceRef(AddNumbersImplService.class)
AddNumbersImpl port;
@Override
public void init() {
// 初期化処理で,要求コンテキストを設定する
Map<String, Object> context = ((BindingProvider)port).getRequestContext();
context.put("com.cosminexus.jaxws.connect.timeout", 60000);
}
...
}
|
All Rights Reserved. Copyright (C) 2012, 2015, Hitachi, Ltd.