この付録では、Oracle Application Server Web ServicesでJava型とXML型をマッピングする方法を説明しています。
表H-1に、OracleAS Web Servicesで実行できるJavaデータ型とXMLデータ型の間のマッピングを説明します。
Java型列には、OracleAS Web Servicesが認識するサポートされているJava型がリストされています。
XML型: rpc-literal/document-literal列には、Java型、および対応するrpc-literalとdocument-literal書式のXML型の間のマッピングがリストされています。
XML型: rpc-encoded列には、Java型および対応するrpc-encoded書式の間のマッピングがリストされています。
たとえば、java.lang.String
はxsd: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 |
表H-2に、OracleAS Web Servicesで実行できるプリミティブJava型とXML型の間のマッピングを説明します。XML型列にリストされている型は、rpc-encoded、rpc-literalおよびdocument-literal書式に適用されます。
Java値タイプには多数の属性を含めることができます。次のリストでは、Java値タイプに対応するJavaクラスの要件を説明します。
Javaクラスには空のパブリック・コンストラクタが必須です。
Javaクラスにはjava.rmi.Remote
は実装できません。
Javaクラスにはサポートされている型の属性を含める必要があります。
属性はfinal
またはtransient
のpublicフィールドです。
属性はpublicのget
terおよびset
terメソッドで表すことができます。
Javaクラスに単一の配列値属性(int[]
またはString[]
など)が含まれる場合、クラス名にArrayという語を含めることはできません。クラスをAry、Listまたは類似する名前に変更する必要があります。
次の各項では、OracleAS Web Servicesで配列をマッピングする方法を説明します。
バイト配列は特別なケースです。Java型byte[]
は、document-literal、rpc-literalおよびrpc-encoded書式のXML型xsd:base64Binary
にマッピングされます。
表H-3に、rpc-literalおよびdocument-literal書式のサポートされている型のメンバーを使用して、OracleAS Web Servicesでは配列がどのようにマッピングされているかの例を示します。たとえば、int
型の要素を含む配列は、minOccurs
およびmaxOccurs
属性を持つXML型xsd:int
にマッピングされます。表H-1に、rpc-literalおよびdocument-literal書式のサポートされている型マッピングをリストします。
表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書式の場合、サポートされている型のメンバーを含む配列に対するマッピングがJAX-RPCにより定義されています。表H-1に、rpc-encodedのサポートされている型をリストします。
例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-4および表H-5に、Java Collection
データ型とMap
データ型、およびOracleAS Web ServicesでサポートされているXML型の間のマッピングを説明します。これはOracle独自のマッピングで、別のベンダーによってサポートされているデータ型との互換性がない可能性があります。
OracleAS Web Servicesでは、Collection
およびMap
データ型をネストできます。たとえば、Collection
をCollection
内の項目として指定できます。
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 |
この項では、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);
次のコード・サンプルに、Object
がCollection
要素としてサポートされていない様子を示します。
// the following lines of code will return an error ArrayList a = new ArrayList(); a.add(new Object());
表H-5に、コレクションに対してOracle独自のXML型がどのように定義されているかの詳細を示します。
表H-5 Oracle独自のXML型に関する追加の情報
独自のXML型 | XML型に関する追加の情報 |
---|---|
owi:collection |
次に、rpc-literalおよびdocument-literal書式の
<complexType name="collection">
<sequence>
<element name="item" type="anyType" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
|
owi:list |
|
owi:arrayList |
|
owi:linkedList |
|
owi:stack |
|
owi:vector |
|
owi:set |
|
owi:hashSet |
|
owi:treeSet |
|
owi:map |
次に、rpc-literalおよびdocument-literal書式の
<complexType name="map">
<sequence>
<element name="mapEntry" type="owi:mapEntry"
minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
前述のコード・サンプルで使用されている <complexType name="mapEntry"> <sequence> <element name="key" type="anyType"/> <element name="value" type="anyType"/> </sequence> </complexType> |
owi:hashMap |
|
owi:hashtable |
|
owi:properties |
|
owi:treeMap |
|
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> ...