ヘッダーをスキップ
Oracle Application Server Web Servicesアドバンスト開発者ガイド
10g(10.1.3.1.0)
B31869-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

H Java型のXMLおよびWSDL型へのマッピング

この付録では、Oracle Application Server Web ServicesでJava型とXML型をマッピングする方法を説明しています。

Java型のXML型へのOracleAS Web Servicesのマッピング方法

表H-1に、OracleAS Web Servicesで実行できるJavaデータ型とXMLデータ型の間のマッピングを説明します。

たとえば、java.lang.Stringxsd:string XMLデータ型にマッピングされます。すべてのJava型をメソッド・パラメータまたは戻り型として使用できるわけではないことに注意してください。

document-literalおよびrcp-literal書式の名前空間は、xsd接頭辞を使用し、次のように定義されています。

xmlns:xsd="http://www.w3.org/2001/XMLSchema"

rpc-encoded書式のSOAP 1.1名前空間は、soap-enc接頭辞を使用し、次のように定義されています。

xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding

表H-1 Java型のXML型へのマッピング

Java型 XML型: rpc-literal/document-literal XML型: rpc-encoded

java.lang.Boolean

xsd:boolean

soap-enc:boolean

java.lang.Byte

xsd:byte

soap-enc:byte

java.lang.Double

xsd:double

soap-enc:double

java.lang.Float

xsd:float

soap-enc:float

java.lang.Integer

xsd:integer

soap-enc:integer

java.lang.Long

xsd:long

soap-enc:long

java.lang.Short

xsd:short

soap-enc:short

java.lang.String

xsd:string

xsd:string

java.math.BigDecimal

xsd:decimal

xsd:decimal

java.math.BigInteger

xsd:int

xsd:int

java.net.URI

xsd:anyURI

xsd:anyURI

java.util.Calendar

xsd:dateTime

xsd:dateTime

java.util.Date

xsd:dateTime

xsd:dateTime

java.xml.QName

xsd:QName

xsd:QName


ボトムアップ方式でのマッピングにおけるJava NULL値の使用方法

Java null値からXML nil値へのマッピングに依存しないことをお薦めします。RPCの場合には、特別な注意が必要です。

  • rpc-literalメッセージ書式では、nullパラメータ値はnil値にマッピングできません。

  • rpc-encodedメッセージ書式では、SOAP-encoded型値はnilに保持されます。

  • 値タイプ(JavaBean)がパラメータとして使用されるすべての場合において、Java null値を使用しないでください。


関連資料:

Java null値の使用方法の詳細は、第1章「相互運用可能なWebサービスの実現」を参照してください。


プリミティブJava型のXML型へのOracleAS Web Servicesのマッピング方法

表H-2に、OracleAS Web Servicesで実行できるプリミティブJava型とXML型の間のマッピングを説明します。XML型列にリストされている型は、rpc-encoded、rpc-literalおよびdocument-literal書式に適用されます。

表H-2 プリミティブJava型のXML型へのマッピング

Javaプリミティブ型 XML型

boolean

xsd:boolean

byte

xsd:byte

double

xsd:double

float

xsd:float

int

xsd:int

long

xsd:long

short

xsd:short


Java値タイプに対するOracleAS Webサービスのサポート方法

Java値タイプには多数の属性を含めることができます。次のリストでは、Java値タイプに対応するJavaクラスの要件を説明します。

Java値タイプのスキーマ型としての表現方法

Java値タイプはスキーマ型で表すことができます。Java値タイプに対応するスキーマ型には、次のような一般的な形式があります。

<complexType name="classname of the value type">
  <sequence>
     ...attributes...
  </sequence>
</complexType>

配列マッピングに対するOracleAS Webサービスのサポート方法

次の各項では、OracleAS Web Servicesで配列をマッピングする方法を説明します。

すべてのメッセージ書式

バイト配列は特別なケースです。Java型byte[]は、document-literal、rpc-literalおよびrpc-encoded書式のXML型xsd:base64Binaryにマッピングされます。

document-literalおよびrpc-literal書式

表H-3に、rpc-literalおよびdocument-literal書式のサポートされている型のメンバーを使用して、OracleAS Web Servicesでは配列がどのようにマッピングされているかの例を示します。たとえば、int型の要素を含む配列は、minOccursおよびmaxOccurs属性を持つXML型xsd:intにマッピングされます。表H-1に、rpc-literalおよびdocument-literal書式のサポートされている型マッピングをリストします。


注意:

バイト配列はサポートされている型のリストには該当しません。バイト配列のXML型マッピングは、表H-4で説明します。

表H-3 Java型を含む配列からdocument-literalおよびrpc-literalのXML型へのマッピング

Java型 XML型: rpc-literal/document-literal XML型のその他のプロパティ

int[]

xsd:int

minOccurs="0"、maxOccurs="unbounded"

String[]

xsd:string

minOccurs="0"、maxOccurs="unbounded"


