JAX-WS アプリケーション用 Java 成果物の生成

Java™ API for XML-Based Web Services (JAX-WS) ツールを使用して、JavaBeans コンポーネントまたはエンタープライズ Bean コンポーネントから JAX-WS Web サービス・アプリケーションを開始する場合に必要となる JAX-WS および Java Architecture for XML Binding (JAXB) の Java 成果物を生成します。

始める前に

Java API for XML-Based Web Services (JAX-WS) Web サービス・アプリケーションを作成するには、初めにサービス・エンドポイント・インターフェース (SEI) を明示的または暗黙的に記述する SEI 実装を作成する必要があります。

このタスクについて

ボトムアップ・アプローチを使用して JAX-WS Web サービスを作成する場合は、既存のサービス・エンドポイント実装で wsgen コマンド行ツールを使用します。wsgen ツールは、コンパイル済みの サービス・エンドポイント実装クラスを入力データとして処理し、 以下の移植可能な成果物を生成します。
  • メッセージの内容をマーシャルおよびアンマーシャルするのに必要な Java Architecture for XML Binding (JAXB) クラス。
  • オプションの -wsdl 引数が指定されている場合の Web サービス記述言語 (WSDL) ファイル。
サポートされる構成 サポートされる構成: wsimportwsgenschemagen、および xjc コマンド行ツールは、z/OS® プラットフォームではサポートされていません。この機能は、z/OS プラットフォームで稼働する WebSphere® Application Server で提供されるアセンブリー・ツールによって提供されます。 これらのツールについての詳細は、JAX-WS アプリケーションのこれらのコマンド行ツールに関する説明を参照してください。sptcfg
ベスト・プラクティス ベスト・プラクティス: WebSphere Application Server は、Java API for XML-Based Web Services (JAX-WS) および Java Architecture for XML Binding (JAXB) のツールを提供します。wsimportwsgenschemagen、および xjc コマンド行ツールは、WebSphere Application Server traditionalapp_server_root¥bin¥ ディレクトリーにあります。xjc コマンドおよび schemagen コマンド は、Liberty プロファイルの app_server_root¥jaxb¥bin¥ ディレクトリーにあります。 WebSphere Application Server および JDK が提供するツールによって生成される成果物は両方とも、同じレベルの仕様をサポートすることがあります。 一般的に、JDK ツールにより生成される成果物は、 その他の対応しているランタイム環境間で移植可能です。ただし、 WebSphere Application Server 環境内で シームレスな統合を実現して、WebSphere Application Server のみで サポートされる機能を利用するには、この製品で提供されるツールを使用するのがベスト・プラクティスです。JAX-WS および JAXB V2.2 ツールを 利用するには、アプリケーション・サーバーで提供され、 app_server_root¥bin¥ ディレクトリーにある ツールを使用します。bprac

JavaBeans で 開始するボトムアップ・アプローチを使用して JAX-WS Web サービスを作成する際には、 WSDL ファイルを作成する必要はありません。 アノテーションの使用により、 サービス・エンドポイントまたはクライアントの構成に必要な WSDL 情報のすべてが提供されます。 アプリケーション・サーバーは WSDL 1.1 文書をサポートします。 この文書は、Web Services-Interoperability (WS-I) Basic Profile 1.1 仕様に準拠し、Document/Literal スタイル文書または RPC/Literal スタイル文書のいずれかです。 さらに、LITERAL という値の USE 属性を宣言する バインディング付き WSDL 文書は、サポートされますが、値 ENCODED ではサポートされません。 Document/Literal ラップ・パターンを実装する WSDL 文書の場合、 ルート・エレメントは XML スキーマ内に宣言され、メッセージ・フローのオペレーション・ラッパーとして使用されます。 要求と応答の両方に、別個のラッパー・エレメント定義が存在します。

wsgen コマンドでサービス・エンドポイント実装 Bean の継承メソッドを 見逃さないようにするため、@WebService アノテーションを希望のスーパークラスに追加するか、 または実装クラス内の継承メソッドをスーパークラス・メソッドへの呼び出しで オーバーライドすることができます。

