Hitachi

Cosminexus V11 アプリケーションサーバ SOAPアプリケーション開発の手引


9.2 WSDL2Javaコマンド(ソースコードの生成)

WSDLからのソースコード生成は次のコマンドを使用します。

形式
WSDL2Java.bat -C validS [その他のオプション群] <対象となるWSDLファイル名>

必須の-Cオプションおよび任意に指定するオプションの一覧を示します。

表9‒4 WSDL2Javaコマンドの-Cオプション(必須)

オプション

意味

-C

WSDLを検証するかどうかを指定します。検証モードにvalidS,validOnlySのどちらかを指定します。validSを指定した場合,指定したWSDLの検証が行われ,Javaソースコードが生成されます。validOnlySを指定した場合,WSDLの検証だけが行われます。WSDLを検証した結果,WSDLに不正がある場合はエラーとなります。

省略時:WSDLは検証されません。

-Cオプションの指定について

-Cオプション(WSDL検証機能)の指定は必須です。このオプションは入力されたWSDL内で,サポートされていない要素を使用していないかどうかを検証する機能です。

このオプションを指定しなかった場合,入力されたWSDL内でサポートされていない要素を使用していても,WSDL2Javaコマンドが正常に終了することがあります。

表9‒5 WSDL2Javaコマンドのオプション一覧(任意)

オプション

意味

-h

ヘルプが表示されます。

-v

生成過程が画面に表示されます。

-O

タイムアウト値を秒で指定します。

省略時:45が設定されます。

-s

スケルトン(サーバ側に必要なソースコード)とサービスデプロイ定義が生成されます。

省略時:スタブ(クライアント側に必要なソースコード)が生成されます。

-N

名前空間とパッケージ名の関係をnamespace=packageの形式で指定します(パッケージ名)。

省略時:パッケージ名は変更されません。

-f

ファイル指定で名前空間とパッケージ名の関係を指定します。

省略時:パッケージ名は変更されません。

-p

すべてのクラスのパッケージ名を変更します。

省略時:パッケージ名は変更されません。

-o

ソース出力先ディレクトリを指定します。

省略時:カレントディレクトリが設定されます。

-d

deployScopeをApplication,Request,Sessionのどれかで指定します。

省略時:Requestが設定されます。

-a

メソッドのパラメタや,パラメタのクラスで参照されないユーザ定義のデータ型についても,ソースコードが生成されます。

省略時:参照されないユーザ定義のデータ型については,ソースコードは生成されません。

-L

入力されたWSDLの記述内容に対するチェック機能を緩和します。

省略時:チェック機能は緩和されません。

WSDL2Javaコマンドで生成されるソースコード

ソースコードは,カレントディレクトリ下にあるパッケージ名のフォルダ下に生成されます。例えば,カレントディレクトリが「C:\SOAP」でパッケージ名が「jp.co.hitachi.soft」の場合は,「C:\SOAP\jp\co\hitachi\soft」に生成されます。WSDL2Javaコマンドで生成されるファイルの一覧を次の表に示します。

表9‒6 WSDL2Javaコマンドで生成されるファイル一覧

生成ファイル名

名称

説明

<portType要素のname属性>.java

リモートインタフェース

スタブ,スケルトン共通インタフェースクラスです。

<service要素のname属性>.java

サービスインタフェース

サービスのインタフェースクラスです。

<service要素のname属性>Locator.java

サービスクラス

サービスへの接続情報を保持するクラスです。

<binding要素のname属性>Impl.java

スケルトンクラス

サーバ側に処理を実装するためのクラスです。

<binding要素のname属性>Stub.java

スタブクラス

Callオブジェクト生成などを行うスタブクラスです。

<types要素に定義したデータ型名>.java

ユーザ定義のデータ型クラス

ユーザ作成のデータ型クラスです。0または1個以上のデータ型クラスを作成します。

生成されるファイル名称に関して,次の注意が必要です。

  • 生成されるフォルダ内にすでに同じ名称のソースコードがある場合,<binding要素のname属性>Impl.java(スケルトンクラス)以外は上書きされます。したがって,上書きされないようにするには,各要素のname属性を変更したあとに,再度生成し直してください。

  • 生成されるフォルダ内にすでに同じ名称のソースコードがある場合,<binding要素のname属性>Impl.java(スケルトンクラス)だけは上書きされません。したがって,インタフェースを変更するときは,<binding要素のname属性>Impl.java(スケルトンクラス)を直接修正するか,<binding要素のname属性>Impl.java(スケルトンクラス)を削除してから再度生成し直してください。