現在のリリースでは、Double[][]などのマルチディメンション配列は、document-literalまたはrpc-literal書式ではサポートされていません。ただし、Java値タイプに配列をラップして、これらの値タイプの配列を使用することでこの制限を回避することは可能です。


関連資料:

Java値タイプの要件の詳細は、「Java値タイプに対するOracleAS Webサービスのサポート方法」を参照してください。この項で説明されている、値タイプの名前に関する制限に注意してください。


rpc-encoded書式

rpc-encoded書式の場合、サポートされている型のメンバーを含む配列に対するマッピングがJAX-RPCにより定義されています。表H-1に、rpc-encodedのサポートされている型をリストします。


注意:

バイト配列はサポートされている型のリストには該当しません。バイト配列のXML型マッピングは、表H-4で説明します。

例H-1に、WSDLがString[]配列をどのように表すかを示します。String[]配列は、WSDL構造wsdl:arrayTypeのターゲットです。ここで、wsdlはWSDL 1.1スキーマ接頭辞の名前空間です。この名前空間は次のように定義されています。

xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"

例H-1 rpc-encoded書式の文字列の配列のWSDL定義

<complexType name="ArrayOfString">
  <complexContent>
    <restriction base="soap-enc:Array">
      <attribute ref="soap-enc:arrayType" wsdl:arrayType="string[]"/>
    </restriction>
  </complexContent>
</complexType>

例H-2に、マルチディメンション配列の定義を示します。前述の例で定義されている文字列の配列(ArrayofString[])は、文字列の配列を含む配列を作成するために、wsdl:arrayType="tns:ArrayofString[]"属性(太字で強調)で使用されます。tnsは、ローカルの名前空間を定義するWSDL構造です。

例H-2 文字列の配列のマルチディメンション配列のWSDL定義

<complexType name="ArrayOfArrayOfString">
  <complexContent>
    <restriction base="soap-enc:Array">
      <attribute ref="soap-enc:arrayType" wsdl:arrayType="tns:ArrayOfString[]"/>
    </restriction>
  </complexContent>
</complexType>

Java CollectionクラスのXML型へのOracleAS Web Servicesのマッピング方法

表H-4および表H-5に、Java Collectionデータ型とMapデータ型、およびOracleAS Web ServicesでサポートされているXML型の間のマッピングを説明します。これはOracle独自のマッピングで、別のベンダーによってサポートされているデータ型との互換性がない可能性があります。


関連資料:

これらの型の定義方法の詳細は、「Oracle独自のコレクション・データ型の定義」を参照してください。


OracleAS Web Servicesでは、CollectionおよびMapデータ型をネストできます。たとえば、CollectionCollection内の項目として指定できます。

Java CollectionおよびMapデータ型は、rpc-literal、document-literalおよびrpc-encoded書式でサポートされています。これらのデータ型は、これらの書式と同じXML型にマッピングされます。Oracle独自のコレクション型では、次に示す、rpc-literalおよびdocument-literal書式の独自の名前空間が使用されます。

xmlns:owi="http://www.oracle.com/webservices/internal/literal"

Oracle独自のコレクション型では、次に示す、rpc-encoded書式の独自の名前空間が使用されます。

xmlns:owi="http://www.oracle.com/webservices/internal"

表H-4 Java CollectionクラスのXML型へのマッピング

Java型 Javaクラス(java.util) XML型

Collectionクラス:

Collection

owi:collection


List

owi:list


ArrayList

owi:arrayList


LinkedList

owi:linkedList


Stack

owi:stack


Vector

owi:vector

Setクラス:

Set

owi:set


HashSet

owi:hashSet


TreeSet

owi:treeSet

Mapクラス:

Map

owi:map


HashMap

owi:hashmap


Hashtable

owi:hashtable


Properties

owi:properties


TreeMap

owi:treemap


CollectionおよびMapデータ型の使用の制限事項

この項では、OracleAS Web ServicesにおけるCollectionおよびMapデータ型の使用の制限事項を説明します。

  • java.lang.Objectのインスタンスを表すXMLスキーマ構造がないため、CollectionまたはMapではjava.lang.Objectのインスタンスを使用できません。

  • Collectionでビルトイン型ではないインスタンス(Beansなど)を使用した場合には、それらのインスタンスに対してスキーマを生成する必要があります。このトピックの詳細は、『Oracle Application Server Web Services開発者ガイド』の「Oracle固有の型のサポート」を参照してください。

  • J2SE 5.0では、CollectionおよびMapをパラメータ化できます。たとえば、Collection<Integer>のようになります。ただし、OracleAS Web Servicesではパラメータ化型のメタデータは生成されたスキーマに保持されないため、WebServicesAssemblerによって生成されたコードでは、パラメータ化されたCollectionおよびMapはサポートされていません。

