ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server WebLogic SCAアプリケーションの開発
11g リリース1(10.3.3)
B61414-01
  目次へ移動
目次

前
 
次
 

8 Webサービス・バインディングの構成

この章では、サービスおよび参照用のWebサービス・バインディングの構成方法について説明します。

アプリケーション用のSpringアプリケーション・コンテキスト・ファイルの<binding.ws>要素で、Webサービス・バインディングを構成します。背景情報については、次を参照してください。

Webサービス・バインディングはSCAサービスおよびSCA参照に適用できます。次のことを行います。

サービスでの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:referencetype属性に指定したタイプは、JAX-WS wsimportツール、WebLogic clientgen Antタスク、Oracle JDeveloperまたはOracle Enterprise Pack for Eclipse(OEPE)などのJAX-WS互換クライアント生成ツールを使用して外部WSDLから生成されたJAX-WS互換インタフェースである必要があります。

binding.ws要素の属性

<binding.ws>要素の属性は次のとおりです。

databinding

オプション。SOAPメッセージとJavaの間の変換に使用するデータバインディングのタイプを指定します。有効な値は次のとおりです。

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要素

<binding.ws><PolicyReference>下位要素は使用するセキュリティ・ポリシーへの参照を指定します。その属性は次のとおりです。

uri

ポリシーの場所を指定します。このリリースでは組込みのWebLogic Serverセキュリティ・ポリシーのみがサポートされます。

direction

オプション。ポリシーが「インバウンド」「アウトバウンド」または「両方」のいずれであるかを指定します。デフォルトは「両方」です。

PolicyReference要素を使用してセキュリティ・ポリシーを構成する方法の詳細は、セキュリティの構成を参照してください。

property要素

<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(分)となりキャッシュが有効になります。

セキュリティの構成

Webサービス・バインディングのセキュリティ・ポリシーを構成するには、PolicyReference要素を使用します。PolicyReference要素も参照してください。

次のセキュリティ・メカニズムがサポートされます。

<PolicyReference>の例を次に示します。

<PolicyReference
    xmlns="http://schemas.xmlsoap.org/ws/2004/09/policy"
    URI="policy:Wssp1.2-Https-UsernameToken-Plain.xml"
    direction="inbound" />

データバインディングの構成

次のようにデータバインディングを指定します。

様々な種類のデータバインディングの構成の詳細は、次を参照してください。

データバインディング・タイプを指定しないと、toplink.jaxbが使用されます。

TopLink/EclipseLink JAXBバインディングの構成

TopLink/EclipseLink JAXBデータバインディングを構成するには、binding.ws要素のdatabinding属性の値としてtoplink.jaxbを入力します。


注意:

これはデフォルトのデータバインディング・タイプです。databinding属性に何も指定しないと、toplink.jaxbが使用されます。

TopLink/EclipseLink JAXBデータバインディングの例を例8-4に示します。

例8-3 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データバインディングの構成

データバインディングTopLink/EclipseLink SDOを構成するには:

  1. <binding.ws>要素で、databinding属性の値としてtoplink.sdoを入力します。

  2. <binding.ws>の<property>下位要素で次を行います。

    1. name属性の値としてweblogic.sca.binding.ws.sdoSchemaFileを入力します。

    2. 要素のコンテキストとしてSDOバインディングのスキーマ・ファイルの場所を入力します。そのパスはアプリケーション・ルートに対し相対的である必要があり、スキーマ・ファイルはアプリケーションにバンドルされる必要があります。

TopLink/EclipseLink SDOデータバインディングの例を例8-4に示します

例8-4 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を入力します。

Glassfish JAXBバインディングの例を例8-5「Glassfish JAXBデータバインディング」に示します。

