WebSphere Enterprise Service Bus for z/OS バージョン 6.2.0 オペレーティング・システム: z/OS


単純タイプへの AnySimpleType の使用

SDO API による AnySimpleType の処理は、他のいずれの単純タイプ (string、int、boolean など) とも異なる点はありません。

anySimpleType が他の単純タイプと異なるのは、そのインスタンス・データとシリアライゼーション/デシリアライゼーションだけです。これらはビジネス・オブジェクトの内部だけの概念にすべきであり、フィールドへまたはフィールドからマップされるデータが有効であるかどうかを判別するために使用してください。string タイプに対して set(...) メソッドを呼び出す場合は、最初にデータがストリングに変換され、元のデータ・タイプは失われます。

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
	targetNamespace="http://StringType">
  <xsd:complexType name="StringType">
    <xsd:sequence>
      <xsd:element name="foo" type="xsd:string"/>
	</xsd:sequence>
  </xsd:complexType>
</xsd:schema>

	DataObject stringType = ...

	// データを String に設定する
	stringType.set("foo", "bar");

	// インスタンス・データは、データ・セットに関係なく、
	// 常に String タイプになる
	// 「java.lang.String」を表示する
	System.out.println(stringType.get("foo").getClass().getName());

	// データを Integer に設定する
	stringType.set("foo", new Integer(42));

	// インスタンス・データは、データ・セットに関係なく、
	// 常に String タイプになる
	// 「java.lang.String」を表示する
	System.out.println(stringType.get("foo").getClass().getName());

その代わり、anySimpleType は設定される元のデータ・タイプを失いません。

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
	targetNamespace="http://AnySimpleType">
  <xsd:complexType name="AnySimpleType">
    <xsd:sequence>
      <xsd:element name="foo" type="xsd:anySimpleType"/>
	</xsd:sequence>
  </xsd:complexType>
</xsd:schema>

	DataObject anySimpleType = ...

	// データを String に設定する
	stringType.set("foo", "bar");

	// インスタンス・データは常に、set 内で使用される日付のタイプになる
	// 「java.lang.String」を表示する
	System.out.println(stringType.get("foo").getClass().getName());

	// データを Integer に設定する
	stringType.set("foo", new Integer(42));

	// インスタンス・データは常に、set 内で使用される日付のタイプになる
	// 「java.lang.Integer」を表示する
	System.out.println(stringType.get("foo").getClass().getName());

このデータ・タイプも、シリアライゼーションおよびデシリアライゼーションをまたがっても、xsi:type によって保存されます。したがって、anySimpleType エレメントをシリアライズするときはいつでも、その Java™ タイプに基づいた SDO 仕様で定義されているものに一致する xsi:type が存在します。

次の例では、データが以下のようになるよう、上記のビジネス・オブジェクトをシリアライズします。

<?xml version="1.0" encoding="UTF-8"?>
<p:StringType xsi:type="p:StringType"
 xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
 xmlns:xsd=http://www.w3.org/2001/XMLSchema 
 xmlns:p="http://StringType">
  <foo xsi:type="xsd:int">42</foo>
<p:StringType></p:StringType>

xsi:type は、デシリアライゼーションのときに、データを適切な Java インスタンス・クラスとしてロードするために使用されます。xsi:type が指定されていない場合、デフォルトのデシリアライゼーション・タイプは string になります。

他の単純タイプの場合、マップ可能性の判別は常に一定です。例えば、boolean は常に string にマップできます。しかし、AnySimpleType には任意の単純タイプを含めることができるので、フィールド内のインスタンス・データによって、マッピングが可能な場合とそうでない場合があります。

プロパティーが anySimpleType タイプであるかどうかを判別するには、プロパティー Type の URI と Name を使用します。それらは、「commonj.sdo」と「Object」になります。anySimpleType に挿入しても有効なデータかどうかを判別するには、それが DataObject のインスタンスでないかどうかを調べます。String として表現でき、DataObject でないすべてのデータは、anySimpleType フィールド内に設定できます。

したがって、以下のマッピング・ルールが導出されます。


concept 概念トピック

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


タイムスタンプ・アイコン 最終更新: 2010/07/05


http://publib.boulder.ibm.com/infocenter/dmndhelp/v6r2mx/topic//com.ibm.websphere.wesb620.zseries.doc/doc/cbo_usinganysimpl.html
Copyright IBM Corporation 2005, 2010. All Rights Reserved.
このインフォメーション・センターでは Eclipse テクノロジーが採用されています (http://www.eclipse.org)。