Oracle® Fusion Middleware Oracle WebLogic Server WebLogic SCAアプリケーションの開発 12c (12.2.1.1.0) E79371-01 |
|
![]() 前 |
![]() 次 |
使用アプリケーションのSpringアプリケーション・コンテキスト・ファイルの<binding.ws>
要素で、Webサービス・バインディングを構成できます。
WebLogic Spring SCAアプリケーション用のSpringアプリケーション・コンテキストの構成についての一般情報は、Springアプリケーション・コンテキストの構成を参照してください。
<binding.ws>
要素を定義するスキーマについては、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サービス・バインディングの例を次に示します。
<sca:service name="SCAService" type="com.oracle.test.SayHello" target="hello"> <wlsb:binding.ws" name="mysvcname" port="myportname" uri="/mysvcnameuri"/> </sca:service>
次の例は、参照での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)を使用することを指定します。これらのテクノロジの詳細は、http://www.eclipse.org/eclipselink/#documentation
にあるEclipseLinkの開発者ガイドを参照してください。
toplink.sdo - Toplink/EclipseLink SDO from EclipseLink 2.0
データバインディングがEclipseLink 2.0から利用可能なToplink/EclipseLink Service Data Objects (SDO)を使用することを指定します。詳細情報は、https://wiki.eclipse.org/EclipseLink/Examples/SDO/JPA
で入手可能です。
データバインディングのタイプにより、binding.ws
の<property>サブ要素を使用する必要がある場合もあります。
カスタム・データバインディングの構成についてを参照してください。
Glassfish JAXBデータバインディングの構成を参照してください
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サービスのセキュリティ構成の例を示します。
<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
に設定する必要があります。
OWSMポリシーの詳細は、Oracle WebLogic Server WebLogic Webサービスの保護のOracle Web Services Managerセキュリティ・ポリシーの使用を参照してください。
例8-1 OWSMポリシーを使用したSCAサービス用のセキュリティ構成
次に、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-2 OWSMポリシーを使用したSCA参照用のセキュリティ構成
次に、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>
次のようにデータバインディングを実装する必要があります。
使用するデータバインディングのタイプを<binding.ws>
のdatabinding
属性に指定します。
追加の詳細を、SDOおよびカスタマイズ・ファイル用の<binding.ws>
の<property>
サブ要素に指定します。
様々な種類のデータバインディングの構成について:
詳細は、TopLink/EclipseLink JAXBバインディングの構成を参照してください。
詳細は、TopLink/EclipseLink SDOデータバインディングの構成を参照してください。
詳細は、Glassfish JAXBデータバインディングの構成を参照してください
詳細は、カスタム・データバインディングの構成についてを参照してください。
データバインディングのタイプが指定されない場合、toplink.jaxb
が使用されます。
TopLink/EclipseLink JAXBデータバインディングを構成するには、binding.ws
要素のdatabinding
属性の値としてtoplink.jaxb
を入力します。
注意:
これはデフォルトのデータバインディング・タイプです。databinding
属性に何も指定しない場合、toplink.jaxb
が使用されます。
次の例は、TopLink/EclipseLink JAXBデータバインディングを示しています。
<sca:service name="SCAComplexService" type="com.oracle.test.ComplexHello" target="complexHello"> <wlsb:binding.ws name="mycomplexsvc" port="mycomplexport" uri="/mycomplexsvcuri" databinding="toplink.jaxb"/> </sca:service>
TopLink/EclipseLink SDOデータバインディングを構成するには:
<binding.ws>
要素で、 databinding
属性の値としてtoplink.sdo
を入力します。
<binding.ws>
の<property>サブ要素で次のことを行います。
weblogic.sca.binding.ws.sdoSchemaFile
をname
属性の値として入力します。
SDOバインディングのスキーマ・ファイルの場所を要素のコンテンツとして入力します。パスはアプリケーション・ルートに対し相対的であり、スキーマ・ファイルはアプリケーションにバンドルされる必要があります。
次の例は、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バインディングを示しています。
<sca:service name="SCAComplexService" type="com.oracle.test.ComplexHello" target="complexHello"> <wlsb:binding.ws name="mycomplexsvc" port="mycomplexport" uri="/mycomplexsvcuri" databinding="glassfish.jaxb"/> </sca:service>
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>
要素を示しています。
<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>
次の例にサンプル・カスタマイズ・ファイルを示します。これはPOJOの過負荷sayHello()
メソッドのサポート方法を示します。このメソッドはsayHello
およびsayHelloWithString
と呼ばれる、WSDLの2つの操作にマップされています。
<?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>
次の例に示すカスタマイズ・ファイルでは、生成されたスキーマ内の要素の順番をカスタマイズするインライン<toplink-oxm>
要素の使用を表します。この例では、ShoppingCartItem
オブジェクト用に生成されたスキーマに、quantity
、price
およびid
プロパティが、デフォルトの順序ではなく、指定した順序で含まれることを指定します。
<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添付用のデータバインディングを構成するには:
次のいずれかの方法でMTOMを有効にできます。
MTOMを使用した添付の構成: 例に示された例では、外部カスタマイズ・ファイルを使用し、SCA POJOでMTOMを有効にしてWebサービスのエンドポイントとして使用します。
例8-3 Springコンテキスト
次の例は、外部カスタマイズ・ファイルmtomCustomizationMapping.xml
への参照を含む、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-4 外部カスタマイズ・ファイルmtomCustomizationMapping.xml
次の例は、外部カスタマイズ・ファイル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-5 Javaクラス
次の例は、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つの方法でサポートされます。
次の例に示されているように、DataHandler
タイプ・パラメータおよび/または戻りタイプの@XmlAttachmentRef
アノテーションを使用します。
@XmlAttachmentRef DataHandler echoDataHandler(@XmlAttachmentRef DataHandler dh);
次の例に示されているように、外部カスタマイズ・ファイルのxml-attachment-ref
属性を使用します。
<?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>
たとえば、SwAを使用した添付の構成: 例を参照してください。
HasDataHandler
クラスなどのラッパー・クラスの使用の代替として、DataHandler
をWebサービスへのパラメータとして直接使用します。これを行うには、例8-8に示すようにカスタマイズ・ファイルを変更する必要があります。対応するSayHelloSwa.java
ファイルを例8-9に示します。例8-6 外部カスタマイズ・ファイルへの参照を含むSpringコンテキスト
次の例は、外部カスタマイズ・ファイルへの参照を含む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-7 Javaクラス
この例は、Javaクラスを使用し、SCA POJOでSwAを有効にしてWebサービスのエンドポイントとして使用することを示しています。
//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-8 DataHandlerをWebサービスへのパラメータとして使用するカスタマイズ・ファイル
この例は、DataHandler
をWebサービスへのパラメータとして使用する方法を示しています。これは、HasDataHandler
クラスなどのラッパー・クラスの使用の代替です。
<?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>
例8-9 Javaクラス
この例は、前述の例で使用されたDataHandler
パラメータに対応するJavaファイルSayHelloSwa.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データバインディングを使用する場合にサポートされます。
注意:
java.util.List
およびjava.util.Map
の組込みJavaサブクラスがサポートされます。多次元サポート(配列の配列、HashMapsの配列、リストのリストなど)は将来のリリースでサポートされる予定です
アノテーションまたは外部マッピング・ファイルのいずれかを含むCollection
(またはCollection
ファミリのメンバー)の一般タイプ引数を表現できます。たとえば、processItems2
メソッドが例8-11に示す外部マッピング・ファイルを使用する場合、例8-10に示すインタフェースでの2つのメソッドはその入力タイプにおいて等価です。
例8-10 インタフェースでのメソッド(1)
次の例は、インタフェースでの2つのメソッドを示しています。
public interface CollectionProcessor { public String processItems1(Collection<ItemType> items); public String processItems2(Collection items); }
例8-11 コレクション・オブジェクトの構成用の外部マッピング・ファイル[1]
次の例は、processItems2
メソッド用の外部マッピング・ファイルの一部を示しています。
<java-method name="processItems2"> <java-params> <java-param> <oxm:xml-element type="mypackage.ItemType"/> </java-param> </java-params> </java-method>
例8-12 コレクション・オブジェクトの構成用の外部マッピング・ファイル[2]
次に、Collection
オブジェクトの構成用の外部マッピング・ファイルの別の例を示します。
<java-method name="testListOfCustomer"> <java-params> <java-param> <oxm:xml-element type="mypackage.Customer"/> </java-param> </java-params> </java-method>
現在、一般タイプの外部化はjava.util.Map
タイプに対し直接サポートされません。
ただし、マップの一般タイプを直接Javaクラスに指定することはできませんが、toplink.jaxb
バインディングのXMLタイプ・アダプタ機能を使用すれば間接的にサポートされます。これには、必要な一般マップ・タイプ用のカスタム・シリアライザの作成および外部マッピング・ファイルでのカスタム・シリアライザの指定が含まれます。
例8-13 Webサービスとして公開されるPOJO(マップの一般タイプなし)
次の例は、Webサービスとして公開できるPOJOを示しています。
//Implementation class public class CollectionMapExtTypeArgImpl { public Map testMapOfCustomAdapters(Map map) { //implementation goes here } }
例8-14 カスタム・アダプタ・クラス
次の例では、カスタム・アダプタ・クラスを指定します。
//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-15 マップ<String, Integer>の戻りタイプおよびマップ<String, Customer>のパラメータ・タイプを示すカスタマイズ・ファイルの一部
次の例は、Map<String, Integer>の戻りタイプおよびMap<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コンテキストで指定されていない場合、外部カスタマイズ・ファイルの値が使用されます。この設定が、次の設定に優先します。
構成オプションがSpringコンテキストまたは外部カスタマイズ・ファイルで指定されていないが、POJOのアノテーションで指定されている場合、そのPOJOのアノテーションが使用されます。
デプロイメント時に、WebLogic SCAランタイムは次を実行します。
サービス・インタフェース情報を使用してWSDLを生成します。
指定したURI(コンテキスト・ルートに対し相対的)でJAX-WSエンドポイントとしてサービスを公開します。
Webサービス・バインディングのランタイム動作を次に説明します。
サービス・リクエスト: サービスに対するリクエストは次のように処理されます。
適切なデータ・バインディングが受信SOAPメッセージ・ペイロードをJavaオブジェクトに変換します。
ポリシーがJAX-WSランタイムにより処理されます。
サービスを実装するPOJOがWebLogic SCAランタイムにより起動されます。
参照の起動: WebLogic SCAランタイムは、参照の起動が外部参照に対するものであることを認識します。これは外部Webサービスに対するJAX-WSクライアントとして動作し、結果をJavaへアンマーシャリングして、呼び出し側Javaコードに透過的な方法でそれを戻します。