JAX-WS サービス実装 Bean を作成する場合、WSDL ファイルは通常オプションですが、JAX-WS エンドポイントを SOAP over JMS トランスポートを使用して公開している状態で、WSDL ファイルを公開する場合は、必須です。 SOAP over JMS トランスポートを使用して起動される Enterprise JavaBeans サービス実装 Bean を開発しており、WSDL を公開して、公開された WSDL ファイルに完全解決済み JMS エンドポイント URL が含まれるようにする場合は、-wsdl 引数を指定して、wsgen ツールで WSDL ファイルが生成されるようにします。 このシナリオでは、Web サービス・アプリケーションとともに WSDL ファイルをパッケージ化する必要があります。

これらの JAX-WS ツールは、コマンド行から使用するだけでなく、 Ant ビルド環境内で起動することができます。 wsgen ツールを起動するには、Ant ビルド環境内から com.sun.tools.ws.ant.WsGen Ant タスク を使用します。 この Ant タスクが正しく機能するようにするには、ws_ant スクリプトを使用して Ant を起動する必要があります。

手順

  1. サービス・エンドポイント実装クラス・ファイルを見つけます。
  2. wsgen コマンドを実行して、移植可能な成果物を生成します。 wsgen ツールは、 app_server_root/bin/ ディレクトリーにあります。
    [Windows]
    app_server_root\bin\wsgen.bat [options] service_implementation_class
    [AIX][HP-UX][Linux][Solaris]
    app_server_root/bin/ wsgen.sh [options] service_implementation_class
    [IBM i]
    app_server_root/bin/ wsgen [options] service_implementation_class
    (オプション) wsgen コマンドでは、以下のオプションを使用します。
    • -verbose オプションを使用して、追加の通知メッセージとともに生成されたファイルのリストを確認します。
    • 生成された Java ファイルを保持するには、-keep オプションを使用します。
    • -wsdl オプションを使用して、WSDL ファイルを生成します。HTTP トランスポートを使用して起動されるサービス 実装 Bean を開発している場合、このステップで wsgen コマンド行ツールによって生成される WSDL ファイルはオプションとなります。ただし、SOAP over JMS トランスポートを使用して起動されるサービス 実装 Bean を開発している場合は、このステップで wsgen ツールによって生成される WSDL ファイルが後続の JAX-WS アプリケーションの開発ステップで必要となるため、このファイルはオプションではありません。

    このコマンドおよび指定可能なその他のオプションについて詳しくは、wsgen に関する情報を参照してください。

タスクの結果

JAX-WS Web サービスの作成に必要な Java 成果物が得られました。

トラブルの回避 (Avoid trouble) トラブルの回避 (Avoid trouble): wsgen コマンドは、異なる Java パッケージ内で定義される同じ @XMLType 名を持つ複数の XMLType アノテーション間で XML 名前空間を区別しません。このシナリオが発生すると、 以下のエラーが出力されます。
エラー: Two classes have the same XML type name ....
Use @XmlType.name and @XmlType.namespace to assign different names to them...
このエラーは、名前が同じで、異なる Java パッケージ内に存在する クラス名または @XMLType.name 値があることを示します。このエラーを回避するには、既存の @XMLType アノテーションに @XML.Type.namespace クラスを追加して、XML タイプを区別します。gotcha

JAX-WS アプリケーションでは、wsgen コマンド行ツールで共有クラス・ファイルが見つからないことがあります。com.ibm.websphere.webservices.WSDL_Generation_Extra_ClassPath カスタム・プロパティーを使用して、これらのクラス・ファイルのロケーションを指定できます。詳しくは、Java 仮想マシンのカスタム・プロパティーに関する資料を参照してください。

