| Oracle® Fusion Middleware Oracle WebLogic Server WebLogic SCAアプリケーションの開発 11g リリース1 (10.3.6) B61414-05 |
|
![]() 前 |
![]() 次 |
この章では、サービスおよび参照用にWebサービス・バインディングを構成する方法について説明します。
使用アプリケーションのSpringアプリケーション・コンテキスト・ファイルの<binding.ws>要素で、Webサービス・バインディングを構成します。背景情報については次を参照してください。
WebLogic Spring SCAアプリケーション用のSpringアプリケーション・コンテキストの構成についての一般情報は、第6章「Springアプリケーション・コンテキストの構成」を参照してください。
<binding.ws>要素を定義するスキーマについては、付録A「WebLogic SCAバインディング・スキーマ(weblogic-sca-binding.xsd)」を参照してください。
Webサービス・バインディングはSCAサービスおよびSCA参照に適用できます。これは次のことを行います。
<binding.ws>要素を解析し、サービス・バインディングに対し、公開するサービスのWSDLを生成します。
サービス・バインディングに対し、"Plain Old Java Object"(POJO)をJava API for XML-Based Web Services(JAX-WS)として公開します。
公開されたサービスに対するリクエストを受け入れ、Webサービスに対する参照の起動を実行します。
サービスでのWebサービス・バインディングの例を例8-1に示します。
例8-1 サービスでのWebサービス・バインディング
<sca:service name="SCAService"
type="com.oracle.test.SayHello"
target="hello">
<wlsb:binding.ws"
name="mysvcname"
port="myportname"
uri="/mysvcnameuri"/>
</sca:service>
参照でのWebサービス・バインディングの例を例8-2に示します。
例8-2 参照でのWebサービス・バインディング
<sca:reference name="SCAReference" type="com.oracle.test.SayHelloRef">
<wlsb:binding.ws"
location="http://localhost:7001/wlscaapp/myrefsvcnameuri"
port="http://test.oracle.com#wsdl.endpoint(SCAService2/myrefportname)"/>
</sca:reference>
現在のアプリケーション外のサービスを参照する参照バインディングの場合、参照に使用されるコントラクト・クラスは、WebLogic clientgen AntタスクまたはOracle JDeveloperなどのクライアント・ツールを使用してWSDLから生成されることが想定されます。
|
注意: コントラクト・クラスがJAX-WS互換クライアント・ツールから生成されない場合、特定のタイプの機能は正しく動作しないことがあります。 |
sca:referenceのtype属性で指定されるタイプは、JAX-WS wsimportツール、WebLogic clientgen Antタスク、Oracle JDeveloperまたはOracle Enterprise Pack for Eclipse(OEPE)などのJAX-WS互換クライアント生成ツールを使用して、外部WSDLから生成されたJAX-WS互換インタフェースである必要があります。
<binding.ws>要素の属性は次のとおりです。
databinding
オプション。SOAPメッセージをJavaとの間で変換するのに使用するデータバインディングのタイプを指定します。有効な値は次のとおりです。
toplink.jaxb(デフォルト)
データバインディングがEclipseLink 2.0からのTopLink/EclipseLink JAXB(JAXB2)を使用することを指定します。これらのテクノロジの詳細は、『Oracle® Fusion Middleware Oracle TopLink開発者ガイド』および「EclipseLink」(http://www.eclipse.org/eclipselink/)を参照してください。
toplink.sdo - Toplink/EclipseLink SDO from EclipseLink 2.0
データバインディングがEclipseLink 2.0からのToplink/EclipseLink Service Data Objects(SDO)を使用することを指定します。EclipseLink(http://www.eclipse.org/eclipselink/)を参照してください。
データバインディングのタイプにより、binding.wsの<property>サブ要素を使用する必要がある場合もあります。次を参照してください。
glassfish.jaxb
データバインディングがJava Architecture for XML Binding 2.x (JAXB2) Reference Implementation(JAXB RI)を使用することを指定します。JAXB RIの詳細は、http://jaxb.java.net/で「Glassfish」>「Metro」>「JAXB」を参照してください。
location
sca:referenceバインディングの場合のみ必須。外部参照を見つけることのできる場所(つまりURL)を指定します。WSDLはこの場所に?wsdlを追加することで使用可能にする必要があります。
name
オプション。バインディングの名前を指定します。
sca:serviceバインディングの場合、この名前はWSDLのサービス名として公開されます。これはsca:service要素のname属性に指定された名前をオーバーライドします。
port
sca:serviceバインディングの場合オプション。サービス・エンドポイントに使用するポート名を指定します。
sca:referenceバインディングの場合必須。この参照が外部Webサービスで指すWSDLポートを指定します。
これはnamespace uri#wsdl.endpoint(servicename/portname)という形式である必要があります。
soapversion
オプション。WebサービスのSOAPバージョンを指定します。有効な値は1.1および1.2です。デフォルトは1.1です。
uri
sca:serviceバインディングの場合のみ必須。WebサービスがこのSCAサービスに対して公開される必要のある場所を、SCAアプリケーションのコンテキスト・ルートに対し相対的に指定します。
<binding.ws>要素は次のサブ要素を含むことができます。
<binding.ws>の<PolicyReference>サブ要素は、使用するセキュリティ・ポリシーへの参照を指定します。次の属性が含まれます。
uri
ポリシーの場所を指定します。このリリースでは組込みのWebLogic Serverセキュリティ・ポリシーだけがサポートされます。
direction
オプション。ポリシーがinbound、outboundまたはbothのいずれであるかを指定します。デフォルトはbothです。
PolicyReference要素を使用したセキュリティ・ポリシーの構成の詳細は、「セキュリティの構成」を参照してください。
<binding.ws>の<property>サブ要素には、次のプロパティ名を受け入れるname属性があります。
weblogic.sca.binding.ws.sdoSchemaFile
SDOバインディングのスキーマ・ファイルの場所を指定します。「TopLink/EclipseLink SDOデータバインディングの構成」を参照してください。
weblogic.sca.binding.ws.externalCustomizationFile
外部データバインディング・カスタマイズXMLファイルを指定します。「カスタム・データバインディングの構成」を参照してください。
weblogic.sca.binding.ws.referenceWsdlCacheTimeoutMins
参照の起動時にWSDLキャッシュを構成します。キャッシュを有効にし、キャッシュのタイムアウト期間を指定するには、分数を示す正の数値を指定します。WSDLキャッシュを無効にするには、ゼロまたは負の数値を指定します。このプロパティを指定しないと、キャッシュは有効になり、タイムアウトはデフォルトの60(分)になります。
<PolicyReference>要素を使用して、Webサービス・バインディングのセキュリティ・ポリシーを構成します。「PolicyReference要素」も参照してください。
次のセキュリティ・メカニズムがサポートされます。supported:
メッセージ保護付きユーザー名トークン(WS-Security 1.1)
メッセージ保護付きX509証明書認証 (WS-Security 1.1)
メッセージ保護付き匿名(WS-Security 1.1)
メッセージ保護付きSAMLトークン(送信者保証)を使用したID伝播 (WS-Security 1.1)
SSLを使用したユーザー名トークン
SSLを使用したSAMLトークン(送信者保証)
SCAサービス用のセキュリティ構成の例を例8-3に示します。
例8-3 セキュリティ構成の例
<sca:service
name="SCAServicePolicy"
type="com.oracle.test.SayHelloRefImpl"
target="hello2">
<binding.ws
xmlns="http://xmlns.oracle.com/weblogic/weblogic-sca-binding"
name="mypolicysvcname"
port="uri:myns#wsdl.endpoint(mypolicysvc/mypolicyport)"
uri="/mypolicyuri">
<PolicyReference
xmlns="http://schemas.xmlsoap.org/ws/2004/09/policy"
uri="policy:Wssp1.2-Https-UsernameToken-Plain.xml"
direction="inbound" />
</binding.ws>
</sca:service>
SCAサービスまたは参照がOracle Web Services Manager(OWSM)セキュリティ・ポリシーを使用することを指定するには、WebLogicセキュリティ・ポリシーのかわりに、オプションのweblogic.sca.binding.ws.usingOwsmPoliciesプロパティをtrueに設定します。例8-4および例8-5に、それぞれSCAサービスおよびSCA参照用に指定されたOWSMポリシーを示します。
例8-4 OWSMポリシーを使用したSCAサービス用のセキュリティ構成
<sca:service name="SCAServicePolicy"
type="com.oracle.test.SayHelloRefImpl"
target="hello2">
<binding.ws xmlns="http://xmlns.oracle.com/weblogic/weblogic-sca-binding"
name="mypolicysvcname"
port="uri:myns#wsdl.endpoint(mypolicysvc/mypolicyport)"
uri="/mypolicyuri">
<PolicyReference xmlns="http://schemas.xmlsoap.org/ws/2004/09/policy"
uri="policy:oracle/wss_username_token_service_policy" />
<property name="weblogic.sca.binding.ws.usingOwsmPolicies">true</property>
</binding.ws>
</sca:service>
例8-5 OWSMポリシーを使用したSCA参照用のセキュリティ構成
<sca:reference name="SCAReferenceOwsmUNTPolicy"
type="com.oracle.test.SimpleSayHello">
<binding.ws xmlns="http://xmlns.oracle.com/weblogic/weblogic-sca-binding"
location="http://adc2101232:7001/jscaowsm/myowsmuriunt12"
port="http://test.oracle.com#wsdl.endpoint(myowsmsvcname/myowsmport)"
soapVersion="1.2">
<PolicyReference xmlns="http://schemas.xmlsoap.org/ws/2004/09/policy"
uri="policy:oracle/wss_username_token_client_policy" />
<property name="weblogic.sca.binding.ws.usingOwsmPolicies">true</property>
</binding.ws>
</sca:reference>
OWSMポリシーについての詳細は、『Oracle WebLogic Server WebLogic Webサービスの保護』のOracle Web Services Managerセキュリティ・ポリシーの使用に関する項を参照してください。
次のようにデータバインディングを指定します。
使用するデータバインディングのタイプを<binding.ws>のdatabinding属性に指定します。
SDOおよびカスタマイズ・ファイルの場合、追加の詳細を<binding.ws>の<property>サブ要素に指定します。
様々な種類のデータバインディングの構成についての詳細は、次を参照してください。
データバインディングのタイプが指定されない場合、toplink.jaxbが使用されます。
TopLink/EclipseLink JAXBデータバインディングを構成するには、binding.ws要素のdatabinding属性の値としてtoplink.jaxbを入力します。
|
注意: これはデフォルトのデータバインディング・タイプです。 |
TopLink/EclipseLink JAXBデータバインディングの例を例8-7に示します。
TopLink/EclipseLink SDOデータバインディングを構成するには:
<binding.ws>要素で、 databinding属性の値としてtoplink.sdoを入力します。
<binding.ws>の<property>サブ要素で次のことを行います。
weblogic.sca.binding.ws.sdoSchemaFileをname属性の値として入力します。
SDOバインディングのスキーマ・ファイルの場所を要素のコンテンツとして入力します。パスはアプリケーション・ルートに対し相対的であり、スキーマ・ファイルはアプリケーションにバンドルされる必要があります。
TopLink/EclipseLink SDOデータバインディングの例を例8-7に示します。
例8-7 TopLink/EclipseLink SDOデータバインディング
<sca:service name="SCASDOService"
type="com.oracle.test.sdo.HelloSDO" target="sdoHello">
<wlsb:binding.ws
name="mysdosvc"
port="mysdoport" uri="/mysdosvcuri"
databinding="toplink.sdo">
<property name="weblogic.sca.binding.ws.sdoSchemaFile">
MySDO.xsd
</property>
</wlsb:binding.ws>
</sca:service>
Glassfish JAXBデータバインディングを構成するには、glassfish.jaxbをbinding.ws要素のdatabinding属性の値として入力します。
Glassfish JAXBバインディングの例を例8-8「Glassfish JAXBデータバインディング」に示します。
Webサービス・バインディング上の追加情報を提供する外部データバインディング・カスタマイズXMLファイルを提供できます。このファイルはJava Webサービス・エンドポイントの属性を定義するマッピング・メタデータを提供します。外部カスタマイズ・ファイルを使用してWSDLとスキーマの両方をカスタマイズできます。
カスタマイズ・ファイルの使用の1つの例は、SCAサービス用のコントラクト・クラスにWebサービス処理として公開したい過負荷メソッドが含まれる場合です。このカスタマイズ・ファイルを使用してWebサービスの処理名を明確にできます。
もう1つの例(スキーマのカスタマイズ)は生成された複合タイプの要素の名前または順序の変更です。
カスタム・データバインディングを構成するには:
カスタマイズ・ファイルを実装クラス・ファイルと同じ場所に作成します。また、カスタマイズ・ファイルのスキーマweblogic-wsee-databinding.xsdはアプリケーションにバンドルされる必要があります。スキーマについては、「WebLogic SCAデータバインディング記述子スキーマ(weblogic-wsee-databinding.xsd)」を参照してください。
このスキーマは3種類のXML構成を定義します。
JAX-WSおよびJSR 181(Javaプラットフォーム用Webサービス・メタデータ)での構成に類似した構成。これらの構成は(a)サービス・エンドポイント・インタフェース(SEI)の属性をオーバーライドまたは定義、および(b)通常、SEIのインタフェースで使用される値タイプに対するJava Architecture for XML Binding(JAXB)アノテーションの一部となる情報をオーバーライドまたは指定します。
標準のJAX-WSまたはJAXB通知を使用しては使用できず、主にjava.util.Collections API.とともに使用する追加のマッピング仕様。
Toplink Object-XML(OXM)ファイルからの外部JAXBマッピング・メタデータへの参照。これはtoplink.jaxbデータバインディングにのみ関連します。
構成がJAX-WS、JSR 181またはJAXBアノテーションに直接類似している場合、スキーマには次のようなアノテーション付きのコメントが含まれます。
Corresponding Java annotation javax.jws.WebParam.Mode
<binding.ws>の<property>サブ要素で次のことを行います。
weblogic.sca.binding.ws.externalCustomizationFileをname属性の値として入力します。
カスタマイズ・ファイルの名前を<property>要素のコンテンツとして入力します。
カスタマイズ・ファイルを指すように構成された<property>要素の例を次の例8-10に示します。
例8-9 カスタマイズ・ファイル参照
<sca:service name="SCAServiceOverloaded"
type="com.oracle.test.SayHelloOverloaded" target="overloadedHello">
<wlsb:binding.ws"
name="myoverloadedsvcname" port="myoverloadedportname"
uri="/myoverloadedsvcnameuri">
<property
name="weblogic.sca.binding.ws.externalCustomizationFile">overloading_mapping_file.xml
</property>
</wlsb:binding.ws>
</sca:service>
カスタマイズ・ファイルの例を次の例8-10に示します。これはPOJOの過負荷sayHello()メソッドのサポート方法を示します。このメソッドはsayHelloおよびsayHelloWithStringと呼ばれるWSDLの2つの操作にマップされます。
例8-10 データバインディング・カスタマイズ・ファイル(1)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<java-wsdl-mapping name="com.oracle.test.SayHelloOverloaded"
xmlns="http://xmlns.oracle.com/weblogic/weblogic-wsee-databinding"
xmlns:oxm="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
databinding="toplink.jaxb">
<java-methods>
<java-method name="sayHello">
<web-method operation-name="sayHello"/>
</java-method>
<java-method name="sayHello">
<web-method operation-name="sayHelloWithString"/>
<java-params>
<java-param java-type="java.lang.String"/>
</java-params>
</java-method>
</java-methods>
</java-wsdl-mapping>
次の例8-11に示すカスタマイズ・ファイルでは、生成されたスキーマ内の要素の順番をカスタマイズするインライン<toplink-oxm>要素の使用を表します。この例ではShoppingCartItemオブジェクトに対して生成されたスキーマに、quantity、priceおよびidプロパティがデフォルトの順序ではなく指定した順序で含まれることを指定します。
例8-11 データバインディング・カスタマイズ・ファイル(2)
<java-wsdl-mapping name="com.oracle.test.GetPriceRemote"
xmlns="http://xmlns.oracle.com/weblogic/weblogic-wsee-databinding"
xmlns:oxm="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
databinding="toplink.jaxb">
<xml-schema-mapping>
<toplink-oxm java-package="com.oracle.test">
<oxm:xml-bindings>
<oxm:xml-schema/>
<oxm:java-types>
<oxm:java-type name="com.oracle.test.ShoppingCartItem">
<oxm:xml-type prop-order="quantity price id“/>
</oxm:java-type>
</oxm:java-types>
</oxm:xml-bindings>
</toplink-oxm>
</xml-schema-mapping>
</java-wsdl-mapping>
Simple Object Access Protocol(SOAP)添付はTopLink/EclipseLink JAXBデータバインディングを使用する場合にサポートされます。次のタイプがサポートされます。
SOAPメッセージ転送最適化メカニズム(MTOM)
添付付きSOAPメッセージ(SwA)
SOAP添付用のデータバインディングを構成するには:
toplink.jaxbをbinding.ws要素databinding属性として入力して、TopLink/EclipseLink JAXBデータバインディングを指定します。
|
注意:
|
次の項の説明に従い、MTOMまたはSwAに対して構成します。
次のいずれかの方法でMTOMを有効にします。
例8-12に示すように、@MTOMアノテーションをSEIまたはコントラクト・クラスに置きます。これにより base64Binaryタイプ用のMTOMが有効になります。
例8-13に示すように、<mtom>要素を外部マッピング・ファイルの<java-wsdl-mapping>要素の直下の子として含めます。<mtom>要素の属性はオプションです。enabledのデフォルトはtrueで、thresholdのデフォルトは0です。
次の例で、外部カスタマイズ・ファイルを使用し、SCA POJOでMTOMを有効にしてWebサービスのエンドポイントとして使用することを説明します。
例8-14に、外部カスタマイズ・ファイルmtomCustomizationMapping.xmlへの参照を含む、Springコンテキストを示します。
例8-15に、外部カスタマイズ・ファイルmtomCustomizationMapping.xmlを示します。
例8-16に、例としてのJavaクラスを示します。
例8-14 Springコンテキスト
<sca:service name="SCAMtomService" type="com.oracle.test.SayHelloMtom" target="helloMtom">
<binding.ws
xmlns="http://xmlns.oracle.com/weblogic/weblogic-sca-binding"
name="myMtomSvc"
port="myMtomPort"
uri="/myMtomSvcUri"
databinding="toplink.jaxb">
<property
name="weblogic.sca.binding.ws.externalCustomizationFile">mtomCustomizationMapping.xml
</property>
</binding.ws>
</sca:service>
例8-15 外部カスタマイズ・ファイルmtomCustomizationMapping.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<java-wsdl-mapping name="com.oracle.test.SayHelloMtom"
xmlns="http://xmlns.oracle.com/weblogic/weblogic-wsee-databinding"
xmlns:oxm="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
databinding="toplink.jaxb">
<xml-schema-mapping>
<toplink-oxm java-package="com.oracle.test">
<xml-bindings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm">
<java-types>
<java-type name="com.oracle.test.HasArray">
<java-attributes>
<xml-element java-attribute="arr" xml-mime-type="text/xml" />
</java-attributes>
</java-type>
</java-types>
</xml-bindings>
</toplink-oxm>
</xml-schema-mapping>
<mtom threshold="2"/>
</java-wsdl-mapping>
例8-16 Javaクラス
//SayHelloMtom.java
public class SayHelloMtom {
public HasArray modifyArray(String name, int b) {
HasArray ha = new HasArray();
ha.b = b;
ha.arr = ("<?xml version='1.0' ?><z>" + name + "</z>").getBytes();
return ha;
}
}
//HasArray.java
package com.oracle.test;
public class HasArray {
public byte[] arr = "<?xml version='1.0' ?><xy/>".getBytes();
public int b = 5;
}
SwA添付タイプSwaRefは次の2つの方法でサポートされます。
例8-17に示すように、DataHandlerタイプ・パラメータおよび/または戻りタイプの@XmlAttachmentRefアノテーションを使用します。
例8-18に示すように、外部カスタマイズ・ファイルのxml-attachment-ref属性を使用します。この例では、例8-19(Springコンテキスト)および例8-20(Javaクラス)とともに、SwAがSCA POJOで有効になり、Webサービスのエンドポイントとして使用されることを示します。
例8-18 外部カスタマイズ・ファイルswaCustomizationMapping.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<java-wsdl-mapping name="com.oracle.test.SayHelloSwa"
xmlns="http://xmlns.oracle.com/weblogic/weblogic-wsee-databinding"
xmlns:oxm="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
databinding="toplink.jaxb">
<xml-schema-mapping>
<toplink-oxm java-package="com.oracle.test">
<xml-bindings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm">
<java-types>
<java-type name="com.oracle.test.HasDataHandler">
<java-attributes>
<xml-element java-attribute="data" xml-attachment-ref="true" />
</java-attributes>
</java-type>
</java-types>
</xml-bindings>
</toplink-oxm>
</xml-schema-mapping>
</java-wsdl-mapping>
例8-19 外部カスタマイズ・ファイルへの参照を含むSpringコンテキスト
<sca:service name="SCAMtomService" type="com.oracle.test.SayHelloSwa" target="helloSwa">
<binding.ws
xmlns="http://xmlns.oracle.com/weblogic/weblogic-sca-binding"
name="mySwaSvc"
port="mySwaPort"
uri="/mySwaSvcUri"
databinding="toplink.jaxb">
<property
name="weblogic.sca.binding.ws.externalCustomizationFile">swaCustomizationMapping.xml
</property>
</binding.ws>
</sca:service>
例8-20 Javaクラス
//SayHelloSwa.java
package com.oracle.test;
public class SayHelloSwa {
public HasDataHandler echoDataHandler(HasDataHandler dh) {
return dh;
}
}
//HasDataHandler.java
package com.oracle.test;
import javax.activation.DataHandler;
public class HasDataHandler {
public DataHandler data;
}
例8-20に示すようなHasDataHandlerクラスなどのラッパー・クラスの使用の代替として、DataHandlerをWebサービスへのパラメータとして直接使用します。これを行うには、例8-21に示すようにカスタマイズ・ファイルを変更します。
例8-21 DataHandlerをWebサービスへのパラメータとして使用するカスタマイズ・ファイル
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<java-wsdl-mapping name="com.oracle.test.SayHelloSwa"
xmlns="http://xmlns.oracle.com/weblogic/weblogic-wsee-databinding"
xmlns:oxm="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
databinding="toplink.jaxb">
<java-methods>
<java-method name="echoDataHandler">
<java-params>
<java-param>
<oxm:xml-element xml-attachment-ref="true" xml-mime-type="text/xml"/>
</java-param>
</java-params>
</java-method>
</java-methods>
</java-wsdl-mapping>
対応するSayHelloSwa.javaファイルを例8-22に示します。
例8-22 Javaクラス
//SayHelloSwa.java
package com.oracle.test;
import javax.activation.DataHandler;
import javax.mail.util.ByteArrayDataSource;
public class SayHelloSwa {
public DataHandler echoDataHandler(DataHandler dh) {
byte[] b = new byte[1024];
try {
int len = dh.getInputStream().read(b);
String resp = "<swarefresponse>" + new String(b,0,len) + "</swarefresponse>";
return new DataHandler(new ByteArrayDataSource(resp.getBytes(), "text/xml"));
} catch (Exception e) {
String err = "<err>An error occurred: " + e.getClass().getName() + " - " + e.getMessage() + "</err>";
return new DataHandler(new ByteArrayDataSource(err.getBytes(), "text/xml"));
}
}
}
s
Javaコレクションおよびマップ・オブジェクトはTopLink/EclipseLink JAXBデータバインディングを使用する場合にサポートされます。
|
注意:
|
アノテーションまたは外部マッピング・ファイルのいずれかを含むCollection(またはCollectionファミリのメンバー)の一般タイプ引数を表現できます。たとえば、processItems2メソッドが例8-24に示す外部マッピング・ファイルを使用する場合、例8-23に示すインタフェースでの2つのメソッドはその入力タイプにおいて等価です。
例8-23 インタフェースでのメソッド(1)
public interface CollectionProcessor {
public String processItems1(Collection<ItemType> items);
public String processItems2(Collection items);
}
例8-24に、例8-23に示すprocessItems2メソッド用の外部マッピング・ファイルの一部を示します。
例8-24 コレクション・オブジェクトの構成用の外部マッピング・ファイル[1]
<java-method name="processItems2">
<java-params>
<java-param>
<oxm:xml-element type="mypackage.ItemType"/>
</java-param>
</java-params>
</java-method>
例8-25にコレクション・オブジェクトの構成用の外部マッピング・ファイルの別の例を示します。
現在、一般タイプの外部化はjava.util.Mapタイプに対し直接サポートされません。
ただし、マップの一般タイプを直接Javaクラスに指定することはできなくても、toplink.jaxbバインディングのXMLタイプ・アダプタ機能を使用すれば間接的にサポートできます。例8-26、例8-27および例8-28に示すように、これには必要な一般マップ・タイプ用のカスタム・シリアライザの作成および外部マッピング・ファイルでのカスタム・シリアライザの指定が含まれます。
例8-26 Webサービスとして公開されるPOJO(マップの一般タイプなし)
//Implementation class
public class CollectionMapExtTypeArgImpl {
public Map testMapOfCustomAdapters(Map map) {
//implementation goes here
}
}
例8-27 カスタム・アダプタ・クラス
//Custom Adapter class for Map<String, Integer> (JAXB Xml Adapter)
public class MapStringIntegerAdapter extends XmlAdapter<MapStringInteger, HashMap> {
public HashMap unmarshal(MapStringInteger m) throws Exception {
HashMap map = new HashMap();
for (StringIntegerEntry e: m.entry) map.put(e.key, e.value);
return map;
}
public MapStringInteger marshal(HashMap m) throws Exception {
MapStringInteger map = new MapStringInteger();
map.entry = new ArrayList<StringIntegerEntry>();
for (Object k: m.keySet()) {
StringIntegerEntry e = new StringIntegerEntry();
e.key = (String) k;
e.value = (Integer) m.get(k);
map.entry.add(e);
}
return map;
}
}
//MapStringInteger.java
public class MapStringInteger {
public static class StringIntegerEntry {
@XmlAttribute
public String key;
@XmlValue
public Integer value;
}
public List<StringIntegerEntry> entry;
}
//Similar implementation for MapStringCustomerAdapter would be needed
例8-28 マップ<String, Integer>の戻りタイプおよびマップ<String, Customer>のパラメータ・タイプを示すカスタマイズ・ファイルの一部
<java-method name="testMapOfCustomAdapters">
<oxm:xml-element xmlns='http://www.eclipse.org/eclipselink/xsds/persistence/oxm'>
<oxm:xml-java-type-adapter value='com.oracle.test.MapStringIntegerAdapter'/>
</oxm:xml-element>
<java-params>
<java-param>
<oxm:xml-element xmlns='http://www.eclipse.org/eclipselink/xsds/persistence/oxm'>
<oxm:xml-java-type-adapter value='com.oracle.test.MapStringCustomerAdapter'/>
</oxm:xml-element>
</java-param>
</java-params>
</java-method>
データバインディング・モード、SOAPバージョン、ターゲット・ネームスペース、サービス名、ポート名などのいくつかの構成設定は複数の場所に指定できます。これらの設定のいずれかが複数の場所に指定される場合、次の優先順位に従って評価されます。
構成オプションがbinding.ws構成のSpringコンテキストで指定されている(および空でない)場合、その設定が使用されます。この設定が他のすべてに優先します。
構成オプションがbinding.ws構成のSpringコンテキストで指定されていない場合、外部カスタマイズ・ファイルの値が使用されます。この設定が次の3に優先します。
構成オプションがSpringコンテキストまたは外部カスタマイズ・ファイルで指定されていないが、POJOのアノテーションで指定されている場合、そのPOJOのアノテーションが使用されます。
デプロイメント時に、WebLogic SCAランタイムは次を実行します。
サービス・インタフェース情報を使用してWSDLを生成します。
指定したURI(コンテキスト・ルートに対し相対的)でJAX-WSエンドポイントとしてサービスを公開します。
Webサービス・バインディングのランタイム動作を次に説明します。
サービス・リクエスト
サービスへのリクエストは次のように処理されます。
適切なデータ・バインディングが受信SOAPメッセージ・ペイロードをJavaオブジェクトに変換します。
ポリシーがJAX-WSランタイムにより処理されます。
サービスを実装するPOJOがWebLogic SCAランタイムにより起動されます。
参照の起動
WebLogic SCAランタイムは、参照の起動が外部参照に対するものであることを認識します。これは外部Webサービスに対するJAX-WSクライアントとして動作し、結果をJavaへアンマーシャリングして、呼び出し側Javaコードに透過的な方法でそれを戻します。