| 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コードに透過的な方法でそれを戻します。