WebSphere Application Server Network Deployment, Version 6.1   
             オペレーティング・システム: AIX , HP-UX, Linux, Solaris, Windows, Windows Vista

             目次と検索結果のパーソナライズ化

JAX-RPC アプリケーションの Java 言語、WSDL、および XML 間のマッピング

Java API for XML-based Remote Procedure Call (JAX-RPC) アプリケーションのデータは、Extensible Markup Language (XML) としてフローします。JAX-RPC アプリケーションはマッピングを使用して、Java 言語と Extensible Markup Language (XML) テクノロジー (WebSphere Application Server でサポートされる XML スキーマ、Web サービス記述言語 (WSDL)、および SOAP を含む) との間のデータ変換を記述します。

JAX-RPC アプリケーションでは、Java 言語と XML 間のマッピングの大部分は、JAX-RPC 仕様で指定されています。一部、オプションのマッピングや JAX-RPC で指定されていないマッピングもサポートしています。 API の完全なリストについては、 JAX-RPC 仕様を参照してください。 また、Web サービス: 学習用リソースにある Web サービスの開発についての項目も検討します。

表記規則

以下の表は、ここで使用されるネーム・スペースの接頭部と、 それに対応するネーム・スペースです。

ネーム・スペースの接頭部 ネーム・スペース
xsd http://www.w3.org/2001/XMLSchema
xsi http://www.w3.org/2001/XMLSchema-instance
soapenc http://schemas.xmlsoap.org/soap/encoding/
wsdl http://schemas.xmlsoap.org/wsdl/
wsdlsoap http://schemas.xmlsoap.org/wsdl/soap/
ns ユーザー定義のネーム・スペース
apache http://xml.apache.org/xml-soap
wasws http://websphere.ibm.com/webservices/

マッピングの詳細情報

以下のセクションでは、 以下のサポートされているマッピングについて説明します。

Java から WSDL へのマッピング

