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 Architecture for XML Binding (JAXB) クラス。
- オプションの -wsdl 引数が指定されている場合の Web サービス記述言語 (WSDL) ファイル。


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 を起動する必要があります。
手順
タスクの結果
JAX-WS Web サービスの作成に必要な Java 成果物が得られました。

エラー: 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 タイプを区別します。gotchaJAX-WS アプリケーションでは、wsgen コマンド行ツールで共有クラス・ファイルが見つからないことがあります。com.ibm.websphere.webservices.WSDL_Generation_Extra_ClassPath カスタム・プロパティーを使用して、これらのクラス・ファイルのロケーションを指定できます。詳しくは、Java 仮想マシンのカスタム・プロパティーに関する資料を参照してください。
例
- サンプルの 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); }
- app_server_root¥bin¥ ディレクトリーから wsgen コマンドを実行します。
-cp オプションは、サービス実装クラス・ファイルのロケーションを指定します。
-s オプションは、生成されたソース・ファイルのディレクトリーを指定します。
-d オプションは、生成された出力ファイルのディレクトリーを指定します。
-s または -d オプションを使用する場合は、
初めに、生成された出力ファイルのディレクトリーを作成する必要があります。
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¥
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/
/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 サービス・アプリケーションの実装を完了します。