次の制限事項は、document-literalおよびrpc-literalメッセージ書式を使用している場合に、CollectionおよびMapデータ型に適用されます。

  • シリアライズおよびデシリアライズ間では、オブジェクト・グラフ構造は保持されません。オブジェクト・グラフ使用時の制限事項の詳細は、「オブジェクト・グラフ」を参照してください。

  • 再帰的または循環参照構造はエラーの原因になります。これは、次のコード・サンプルに示されています。

    // the following lines of code will return an error
    ArrayList a = new ArrayList();
    a.add(a);
    

    次のコード・サンプルに、ObjectCollection要素としてサポートされていない様子を示します。

    // the following lines of code will return an error
    ArrayList a = new ArrayList();
    a.add(new Object());
    

Oracle独自のコレクション・データ型の定義

表H-5に、コレクションに対してOracle独自のXML型がどのように定義されているかの詳細を示します。

表H-5 Oracle独自のXML型に関する追加の情報

独自のXML型 XML型に関する追加の情報

owi:collection

次に、rpc-literalおよびdocument-literal書式のowi:collection型のXMLスキーマ型を示します。rpc-encoded書式の型定義を作成するために、type="anyType"が型xsd:anyTypeの配列と置き換えられています。例H-1に、データ型の配列作成の例があります。

<complexType name="collection">
  <sequence>
    <element name="item" type="anyType" minOccurs="0" maxOccurs="unbounded"/>
  </sequence>
</complexType>

owi:list

owi:collectionの単純な拡張です。

owi:arrayList

owi:listの単純な拡張です。

owi:linkedList

owi:listの単純な拡張です。

owi:stack

owi:listの単純な拡張です。

owi:vector

owi:listの単純な拡張です。

owi:set

owi:collectionの単純な拡張です。

owi:hashSet

owi:setの単純な拡張です。

owi:treeSet

owi:setの単純な拡張です。

owi:map

次に、rpc-literalおよびdocument-literal書式のowi:map型のXMLスキーマ型を示します。rpc-encoded書式の型定義を作成するために、type="owi:mapEntryowi:mapEntryの配列と置き換えられています。例H-1に、データ型の配列作成の例があります。

<complexType name="map">
  <sequence>
    <element name="mapEntry" type="owi:mapEntry"
             minOccurs="0" maxOccurs="unbounded"/>
  </sequence>
</complexType>

前述のコード・サンプルで使用されているowi:mapEntry型には、次の定義があります。

<complexType name="mapEntry">
  <sequence>
    <element name="key" type="anyType"/>
    <element name="value" type="anyType"/>
  </sequence>
</complexType>

owi:hashMap

owi:mapの単純な拡張です。

owi:hashtable

owi:mapの単純な拡張です。

owi:properties

owi:mapの単純な拡張です。

owi:treeMap

owi:mapの単純な拡張です。


バージョン3.0 EJBのJ2SE 5.0 CollectionおよびMapデータ型のマッピング

J2SE 5.0では、List<User>およびMap<Integer, Bean>などのCollectionおよびMapデータ型をパラメータ化できます。バージョン3.0 EJB Web Services実装のパラメータCollectionまたはMapデータ型を使用して、デプロイ時にサービスのWSDLを生成する場合、これらの型はWSDLで明確な表現を持ちます。


注意:

この項で説明する汎用型のマッピングは、WSDLをデプロイ時に生成した場合、バージョン3.0 EJBでアセンブルしたWebサービスでのみ有効です。

生成したWSDLでは、パラメータCollection型は、xsd:anyTypeではなく、繰り返される一連の要素の特定のアイテム型として表現されます。たとえば、次のパラメータCollection型を使用するバージョン3.0 EJBでWebサービスをアセンブルするとします。

ListOfUsers java.util.List<mypackage.User>

例H-3に、ListOfUsers型のスキーマ表現を示します。この場合、WSDLをデプロイ時に生成するとします。

例H-3 パラメータCollectionデータ型のスキーマ表現

...
<complexType name="ListOfUsers">
  <sequence>
    <element maxOccurs="unbounded" minOccurs="0" name="item"
    type="tns:User"/>
  </sequence>
</complexType>
...

同様に、パラメータMap型は、繰り返される一連の要素の特定のマップ・エントリ型として表現されます。たとえば、次のパラメータMap型を使用するバージョン3.0 EJBでWebサービスをアセンブルするとします。

MapOfIntToBean java.util.Map<java.lang.Integer, mypackage.Bean>

例H-4に、MapOfIntToBean型のスキーマ表現を示します。この場合、WSDLをデプロイ時に生成するとします。

例H-4 パラメータMapデータ型のスキーマ表現

...
<complexType name="MapOfIntToBean">
  <sequence>
    <element maxOccurs="unbounded" minOccurs="0" name="mapEntry"
    type="tns:MapEntryOfIntToBean"/>
  </sequence>
</complexType>

<complexType name="MapEntryOfIntToBean">
  <sequence>
    <element name="key" type="int"/>
    <element name="value" type="tns:Bean"/>
  </sequence>
</complexType>
...

Java Beanコンポーネントに対するOracleAS Webサービスのサポート方法

JavaBeansには、任意の数のプロパティを含めることができます。各プロパティには、getterおよびsetterメソッドを含める必要があります。プロパティは、サポートされているJava型に属する必要があります。