終了コード

0:正常終了

1:異常または警告終了

メッセージ

メッセージの詳細については,マニュアル「アプリケーションサーバ メッセージ(構築/運用/開発用)」の開発支援コマンドによって出力されるメッセージの記述を参照してください。

注意事項
  • -sオプションを指定して生成したサービスデプロイ定義(server-config.xml)は編集しないでそのままご使用ください。

  • 指定するWSDLファイルにはローカルファイルを指定してください。

  • 実行中にエラーが発生した場合,ソースが途中まで生成されている場合があります。必要に応じて削除してください。

  • WSDLファイルのパスには,次の文字は使用できません。

    ? : * # % | < > "

  • WSDL定義のmessage要素に含まれるpart要素に,element属性とtype属性の両方を指定して,コマンドを実行したときの挙動を次に示します。

    WSDLのスタイルおよびuse属性が「RPC/LITERAL」または「RPC/ENCODED」の場合:

    element属性を無視し,type属性の記述に従ってJavaソースコードが生成されます。

    WSDLのスタイルおよびuse属性が「DOCUMENT/LITERAL」の場合:

    WSDL2Javaコマンドの実行時に,KDCCC0240-Eメッセージが出力されて異常終了します。

  • XML Schemaに同じ名前の要素と型を定義する場合,wsdl:portType,wsdl:binding,およびwsdl:serviceには同じ名前を使用しないでください。同じ名前を使用した場合,コンパイルできないソースコードが生成されます。

  • WSDLには,同じ名前を設定できる要素があるため,生成されるJavaインタフェースおよびJavaクラスの名前が衝突することがあります。名前が衝突した場合,WSDL2Javaコマンドは,衝突したすべてのJavaインタフェースおよびJavaクラスの名前に次のようなサフィックスを追加します。

    表9‒7 名前衝突時に追加されるサフィックス

    項番

    WSDLまたはXML Schemaの要素および型

    Javaインタフェースおよびクラスに追加されるサフィックス

    1

    JavaクラスにマッピングされるXML Schemaの型

    _Type

    (例1)

    XML Schema:

    <xsd:complexType name="Shared">

     <xsd:sequence>

      <xsd:element name="elem" type="xsd:string"/>

     </xsd:sequence>

    </xsd:complexType>

    Java:

    Shared_Type.java

    (例2)

    XML Schema:

    <xsd:simpleType name="Shared">

     <xsd:restriction base="xsd:string">

      <xsd:enumeration value="foo"/>

     </xsd:restriction>

    </xsd:simpleType>

    Java:

    Shared_Type.java

    2

    JavaクラスにマッピングされるXML Schemaの要素

    _ElemType

    XML Schema:

    <xsd:element name="Shared">

     <xsd:complexType>

      <xsd:sequence>

       <xsd:element name="elem" type="xsd:string"/>

      </xsd:sequence>

     </xsd:complexType>

    </xsd:element>

    Java:

    Shared_ElemType.java

    3

    wsdl:portType要素

    _Port

    WSDL:

    <wsdl:portType name="Shared">

     ...

    Java:

    Shared_Port.java

    4

    wsdl:service要素

    _Service

    WSDL:

    <wsdl:service name="Shared">

     ...

    Java:

    Shared_Service.java

    5

    wsdl:fault要素が参照しているXML Schemaの型

    _Exception

    WSDL:

    <wsdl:types>

     <xsd:schema ...>

      <xsd:complexType name="Shared">

       ...

      </xsd:complexType>

     </xsd:schema>

    </wsdl:types>

    <wsdl:message name="UserException">

      <wsdl:part name="fault" type="intf:Shared"/>

    </wsdl:message>

    ...

    <wsdl:portType name="UserInfo">

     <wsdl:operation name="getUserInfo" parameterOrder="in0">

      ...

      <wsdl:fault message="intf:UserException" name="UserException"/>

     </wsdl:operation>

    </wsdl:portType>

    Java:

    Shared_Exception.java

  • wsdl:definitions要素のtargetNamespace属性値からマッピングされるJavaパッケージの名前と,次の要素および型の名前が同じ場合,Javaパッケージの名前にサフィックスとして"_pkg"を追加します。

    ・JavaクラスにマッピングされるXML Schemaの型

    ・JavaクラスにマッピングされるXML Schemaの要素

    ・wsdl:portType要素

    ・wsdl:service要素

    ・wsdl:fault要素が参照しているXML Schemaの型

  • -pオプションでIPv6アドレスを指定した場合,指定した文字列がそのままパッケージ名になります。このとき,生成したクラスのパッケージ名が不正になり,コンパイルできないことがあります。コンパイルできない場合は,生成したクラスのパッケージ名を修正してください。

  • スタブおよびスケルトンファイルをコンパイルすると,次に示す警告メッセージが出力されることがあります。

    注:入力ファイルの操作のうち,未チェックまたは安全ではないものがあります。
    注:詳細については,-Xlint:unchecked オプションを指定して再コンパイルしてください。

    この警告メッセージが出力された場合の対処は不要です。

    なお,「入力ファイルの操作のうち」の部分は,コンパイル時の入力ファイル名が出力されることがあります。

  • 生成されるソースコードは,SOAP通信基盤のバージョン08-50(Component Container 08-50)対応のソースコードとなります。08-50以外のバージョンのSOAP通信基盤には,対応するSOAPアプリケーション開発支援機能でソースコードの再生成が必要になります。

