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

前
 
次
 

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

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

使用アプリケーションの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

オプション。ポリシーがinboundoutboundまたはbothのいずれであるかを指定します。デフォルトはbothです。

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(分)になります。

セキュリティの構成

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

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

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セキュリティ・ポリシーの使用」を参照してください。

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

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

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

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

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

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


注意:

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

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

例8-6 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. weblogic.sca.binding.ws.sdoSchemaFilename属性の値として入力します。

    2. 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データ・バインディングを構成するには、glassfish.jaxbbinding.ws要素のdatabinding属性の値として入力します。

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

例8-8 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つの例(スキーマのカスタマイズ)は生成された複合タイプの要素の名前または順序の変更です。

カスタム・データ・バインディングの構成の手順

カスタム・データ・バインディングを構成するには、次の手順に従います。

  1. カスタマイズ・ファイルを実装クラス・ファイルと同じ場所に作成します。また、カスタマイズ・ファイルのスキーマweblogic-wsee-databinding.xsdはアプリケーションにバンドルされる必要があります。スキーマについては、「WebLogic SCAデータ・バインディング記述子スキーマ(weblogic-wsee-databinding.xsd)」を参照してください。

    このスキーマは3種類のXML構成を定義します。

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

    2. 標準のJAX-WSまたはJAXB通知を使用しては使用できず、主にjava.util.Collections API.とともに使用する追加のマッピング仕様。

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

    構成がJAX-WS、JSR 181またはJAXB注釈に直接類似している場合、スキーマには次のような注釈付きのコメントが含まれます。

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

    • weblogic.sca.binding.ws.externalCustomizationFilename属性の値として入力します。

    • カスタマイズ・ファイルの名前を<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オブジェクトに対して生成されたスキーマに、quantitypriceおよび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>

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

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

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

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

SOAP添付用のデータ・バインディングを構成するには、次の手順に従います。

  1. toplink.jaxbbinding.ws要素databinding属性として入力して、TopLink/EclipseLink JAXBデータ・バインディングを指定します。


    注意:

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

  2. 次の項の説明に従い、MTOMまたはSwAに対して構成します。

MTOMを使用した添付の構成

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

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

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

    例8-13 外部マッピング・ファイルの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-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を使用した添付の構成

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

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

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

    @XmlAttachmentRef
    DataHandler echoDataHandler(@XmlAttachmentRef DataHandler dh);
    
    
  2. 例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データ・バインディングを使用する場合にサポートされます。


注意:

java.util.Listおよびjava.util.Mapの組込みJavaサブクラスがサポートされます。多次元サポート(配列の配列、HashMapsの配列、リストのリストなど)は将来のリリースでサポートされる予定です

注釈または外部マッピング・ファイルのいずれかを含む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にコレクション・オブジェクトの構成用の外部マッピング・ファイルの別の例を示します。

例8-25 コレクション・オブジェクトの構成用の外部マッピング・ファイル[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-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バージョン、ターゲット・ネームスペース、サービス名、ポート名などのいくつかの構成設定は複数の場所に指定できます。これらの設定のいずれかが複数の場所に指定される場合、次の優先順位に従って評価されます。

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

  2. 構成オプションがbinding.ws構成のSpringコンテキストで指定されていない場合、外部カスタマイズ・ファイルの値が使用されます。この設定が次の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コードに透過的な方法でそれを戻します。