例8-5 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構成を定義します。

    1. JAX-WSおよびJSR 181(JavaプラットフォームのWebサービス・メタデータ)での構成と類似する構成。これらの構成は(a)サービス・エンドポイント・インタフェース(SEI)で属性をオーバーライドまたは定義、および(b)通常、SEIのインタフェースで使用される値のタイプに対するXMLバインディング(JAXB)注釈の一部となる情報をオーバーライドまたは指定します。

    2. 追加のマッピング仕様は、標準のJAX-WSまたはJAXB注釈では使用できず、主にjava.util.CollectionsAPIで使用します。

    3. Toplink Object-XML (OXM)ファイルからの外部JAXBマッピング・メタデータへの参照。これはtoplink.jaxbデータバインディングにのみ関係します。

    構成がJAX-WS、JSR 181またはJAXB注釈の直接アナログである場合、スキーマには次のような表記のコメントが含まれます。

    Corresponding Java annotation javax.jws.WebParam.Mode
    
  2. <binding.ws>の<property>下位要素で次を行います。

    • name属性の値として、weblogic.sca.binding.ws.externalCustomizationFileを入力します。

    • <property>要素のコンテキストとしてカスタマイズ・ファイルの名前を入力します。

カスタム・データバインディングの例

カスタム・ファイルを指すように構成された<property>要素の例を次の例8-7に示します。

例8-6 カスタマイズ・ファイル参照

<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-7に示します。これはPOJOでのオーバーロードしたsayHello()メソッドのサポート方法を示しています。このメソッドはsayHelloおよびsayHelloWithStringと呼ばれる、WSDLの2つの操作にマップされています。

例8-7 データバインディング・カスタマイズ・ファイル(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-8に示すカスタマイズ・ファイルは、生成されたスキーマの要素の順序をカスタマイズするためのインライン<toplink-oxm>要素の使用を説明しています。この例では、ShoppingCartItemオブジェクト用に生成されたスキーマに、quantitypriceおよびidプロパティが、デフォルトの順序ではなく、指定した順序で含まれることを指定します。

例8-8 データバインディング・カスタマイズ・ファイル(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>

SOAP添付用のデータバインディングの構成

Simple Object Access Protocol(SOAP)添付は、TopLink/EclipseLink JAXBデータバインディングを使用する場合にサポートされます。次に示すタイプがサポートされます。

  • SOAPメッセージ転送最適化メカニズム(MTOM)

  • 添付付きSOAPメッセージ(SwA)

SOAP添付のデータバインディングを構成するには:

  1. TopLink/EclipseLink JAXBデータバインディングを指定するには、binding.ws要素のdatabinding属性の値としてtoplink.jaxbを入力します。


    注意:

    toplink.jaxbdatabindingのデフォルト値なので、実際にはこの手順は必要ありません。ただし、databindingに他の値を使用することはできません。

  2. 次の項で説明するように、MTOMまたはSwAを構成します。

MTOMを使用した添付の構成

次のいずれかの方法でMTOMを有効にします。

  1. 例8-9に示すように、@MTOM注釈をSEIまたはコントラクト・クラスに置きます。これによりbase64Binaryタイプ用のMTOMが有効になります。

    例8-9 @MOM注釈の例

    @MTOM
    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;
        }
    }
    
  2. 例8-10に示すように、外部マッピング・ファイルの<java-wsdl-mapping>要素の直下の子として<mtom>を含めます。<mtom>要素の属性はオプションです。enabledのデフォルトはtrueで、thresholdのデフォルトは0です。

    例8-10 外部マッピング・ファイルのmtom要素

    <java-wsdl-mapping name="com.hello.sei.MyServiceEndpointInterface"
      <web-service name="hello-ws" target-namespace="hello-ns"/>
      <mtom enabled="true" threshold="50"/>
      ...
    

次の例で、外部カスタマイズ・ファイルを使用し、SCA POJOでMTOMを有効にしてWebサービスのエンドポイントとして使用することを説明します。

  • 例8-11では、外部カスタマイズ・ファイルmtomCustomizationMapping.xmlへの参照を含む、Springコンテキストを示します。

  • 例8-12では、外部カスタマイズ・ファイルmtomCustomizationMapping.xmlを示します。

  • 例8-13では、例としてのJavaクラスを示します。

例8-11 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-12 外部カスタマイズ・ファイル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-13 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を使用した添付の構成