-Lオプションについて

-Lオプションを指定した場合,WSDLの記述内容に関する次のチェックを緩和します。

  • 別ファイルのXML Schemaをインポートまたはインクルードし,対象のXML Schemaがさらに別ファイルのXML Schemaをインポートまたはインクルードする場合,間接的にXML Schemaの要素および属性を参照することはできません。間接的に要素および属性を参照しようとした場合,WSDL2JavaコマンドはKDCCC0137-Eメッセージを出力し異常終了します。

  • -sオプションを指定した場合,soap:address要素のlocation属性に次のどれかを指定したとき,WSDL2JavaコマンドはKDCCC0182-Eメッセージを出力し異常終了します。

    ・java.net.URL(String)コンストラクタでjava.net.MalformedURLExceptionが発生する文字列

    ・authority部がないURL文字列

    ・path部がないURL文字列

    ・プロトコルが「http」および「https」以外のURL文字列

  • 複数のwsdl:types要素を記述した場合,WSDL2JavaコマンドはKDCCC0247-Eメッセージを出力し異常終了します。

  • -sオプションを指定した場合,soap:address要素のlocation属性に,RFC3986で規定された予約文字および非予約文字以外の文字列を指定したとき,WSDL2JavaコマンドはKDCCC0273-Eメッセージを出力し異常終了します。

  • -sオプションを指定した場合,soap:address要素のlocation属性に,文字列長が8,190バイトを超える文字列を指定したときに,WSDL2JavaコマンドはKDCCC0274-Eメッセージを出力し異常終了します。

  • 次の条件のどちらかの場合,WSDL2JavaコマンドはKDCCC0275-Eメッセージを出力し異常終了します。

    ・「http://www.w3.org/1999/XMLSchema」のXML Schemaを使用した場合。

    ・「http://www.w3.org/2000/10/XMLSchema」のXML Schemaを使用した場合。

  • 次の条件のどれかの場合,WSDL2JavaコマンドはKDCCC0277-Eメッセージを出力し異常終了します。

    ・WSDLのインポートで,wsdl:import要素のlocation属性で指定したファイルパスを絶対パスに換算した文字数が256文字を超える場合。

    ・XML Schemaのインポートで,xsd:import要素のschemaLocation属性で指定したファイルパスを絶対パスに換算した文字数が256文字を超える場合。

    ・XML Schemaのインクルードで,xsd:include要素のschemaLocation属性で指定したファイルパスを絶対パスに換算した文字数が256文字を超える場合。

  • xsd:schema要素の子要素に複数のxsd:import要素を記述した場合,schemaLocation属性の値が同じとき,WSDL2JavaコマンドはKDCCC0278-Eメッセージを出力し異常終了します。

  • 次の条件のどれかの場合,WSDL2JavaコマンドはKDCCC0279-Eメッセージを出力し異常終了します。

    ・WSDLのインポートで,インポート対象のwsdl:definitions要素のtargetNamespace属性と,インポート元のwsdl:import要素のnamespace属性とが異なる場合。

    ・XML Schemaのインポートで,インポート対象のxsd:schema要素のtargetNamespace属性と,インポート元のxsd:import要素のnamespace属性とが異なる場合。

    ・XML Schemaのインクルードで,インクルード対象のxsd:schema要素のtargetNamespace属性と,インクルード元のxsd:schema要素のtargetNamespace属性とが異なる場合。

  • 同じWSDL内のXML Schemaをインポートまたはインクルードし,対象のXML Schemaがさらに同じWSDL内のXML Schemaをインポートまたはインクルードする場合,間接的にXML Schemaの要素および属性を参照しようとしたとき,WSDL2JavaコマンドはKDCCC0280-Eメッセージを出力し異常終了します。

  • wsdl:types要素を記述する場合,wsdl:documentation要素およびwsdl:import要素を除く,ほかのすべての要素よりも前に記述していないとき,WSDL2JavaコマンドはKDCCC0283-Eメッセージを出力し異常終了します。

  • WSDLをインポートする場合,次の条件のどちらも満たさないとき,WSDL2JavaコマンドはKDCCC0284-Eメッセージを出力し異常終了します。

    ・次の要素の組み合わせ

     ・インポート元:wsdl:binding,wsdl:service

     ・インポート対象:wsdl:types,wsdl:message,wsdl:portType

    ・次の要素の組み合わせ

     ・インポート元:wsdl:service

     ・インポート対象:wsdl:types,wsdl:message,wsdl:portType,wsdl:binding

 注※

 wsdl:types要素を省略する場合は不要です。

  • wsdl:import要素を記述する場合,wsdl:documentation要素を除く,ほかのすべての要素よりも前に記述していないとき,WSDL2JavaコマンドはKDCCC0285-Eメッセージを出力し異常終了します。

  • xsd:schema要素の子要素に複数のxsd:include要素を記述した場合,schemaLocation属性の値が同じとき,WSDL2JavaコマンドはKDCCC0287-Eメッセージを出力し異常終了します。

  • wsdl:definitions要素の子要素に複数のwsdl:import要素を記述した場合,location属性の値が同じとき,WSDL2JavaコマンドはKDCCC0288-Eメッセージを出力し異常終了します。

  • 次の条件のどちらかの場合,WSDL2JavaコマンドはKDCCC0290-Eメッセージを出力し異常終了します。

    ・XML Schemaのインクルードで,インクルード対象のxsd:schema要素のtargetNamespace属性,およびインクルード元のxsd:schema要素のtargetNamespace属性が省略されている場合。

    ・XML Schemaのインクルードで,インクルード対象のxsd:schema要素のtargetNamespace属性,およびインクルード元のxsd:schema要素のtargetNamespace属性の値が空文字の場合。

  • 次のどれかの属性に対して,RFC3986で規定された予約文字および非予約文字以外の文字列を使用する場合,UTF-8でパーセントエンコードしていないとき,WSDL2JavaコマンドはKDCCC0291-Eメッセージを出力し異常終了します。

    ・wsdl:definitions要素のtargetNamespace属性

    ・wsdl:definitions要素の名前空間宣言

    ・wsdl:import要素のnamespace属性

    ・wsdl:import要素のlocation属性

    ・xsd:schema要素のtargetNamespace属性

    ・xsd:schema要素の名前空間宣言

    ・xsd:import要素のnamespace属性

    ・xsd:import要素のschemaLocation属性

    ・xsd:include要素のnamespace属性

    ・xsd:include要素のschemaLocation属性

  • -sオプションを指定した場合,wsdl:port要素のname属性を日本語で定義し,wsdl:port要素のname属性をパーセントエンコードした値とsoap:address要素のlocation属性のURLパスの末尾が一致しないとき,WSDL2JavaコマンドはKDCCC0292-Eメッセージを出力し異常終了します。

  • -sオプションを指定した場合,wsdl:port要素のname属性とsoap:address要素のlocation属性のURLパスの末尾が一致しないとき,WSDL2JavaコマンドはKDCCC0293-Eメッセージを出力し異常終了します。

  • 次の条件のどちらかの場合,WSDL2JavaコマンドはKDCCC0300-Eメッセージを出力し異常終了します。

    ・WSDLのインポートで,wsdl:definitions要素のtargetNamespace属性とwsdl:import要素のnamespace属性が同じ名前空間の場合。

    ・XML Schemaのインポートで,xsd:schema要素のtargetNamespace属性とxsd:import要素のnamespace属性が同じ名前空間の場合。

  • 次の条件のどれかの場合,WSDL2Javaコマンドはwsdl:import要素,xsd:import要素またはxsd:include要素を無視します。

    ・WSDLのインポートで,wsdl:import要素のlocation属性に相対パス以外(絶対パスおよびhttp://やftp://などのプロトコルで始まるURIなど)を指定した場合。

    ・XML Schemaのインポートで,xsd:import要素のschemaLocation属性に相対パス以外(絶対パスおよびhttp://やftp://などのプロトコルで始まるURIなど)を指定した場合。

    ・XML Schemaのインクルードで,xsd:include要素のschemaLocation属性に相対パス以外(絶対パスおよびhttp://やftp://などのプロトコルで始まるURIなど)を指定した場合。