以下の例は、JAX-WS 成果物を生成するために wsgen コマンドを使用してサービス・エンドポイント実装クラスを処理する方法を示しています。 この例の EchoService サービス実装クラスは、明示的な JavaBeans サービス・エンドポイントを使用します。
  1. サンプルの EchoServicePortTypeImpl サービス実装クラス・ファイル、および関連の EchoServicePortType サービス・インターフェース・クラス・ファイルをディレクトリーにコピーします。 ディレクトリーには、クラス・ファイルの com.ibm.was.wssample.echo パッケージ名に対応するディレクトリー・ツリー構造が含まれている必要があります。
    /* This is a sample EchoServicePortTypeImpl.java file.    */
    package com.ibm.was.wssample.echo;
    
    
    @javax.jws.WebService(serviceName = "EchoService", endpointInterface = 
    "com.ibm.was.wssample.echo.EchoServicePortType", 
    targetNamespace="http://com/ibm/was/wssample/echo/",
    portName="EchoServicePort")
    
    public class EchoServicePortTypeImpl implements EchoServicePortType {
    
    		public EchoServicePortTypeImpl() {
    	}
    
    		public String invoke(String obj) {
    				System.out.println(">> JAXB Provider Service: 
    Request received.¥n");
    				String str = "Failed";
    		if (obj != null) {
    			try {
    								str = obj;
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    		}
    				return str;
    
    	}
    
    }	
    /* This is a sample EchoServicePortType.java file.    */
    package com.ibm.was.wssample.echo;
    
    import javax.jws.WebMethod;
    import javax.jws.WebParam;
    import javax.jws.WebResult;
    import javax.jws.WebService;
    import javax.xml.ws.RequestWrapper;
    import javax.xml.ws.ResponseWrapper;
    
    
    @WebService(name = "EchoServicePortType", targetNamespace = 
    "http://com/ibm/was/wssample/echo/",
     wsdlLocation="WEB-INF/wsdl/Echo.wsdl")
    
    public interface EchoServicePortType {
    
    
        /**
         * 
         * @param arg0
         * @return
         *     returns java.lang.String
         */
        @WebMethod
        @WebResult(name = "response", targetNamespace = 
        "http://com/ibm/was/wssample/echo/")
        @RequestWrapper(localName = "invoke", targetNamespace = 
        "http://com/ibm/was/wssample/echo/",
         className = "com.ibm.was.wssample.echo.Invoke")
        @ResponseWrapper(localName = "echoStringResponse", 
         targetNamespace="http://com/ibm/was/wssample/echo/",
         className = "com.ibm.was.wssample.echo.EchoStringResponse")
        public String invoke(
            @WebParam(name = "arg0", targetNamespace = 
            "http://com/ibm/was/wssample/echo/")
            String arg0);
    
    }
  2. app_server_root¥bin¥ ディレクトリーから wsgen コマンドを実行します。 -cp オプションは、サービス実装クラス・ファイルのロケーションを指定します。 -s オプションは、生成されたソース・ファイルのディレクトリーを指定します。 -d オプションは、生成された出力ファイルのディレクトリーを指定します。 -s または -d オプションを使用する場合は、 初めに、生成された出力ファイルのディレクトリーを作成する必要があります。
    [Windows]
    app_server_root\bin\wsgen.bat -wsdl -s c:\generated_source\ -cp c:\my_application\classes\ 
    com.ibm.was.wssample.echo.EchoServicePortTypeImpl -verbose -d c:¥generated_artifacts¥
    [Linux][AIX][HP-UX][Solaris]wsgen コマンドを使用して、以下のようにします。
    app_server_root/bin/wsgen.sh -wsdl -s c:/generated_source/ -cp c:/my_application/classes/ 
    com.ibm.was.wssample.echo.EchoServicePortTypeImpl -verbose -d c:/generated_artifacts/
wsgen コマンドを使用して Java 成果物を生成すると、 以下のファイルが生成されます。
/generated_source/com/ibm/was/wssample/echo/EchoStringResponse.java
/generated_source/com/ibm/was/wssample/echo/Invoke.java
/generated_artifacts/EchoService.wsdl
/generated_artifacts/EchoService_schema1.xsd
/generated_artifacts/com/ibm/was/wssample/echo/EchoStringResponse.class
/generated_artifacts/com/ibm/was/wssample/echo/Invoke.class

EchoStringResponse.java ファイルと Invoke.java ファイルは、 生成された Java クラス・ファイルです。生成された Java ファイルの コンパイル済みバージョンは、EchoStringResponse.class ファイルと Invoke.class ファイルです。-wsdl オプションを指定したため、EchoService.wsdl ファイルと EchoService_schema1.xsd ファイルが生成されています。

次のタスク

JAX-WS Web サービス・アプリケーションの実装を完了します。


トピックのタイプを示すアイコン タスク・トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_devjaxwsartifactsbean
ファイル名:twbs_devjaxwsartifactsbean.html