JAX-RPC アプリケーション用の CustomBinder インターフェース
WebSphere® Application Server には、Java™ API for XML-based Remote Call Procedure (JAX-RPC) アプリケーションが特定の XML スキーマ・タイプの具象カスタム・データ・バインダーを提供できるようにするために実装可能な、CustomBinder インターフェースが定義されています。
CustomBinder インターフェースには、deserialize および serialize メソッドのほかに、以下の 3 つのプロパティーがあります。 これらのプロパティーは、XML スキーマ・タイプの QName、QName 有効範囲、およびスキーマ・タイプがマップされる Java タイプです。 これらのプロパティーは、対応する getter メソッドを介してアクセス可能です。
getQName
getQName メソッドは、ターゲット XML スキーマ・タイプの QName を戻します。 カスタム・データ・バインダーは、ルート・レベルのスキーマ・タイプのみを扱います。
匿名の型の場合、getQName メソッドは、これらを含んでいるエレメントの QName を戻します。
名前付きの型の場合、getQName メソッドは、complexType または simpleType の QName を戻します。
getQNameScope
getQNameScope メソッドは、スキーマ・タイプが名前付きの型か、匿名の型かを示すバインダーの qnameScope プロパティーを戻します。 qnameScope プロパティー値は、<xsd:complexType> に対しては complexType、 <xsd:simpleType> に対しては simpleType、匿名の型を使用して定義された <xsd:element> に対しては element となります。
<xsd:element name="data1">
<xsd:complexType>
...
</xsd:complexType>
</xsd:element>
<xsd:element name= "data2" type="data2Type"/>
<xsd:complexType name="data2Type">
...
</xsd:complexType>
匿名の型である data1 には、element の qNameScope と data1 の qName があります。
型 data2Type には、complexType の qNameScope と data2Type の qName があります。エレメント data2 は、カスタム・データ・バインダー内に示されていません。 カスタム・データ・バインダーは、型のみを処理し、エレメントは処理しません。
getJavaName
getJavaName メソッドは、名前付きの型または匿名の型にマップされた Java タイプの完全修飾されたクラス名を戻します。このクラスは、インターフェースまたは具象クラスになります。 deserialize メソッドから戻されたオブジェクトには、getJavaName メソッドによって戻された Java タイプと互換性のあるタイプがあります。
serialize
serialize メソッドは、カスタム・データ・バインダーが Java オブジェクトから作成する SOAPElement を戻します。この Java オブジェクトはランタイム・システムから渡され、getJavaName メソッドから戻されるものとの一致が期待されます。 SOAPElement パラメーターには子エレメントがありませんが、有効な QName があります。 このパラメーターは、バインダーが最終の SOAPElement を作成するための参照です。
ほとんどの場合、バインダー実装は、ルートの SOAPElement に子エレメントを追加します。 ランタイム・システムは、SOAPElement QName が正しいことを保証します。 このため、名前付きの型のカスタム・データ・バインダーは、ルート・エレメントの QName を保持します。これは、バインダーが外側のエレメントを認識していないためです。 匿名の型のバインダー実装では、定義されたスキーマ・タイプと一致する QName を、戻された SOAPElement に常に含める必要があります。 WebSphere Application Server は、CustomBindingContext パラメーター内に具象メソッドを持ちません。
deserialize
deserialize メソッドは、カスタム・データ・バインダーが、渡されたルート SOAPElement から作成する Java オブジェクトを戻します。戻された Java オブジェクトのオブジェクト・タイプは、getJavaName メソッドから戻されたものと一致する必要があります。パラメーターの serialize メソッドと異なり、渡された SOAPElement には、必要な名前空間宣言とともに元の XML データが含まれています。
以下に SDO DataGraph バインダーの実装例を示します。ここでは、convertToSDO および convertToSAAJ ユーティリティー・メソッドが、SOAPElement と SDO オブジェクト間で変換されます。
package test.sdo.binder;
import javax.xml.namespace.QName;
import javax.xml.soap.SOAPElement;
import com.ibm.wsspi.webservices.binding.CustomBinder;
import com.ibm.wsspi.webservices.binding.CustomBindingContext;
public class DataGraphBinder implements CustomBinder {
public QName getQName() {
return new QName("commonj.sdo", "DataGraphyType");
}
public String getJavaName() {
return CustomBinder.QNAME_SCOPE_COMPLEXTYPE;
}
public String getJavaName() {
return commonj.sdo.DataGraph.class.getName();
}
public javax.xml.soap.SOAPElement serialize(
Object bean,
SOAPElement rootNode,
CustomBindingContext context)
throws javax,xml.soap.SOAPException {
// convertToSAAJ is a utility method to convert
// the SDO DataGraph to the SOAPElement
return convertToSAAJ(bean, rootNode);
public Object deserialize(
SOAPElement source,
CustomBindingContext context)
throws javax.xml.soap.SOAPException {
// convertToSDO is a utility method to convert
// the SOAPElement to the SDO DataGraph
return convertToSDO(source);
}
}
カスタム・データ・バインダーについて詳しくは、『JAX-RPC アプリケーションのカスタム・データ・バインダー』の情報を参照してください。 カスタム・データ・バインダーを開発用の WSDL2Java コマンド行ツールにプラグインする方法について学習するには、カスタム・バインディング・プロバイダーの情報を参照してください。