このセクションでは、 Java から WSDL へのマッピングの規則について説明します。Java から WSDL へのマッピングの規則は、 Java2WSDL コマンドによってボトムアップ処理 に使用されます。 ボトムアップ処理では、既存の Java サービス・インプリメンテーションを使用して、 Web サービスを定義する WSDL ファイルを作成します。 生成された WSDL ファイルは、以下の理由から追加の手動編集が必要になることがあります。 単純なサービスの場合は、生成される WSDL ファイルで十分です。 複雑なサービスの場合は、生成される WSDL ファイルが適切な開始点となります。
一般的な問題
  • パッケージからネーム・スペースへのマッピング

    JAX-RPC 仕様では、 Java パッケージ名の XML ネーム・スペースへのデフォルト・マッピングが指示されていません。 JAX-RPC 仕様では、各 Java パッケージを 単一の XML ネーム・スペースにマップする必要があることが指定されています。さらに、各 XML ネーム・スペースは単一の Java パッケージにマップする必要があります。Java パッケージの名前を反転し http:// という接頭部を 追加することでネーム・スペースを作成するという、デフォルトのマッピング・アルゴリズムが用意されています。 例えば、com.ibm.webservice という名前のパッケージは、 XML ネーム・スペース http://webservice.ibm.com にマップされます。

    XML ネーム・スペースと Java パッケージ名との間のデフォルト・マッピングは、 WSDL2Java コマンドおよび Java2WSDL コマンドの -NStoPkg オプションおよび -PkgtoNS オプションを使用してオーバーライドできます。

  • ID のマッピング

    Java ID は、WSDL ID および XML ID に直接マップされます。

    Java Bean のプロパティー名は、XML ID にマップされます。 例えば、getInfo メソッドおよび setInfo メソッドを持つ Java Bean は、info という名前の XML 構成体にマップされます。

    サービス・エンドポイント・インターフェース・メソッドのパラメーター名が使用可能な場合、 それらは直接 WSDL ID および XML ID にマップされます。 詳しくは、『WSDL2Java コマンド』の -implClass オプションを参照してください。

  • WSDL 構造のまとめ

    以下の表に、 Java 構成体から関連する WSDL 構成体および XML 構成体へのマッピングをまとめます。

    Java 構成体 WSDL および XML 構成体
    サービス・エンドポイント・インターフェース wsdl:portType
    メソッド wsdl:operation
    パラメーター wsdl:input、wsdl:message、wsdl:part
    リターン wsdl:output、wsdl:message、wsdl:part
    スロー wsdl:fault、wsdl:message、wsdl:part
    プリミティブ型 xsd および soapenc の単純な型
    Java Bean xsd:complexType
    Java Bean プロパティー xsd:complexType のネストされた xsd:element
    配列 JAX-RPC 定義の xsd:complexType または xsd:element (属性 maxOccurs="unbounded" を指定)
    ユーザー定義の例外 xsd:complexType
  • バインディングおよびサービス構造

    生成される wsdl:portType に準拠した wsdl:binding が生成されます。 生成される wsdl:binding を参照するポートを含む wsdl:service が生成されます。バインディングおよびサービスの名前は、 Java2WSDL コマンドによって制御されます。

  • style および use
    -style オプションや -use オプションを使用して、さまざまな種類の WSDL ファイルを生成できます。4 つのサポートされている組み合わせは、以下のとおりです。
    • -style DOCUMENT -use LITERAL
    • -style RPC -use LITERAL
    • -style DOCUMENT -use LITERAL -wrapped false
    • -style RPC -use ENCODED
    各組み合わせの概略は次のとおりです。
    • DOCUMENT LITERAL

      Java2WSDL コマンドは、Web Services - Interoperability (WS-I) 仕様に準拠したドキュメント/リテラル WSDL ファイルを生成します。生成される wsdl:binding の組み込み属性は、 style="document" および use="literal" となります。 xsd:element は、サービス・エンドポイント・インターフェースの各メソッドが要求メッセージを記述するために生成されます。 サービス・エンドポイント・インターフェースの各メソッドが応答メッセージを記述する場合にも、 同じ xsd:element が生成されます。

    • RPC LITERAL

      Java2WSDL コマンドは、 WS-I 準拠の rpc-literal WSDL ファイルを生成します。生成される wsdl:binding の組み込み属性は、 style="rpc" および use="literal" となります。 wsdl:message 構成体は、サービス・エンドポイント・インターフェースの各メソッドの入出力用に生成されます。 メソッドのパラメーターは、 wsdl:message 構成体内のパート・エレメントによって記述されます。

    • DOCUMENT LITERAL (ラップなし)

      Java2WSDL コマンドは、 JAX-RPC 仕様に従って document-literal WSDL ファイルを生成します。この WSDL ファイルは、 .NET には準拠していません。DOCUMENT LITERAL と DOCUMENT LITERAL (ラップなし) の主な違いは、 要求および応答メッセージの定義に wsdl:message 構成体を使用するかどうかです。

    • RPC ENCODED

      Java2WSDL コマンドは、 JAX-RPC 仕様に従って rpc-encoded WSDL ファイルを生成します。この WSDL ファイルは、 WS-I 仕様には準拠していません。生成される wsdl:binding の組み込み属性は、 style="rpc" および use="encoded" となります。 型および配列を表すには、特定の soapenc マッピングが使用されます。

    Java 型から標準 XML 型へのマッピング

    Java 型の多くは、 標準 XML 型に直接マップされます。 例えば、java.lang.String は xsd:string にマップされます。これらのマッピングについては JAX-RPC 仕様に記述されています。

    wsdl:types の生成

    標準 XML 型に直接マッピングできない Java 型は、 wsdl:types セクションで生成します。Java Bean パターンと一致する Java クラスは、 xsd:complexType にマップされます。 すべてのマッピング規則については、JAX-RPC 仕様を参照してください。以下に、 サンプルの基本 Java クラスおよび派生 Java クラスのマッピング例を示します。
    Java: 
    
    
    public abstract class Base {  
         public Base() {}  
         public int a;                         // mapped  
         private int b;                        // mapped via setter/getter  
         private int c;                        // not mapped  
         private int[] d;                      // mapped via indexed setter/getter  
    
         public int getB() { return b;}        // map property b  
         public void setB(int b) {this.b = b;}  
    
         public int[] getD() { return d;}      // map indexed property d  
         public void setD(int[] d) {this.d = d;}  
         public int getD(int index) { return d[index];}  
         public void setB(int index, int value) {this.d[index] = value;}  
    
         public void someMethod() {...}        // not mapped  
      }  
    
      public class Derived extends Base {  
         public int x;                         // mapped  
         private int y;                        // not mapped  
      } 
    
    マップ先:
    
    <xsd:complexType name="Base" abstract="true">  
    	 <xsd:sequence>
    		<xsd:element name="a" type="xsd:int" />
    		<xsd:element name="b" type="xsd:int" /> 
    		<xsd:element name="d" minOccurs="0" maxOccurs="unbounded" type="xsd:int"/>
    	</xsd:sequence>
    </xsd:complexType>
    
    <xsd:complexType name="Derived">
    	<xsd:complexContent>
    		<xsd:extension base="ns:Base">
    			<xsd:sequence>
    				<xsd:element name="x" type="xsd:int" />
    			</xsd:sequence>
    		</xsd:extension>
    	</xsd:complexContent>
    </xsd:complexType>
        
    
    
  • サポートされていないクラス

    クラスを XML 型にマッピングできない場合、 Java2WSDL コマンドはメッセージを発行し、WSDL ファイルには xsd:anyType 参照が生成されます。 このような場合には、JAX-RPC に準拠したクラスを使用するように Web サービスのインプリメンテーションを変更します。

