複合タイプの使用
WSIF は、ユーザー定義の複合タイプを Java™ クラスにマッピングすることにより、 ユーザー定義の複合タイプをサポートします。 このマッピングは手動でまたは自動で指定できます。
このタスクについて
手動マッピングに使用される WSIFService mapType および mapPackage の各メソッドへの呼び出しにより、 自動的に生成される同等のマッピング情報がオーバーライドされます。 このオーバーライドにより後方互換性が維持され、あまり一般的ではないマッピングも使用できるようになります。
手順
- 複合タイプを手動でマップします。
これらのマッピングを手動で作成するときに使用するメソッドは、プロバイダーによって異なります。 Java プロバイダーおよび EJB プロバイダーの場合、 マッピングはバインディング・エレメント内の Web サービス記述言語 (WSDL) ファイルで指定されます。 以下に、マッピングを指定するための構文の例を示します。
<binding .... > <ejb:binding|java:binding/> <format:typeMapping style="Java" encoding="Java"/>? <format:typeMap typeName="qname" formatType="nmtoken"/>* </format:typeMapping> ... </binding>
この例では、次のようになっています。- 疑問符 (「?」) は「オプション」を意味し、 アスタリスク (「*」) は「0 以上」を意味します。
- format:typeMap typeName 属性は、 オペレーションの 1 つで使用する複合タイプまたは単純タイプの修飾名です。
- format:typeMap formatType 属性は、typeName によって指定されるエレメントのマップ先となる Java クラスの完全修飾クラス名です。
Apache SOAP プロバイダーを使用する場合、 Java クラスへの複合タイプのマッピングは、 org.apache.wsif.WSIFService インターフェースの以下の 2 つのメソッドを使用してクライアント・コードで指定します。
public void mapType(QName elementType, Class javaType)
および
public void mapPackage(String namespaceURI, String packageName)
mapType メソッドを使用して、XML スキーマ・ エレメントと Java クラスとの間のマッピングを指定します。 メソッドは、複合タイプまたは単純タイプを表す QName、 およびマップ先の対応する Java クラスを使用します。
mapPackage メソッドを使用して、 名前空間と Java パッケージの間でより汎用的なマッピングを指定します。 名前空間がマッピングの名前空間と一致するカスタム、複合、または単純の各タイプは、 対応するパッケージ内で Java クラスにマップされます。 クラスの名前は、 Java 命名規則に従って、標準 XML を使用する複合タイプの名前から派生します。
- 複合タイプを自動でマップします。
WSDL で 定義されている複合タイプの場合 (このタイプを Java で表現するために、 生成された Bean が使用されます)、Web Services Invocation Framework (WSIF) プログラミング・モデルでは 、WSIFService.mapType() メソッドへの呼び出しが必要になります。 この呼び出しにより、QName で識別された XML スキーマ・タイプを表す Bean のパッケージ名とクラス名が WSIF に通知されます。処理を容易にするために、WSIFService.mapPackage() メソッドには、 これをワイルドカードで指定する仕組みが用意されています。 ワイルドカードを使用した場合、指定したパッケージ内のすべてのクラスが QName の 名前空間にマップされます。 これは、XML スキーマ・タイプを Java クラスに手動でマップし、 再度逆方向にマップするための仕組みです (1 つのマッピング・エントリーで 双方向のマッピングが提供されます)。
XML スキーマ・タイプ名を表す QName を Java パッケージ名とクラスに変換するには、 数多くの方法があります。 この自動タイプ・マッピングを使用可能にするには、 次のように、WSIFServiceFactory インスタンスに WSIF_FEATURE_AUTO_MAP_TYPES フィーチャーを設定します。
WSIFServiceFactory factory = WSIFServiceFactory.newInstance(); factory.setFeature(WSIFConstants.WSIF_FEATURE_AUTO_MAP_TYPES, new Boolean(true));
WSIF は、XML スキーマ・タイプ QName の URI 部分をパッケージ名に変換し、ローカル部分をクラス名に変換することによって、タイプをマップします。 WSIF は、WSIFUtils メソッドの getPackageNameFromNamespaceURI および getJavaClassNameFromXMLName を使用してこのようなマッピングを行います。


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twsf_comt
ファイル名:twsf_comt.html