SwA添付タイプSwaRefは次の2つの方法でサポートされます。

  1. 例8-14に示すように、DataHandlerタイプ・パラメータおよび/または戻りタイプの@XmlAttachmentRef注釈を使用します。

    例8-14 パラメータおよびDataHandlerの注釈

    @XmlAttachmentRef
    DataHandler echoDataHandler(@XmlAttachmentRef DataHandler dh);
    
    
  2. 例8-15に示すように、外部カスタマイズ・ファイルのxml-attachment-ref属性を使用します。この例では、例8-16(Springコンテキスト)および例8-17(Javaクラス)とともに、SwAがSCA POJOで有効になり、Webサービスのエンドポイントとして使用されることを示します。

例8-15 外部カスタマイズ・ファイル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-16 外部カスタマイズ・ファイルへの参照を含む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-17 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-17に示すようなHasDataHandlerクラスなどのラッパー・クラスの使用の代替として、DataHandlerをWebサービスへのパラメータとして直接使用します。これを行うには、例8-18に示すようにカスタマイズ・ファイルを変更します。

例8-18 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-19に示します。

例8-19 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-21に示す外部マッピング・ファイルを使用する場合、例8-20に示すインタフェースでの2つのメソッドはその入力タイプにおいて等価です。

例8-20 インタフェースでのメソッド(1)

public interface CollectionProcessor {
      public String processItems1(Collection<ItemType> items);
      public String processItems2(Collection items);
}

例8-21では、例8-20に示すprocessItems2メソッド用の外部マッピング・ファイルの例を示します。

例8-21 コレクション・オブジェクトの構成用の外部マッピング・ファイル[1]

<java-method name="processItems2">
  <java-params>
    <java-param>
      <oxm:xml-element type="mypackage.ItemType"/>
    </java-param>
  </java-params>
</java-method>

例8-22では、コレクション・オブジェクトの構成用の外部マッピング・ファイルの別の例を示します。

例8-22 コレクション・オブジェクトの構成用の外部マッピング・ファイル[2]

<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-23例8-24および例8-25に示すように、これには必要な一般マップ・タイプ用のカスタム・シリアライザの作成および外部マッピング・ファイルでのカスタム・シリアライザの指定が含まれます。

例8-23 Webサービスとして公開されるPOJO(マップの一般タイプなし)

//Implementation class
public class CollectionMapExtTypeArgImpl {
  public Map testMapOfCustomAdapters(Map map) {
      //implementation goes here
  }
}

例8-24 カスタム・アダプタ・クラス

//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-25 マップ<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バージョン、ターゲット・ネームスペース、サービス名、ポート名などのいくつかの構成設定は複数の場所に指定できます。これらの設定のいずれかが複数の場所に指定される場合、次の優先順位に従って評価されます。

  1. 構成オプションがbinding.ws構成のSpringコンテキストで指定されているid="1">(および空でない)場合、その設定が使用されます。この設定が他のすべてに優先します。

  2. 構成オプションがbinding.ws構成のSpringコンテキストで指定されていないid="1">場合、外部カスタマイズ・ファイルの値が使用されます。この設定が次の3に優先します。

  3. 構成オプションがSpringコンテキストまたは外部カスタマイズ・ファイルで指定されていないが、POJOの注釈で指定されている場合、そのPOJOの注釈が使用されます。

デプロイメント

デプロイメント時に、WebLogic SCAランタイムは次を実行します。

  1. サービス・インタフェース情報を使用してWSDLを生成します。.

  2. 指定したURI(コンテキスト・ルートに対し相対的)でJAX-WSエンドポイントとしてサービスを公開します。

ランタイム

Webサービス・バインディングのランタイム動作を次に説明します。

サービス・リクエスト

サービスへのリクエストは次のように処理されます。

  1. 適切なデータバインディングが受信SOAPメッセージ・ペイロードをJavaオブジェクトに変換します。

  2. ポリシーがJAX-WSランタイムにより処理されます。

  3. サービスを実装するPOJOがWebLogic SCAランタイムにより起動されます。

参照の起動

WebLogic SCAランタイムは、参照の起動が外部参照に対するものであることを認識します。これは外部Webサービスに対するJAX-WSクライアントとして動作し、結果をJavaへアンマーシャリングして、呼び出し側Javaコードに透過的な方法でそれを戻します。