WSDL から Java へのマッピング

WSDL2Java コマンドは、 WSDL ファイル内の情報を使用する Java クラスを生成します。

一般的な問題
  • ネーム・スペースからパッケージへのマッピング

    JAX-RPC では、 XML ネーム・スペースから Java パッケージ名へのマッピングを指定していません。 JAX-RPC では、各 Java パッケージを単一の XML ネーム・スペースにマップするように指定されています。さらに、各 XML ネーム・スペースは単一の Java パッケージにマップする必要があります。デフォルトのマッピング・アルゴリズムでは、 XML ネーム・スペースからプロトコルを省略し、名前を反転させます。 例えば、XML ネーム・スペース http://websphere.ibm.com は、 com.ibm.websphere という名前の Java パッケージになります。

    XML ネーム・スペースから Java パッケージへのデフォルトのマッピングでは、 コンテキスト・ルートは無視されます。 1 つ目のスラッシュまで 2 つのネーム・スペースが同じ場合、 それらは同じ Java パッケージにマップされます。 例えば、XML ネーム・スペース http://websphere.ibm.com/foo および http://websphere.ibm.com/bar は、 Java パッケージ com.ibm.websphere にマップされます。XML ネーム・スペースと Java パッケージ名との間のデフォルト・マッピングは、 WSDL2Java コマンドおよび Java2WSDL コマンドの -NStoPkg オプションおよび -PkgtoNS オプションを使用してオーバーライドできます。

    ID のマッピング

    XML 名の情報は Java ID よりも豊富です。XML 名には Java ID では認められていない文字を含めることができます。 XML 名から Java ID へのマッピング規則については、 JAX-RPC 仕様の付録 20 を参照してください。

  • Java 構造のまとめ
    次の表は、 Java から XML への構造をまとめたものです。これらのマッピングの詳細については、JAX-RPC 仕様を参照してください。
    WSDL および XML 構造 Java 構造
    xsd:complexType Java Bean クラス、Java 例外クラス、 または Java 配列
    ネストされた xsd:element/xsd:attribute Java Bean プロパティー
    xsd:simpleType (列挙型) JAX-RPC 列挙型クラス
    wsdl:message メソッド・パラメーター・シグニチャーは、 通常、wsdl:message によって決まります。 サービス・エンドポイント・インターフェース・メソッド・シグニチャー
    wsdl:portType サービス・エンドポイント・インターフェース
    wsdl:operation サービス・エンドポイント・インターフェース・メソッド
    wsdl:binding スタブ
    wsdl:service サービス・インターフェース
    wsdl:port サービス・インターフェース内のポート accessor メソッド
  • 標準 XML 型のマッピング
    • JAX-RPC の単純な XML 型のマッピング

      XML 型の多くは、 Java 型に直接マップされます。これらのマッピングの詳細については、JAX-RPC 仕様を参照してください。

      wsdl:types セクションで定義される XML 型のマッピング

      WSDL2Java コマンドは、 wsdl:types セクションで定義されている XML スキーマ構成体に対する Java 型を生成します。 XML スキーマ言語は、JAX-RPC 仕様で定義されている必須またはオプションのサブセットに比べ、 機能が豊富です。WSDL2Java コマンドは、必須マッピング、 ほとんどのオプション・マッピングに加えて、JAX-RPC 仕様に含まれていない一部の XML スキーマ・マッピングまでサポートしています。 WSDL2Java コマンドは、サポートしていないいくつかの構成体を無視します。 例えば、このコマンドではデフォルト属性はサポートされていません。 xsd:element がデフォルト属性で定義されている場合、 そのデフォルト属性は無視されます。場合によっては、 このコマンドで、サポートされない構成体が Java インターフェース javax.xml.soap.SOAPElement にマップされることがあります。

      標準の Java Bean マッピングは、JAX-RPC 仕様の 4.2.3 節で定義されています。 xsd:complexType で型が定義されます。 xsd:sequence グループや xsd:all グループ内部のネストされた xsd:elements は、 Java Bean プロパティーにマップされます。以下に例を示します。
      XML:
      
       
      <xsd:complexType name="Sample">
      	 <xsd:sequence>
      		<xsd:element name="a" type="xsd:string"/>
      		<xsd:element name="b" maxOccurs="unbounded" type="xsd:string"/> 
      	</xsd:sequence>
      </xsd:complexType>
      
      
      
      Java:    
        
      public class Sample {  
           // ..  
           public Sample() {}  
      
           // Bean Property a  
           public String getA()             {...}  
           public void   setA(String value) {...}  
      
           // Indexed Bean Property b  
           public String[] getB()           {...}  
           public String   getB(int index)  {...}  
           public void     setB(String[] values) {...}  
           public void     setB(int index, String value) {...}  
      
        }
      
      
    • wsdl:portType 構成体のマッピング

      wsdl:portType 構成体は、 サービス・エンドポイント・インターフェースにマップされます。wsdl:portType 構成体の名前は、 サービス・エンドポイント・インターフェースのクラス名にマップされます。

    • wsdl:operation 構成体のマッピング
      wsdl:portType 内の wsdl:operation 構成体は、 サービス・エンドポイント・インターフェースのメソッドにマップされます。 wsdl:operation の名前は、メソッドの名前にマップされます。 wsdl:operation には、メッセージ属性を使用して要求および応答の wsdl:message 構成体を参照する、 wsdl:input エレメントと wsdl:output エレメントが含まれています。wsdl:operation には、 障害を記述した wsdl:message を参照する wsdl:fault エレメントを含めることができます。 これらの障害は、JAX-RPC 仕様の 4.3.6 節に記載されているように、 例外 java.lang.Exception を拡張する Java クラスにマップされます。
      • ドキュメント/リテラル・ラップ・フォーマットの影響
        WSDL ファイルがラップされたドキュメント/リテラル・ラップ・フォーマットを使用する場合、 メソッド・パラメーターはラッパー xsd:element からマップされます。 ドキュメント/リテラル・ラップ・フォーマットおよびリテラル・フォーマットは、 WSDL2Java コマンドにより自動的に検出されます。 以下の基準を満たしている必要があります。
        • WSDL ファイルの wsdl:binding 構成体には style="document" が必要です。
        • wsdl:binding 内の操作の入出力構成体には、 use="literal" を含む soap:body エレメントが必要です。
        • wsdl:operation 入力構成体が参照する wsdl:message は単一パーツでなければなりません。
        • このパーツは、element 属性を使用して xsd:element を参照する必 要があります。
        • 参照先の xsd:element、つまりラッパー・エレメントの名前は、 wsdl:operation の名前と同じでなければなりません。
        • ラッパー・エレメントに xsd:attributes を組み込むことはできません。
        このような場合、各パラメーター名は、ラッパー・エレメントに組み込まれている、 ネストされた xsd:element からマップされます。パラメーターの型は、 ネストされた xsd:element の型からマップされます。以下に例を示します。
        WSDL: 
        
        <xsd:element name="myMethod" > 
        	<xsd:complexType>
        		<xsd:sequence>
        			<xsd:element name="param1" type="xsd:string" />
        			<xsd:element name="param2" type="xsd:int" /> 
        		</xsd:sequence>
        	</xsd:complexType>
        </xsd:element>
        ... 
        <wsdl:message name="response" /> 
        	<part name="parameters" element="ns:myMethod" /> 
        </wsdl:message name="response" />
        
        <wsdl:message name="response" /> 
        ...
        <wsdl:operation name="myMethod"> 
        	<input name="input" message="request" />
        	<output name="output" message="response" />
        </wsdl:operation>
        
        Java: 
        
        void myMethod(String param1, int param2) ... 
        
      • パラメーターのマッピング

        ドキュメント/リテラル・ラップ・フォーマットが検出されない場合、 パラメーターのマッピングは JAX-RPC 仕様の 4.3.4 節に記載されている標準の JAX-RPC マッピング規則に従います。

        各パラメーターは、input および output エレメントから参照される wsdl:message パートによって定義されます。
        • 要求 wsdl:message の wsdl:part は、input パラメーターにマップされます。
        • 応答 wsdl:message の wsdl:part は、戻り値にマップされます。 応答メッセージに複数の wsdl:parts がある場合、 それらは output パラメーターにマップされます。
          • Holder クラスは、JAX-RPC 仕様の 4.3.5 節に記載されているように、 output パラメーターごとに生成されます。
        • 要求と応答両方の wsdl:message にある wsdl:part は、 inout パラメーターにマップされます。
          • Holder クラスは、JAX-RPC 仕様の 4.3.5 節に記載されているように、 inout パラメーターごとに生成されます。
          • wsdl:operation parameterOrder 属性はパラメーターの順序を定義します。
        XML:
        
        <wsdl:message name="request">
        	<part name="param1" type="xsd:string" />
        	<part name="param2" type="xsd:int" />
        </wsdl:message name="response" />
        
        <wsdl:message name="response" /> 
        ...
        <wsdl:operation name="myMethod" parameterOrder="param1, param2">
        	<input name="input" message="request" />
        	<output name="output" message="response" />
        </wsdl:operation>
        
        
        Java: 
        
        void myMethod(String param1, int param2) ... 
        
    • wsdl:binding のマッピング
      WSDL2Java コマンドは、 wsdl:binding 情報を使用してインプリメンテーション固有のクライアント・サイドのスタブを生成します。WebSphere Application Server は、 サーバー・サイドの wsdl:binding 情報を使用して、要求を適切にデシリアライズし、Web サービスを呼び出して、応答をシリアライズします。 wsdl:binding 内の情報は、サービス・エンドポイント・インターフェースの生成には影響しませんが、 ドキュメント/リテラル・ラップ・フォーマットが使用された場合や、MIME 添付ファイルがある場合には、 影響することがあります。
      • MIME 添付ファイル
        WSDL 1.1 準拠の WSDL ファイルの場合、 バインディングで MIME 添付ファイルとして定義されている、操作メッセージのパートは、 パートの宣言にかかわらず、添付ファイルの型のパラメーターになります。 以下に例を示します。
        XML:
        <wsdl:types>
        	<schema ...>
        		<complexType name="ArrayOfBinary">
        			<restriction base="soapenc:Array">
        			  <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:binary[]" />
        			</restriction>
        		</complexType>
        	</schema>
        </wsdl:types>
        
        <wsdl:message name="request">
        	<part name="param1" type="ns:ArrayOfBinary" />
        <wsdl:message name="response" /> 
        
        <wsdl:message name="response" /> 
         ... 
        
        	<wsdl:operation name="myMethod">
        		<input name="input" message="request" />
        		<output name="output" message="response" />
        	</wsdl:operation>
          ...
        
        <binding ...  
        	<wsdl:operation name="myMethod">
        		<input>
        			<mime:multipartRelated> 
        				<mime:part>
        					<mime:content part="param1" type="image/jpeg"/>
        				</mime:part>
        			</mime:multipartRelated>
        		</input>
        		 ...
        	</wsdl:operation>
        
        Java: 
        
        void myMethod(java.awt.Image param1) ...  
        
        JAX-RPC 仕様は、以下の MIME タイプのサポートを必要とします。
        MIME タイプ Java 型
        image/gif java.awt.Image
        image/jpeg java.awt.Image
        text/plain java.lang.String
        multipart/* javax.mail.internet.MimeMultipart
        text/xml javax.xml.transform.Source
        application/xml javax.xml.transform.Source
    • wsdl:service のマッピング

      wsdl:service エレメントは、 生成されるサービス・インターフェースにマップされます。生成されるサービス・インターフェースには、 wsdl:service エレメント内の各ポートにアクセスするためのメソッドが組み込まれています。 生成されるサービス・インターフェースについては、JAX-RPC 仕様の 4.3.9 節、4.3.10 節、および 4.3.11 節に記載されています。

      また、wsdl:service エレメントは、生成されるサービス・インタ ーフェースのインプリメンテーションである、 インプリメンテーション固有の ServiceLocator クラスにマップされます。


WSDL メッセージと SOAP メッセージの間のマッピング

WSDL ファイルでは、 ネットワーク接続を介して送信される SOAP メッセージのフォーマットが定義されます。 WSDL2Java コマンドおよび WebSphere Application Server ランタイムは、 WSDL ファイル内の情報を使用して、SOAP メッセージが適切に直列化および非直列化されていることを確認します。

DOCUMENT と RPC、LITERAL と ENCODED の関係

wsdl:binding エレメントで、 メッセージが RPC フォーマットを使用して送信されることが示されている場合、 SOAP メッセージにはその操作を定義するエレメントが含まれます。 wsdl:binding エレメントで、メッセージが文書フォーマットを使用して送信されることが示されている場合、 SOAP メッセージには operation エレメントは含まれません。

wsdl:part エレメントが type 属性を使用して定義されている場合、 そのパートの名前と型がメッセージで使用されます。 wsdl:part エレメントが element 属性を使用して定義されている場合、 そのエレメントの名前と型がメッセージで使用されます。 use="encoded" の場合、element 属性は JAX-RPC 仕様ではサポートされません。

wsdl:binding エレメントで、メッセージがエンコードされることが示されている場合、 メッセージ内の値は xsi:type 情報と一緒に送信されます。 wsdl:binding エレメントで、メッセージがリテラルであることが示されている場合、 メッセージ内の値は一般に xsi:type 情報と一緒には送信されません。 以下に例を示します。
DOCUMENT/LITERAL
WSDL: 

<xsd:element name="c" type="xsd:int" />
<xsd:element name="method">
	<xsd:complexType>
		<xsd:sequence>
		<xsd:element name="a" type="xsd:string"/>
			<xsd:element ref="ns:c"/>
		</xsd:sequence>
	</xsd:complexType>
</xsd:element>
...
	<wsdl:message name="request">	
				<part name="parameters" element="ns:method"/> 
	</wsdl:message>
	... 
	<wsdl:operation name="method" > 
		<input message="request" /> 
	...

Message:
<soap:body>
		<ns:method> 
	<a>ABC</a>
	<c>123</a>
		<ns:method> 
</soap:body>
RPC/ENCODED
WSDL: 
<xsd:element name="c" type="xsd:int" />

...
	<wsdl:message name="request">	
		<part name="a" type="xsd:string" />
		<part name="b" element="ns:c" />
	</wsdl:message>
	... 
	<wsdl:operation name="method" > 
		<input message="request" />
	...

Message:
<soap:body>
		<ns:method> 
			<a xsi:type="xsd:string">ABC</a>
			<element attribute is not allowed in rpc/encoded mode> 
		</ns:method>
	</soap:body>
 
DOCUMENT/LITERAL  not wrapped 
WSDL: 
<xsd:element name="c" type="xsd:int" />

...
	<wsdl:message name="request">	
		<part name="a" type="xsd:string" />
		<part name="b" element="ns:c" />
	</wsdl:message>
	... 
	<wsdl:operation name="method" > 
		<input message="request" />

...

Message:
<soap:body>
		<a>ABC</a>
		<c>123</a>
</soap:body>



関連概念
Web Services-Interoperability Basic Profile
関連タスク
JAX-RPC アプリケーション用の WSDL ファイルの開発
関連資料
JAX-RPC アプリケーションの Java2WSDL コマンド
JAX-RPC アプリケーション用の WSDL2Java コマンド
複数パーツ WSDL のベスト・プラクティス
Web サービス: 学習用リソース
参照トピック    

ご利用条件 | フィードバック

最終更新: Jan 21, 2008 7:44:53 PM EST
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.nd.doc/info/ae/ae/rwbs_map.html