ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server JAX-WS Webサービス・スタート・ガイド
12c リリース1(12.1.1)
B65942-01
  目次へ移動
目次

前
 
次
 

5 JAXBデータ・バインディングの使用

この章では、Java Architecture for XML Binding (JAXB)データ・バインディングの使用方法について説明します。

この章では、以下のトピックについて説明します。

JAXBを使用したデータ・バインディングの概要

様々なシステム間でのデータ交換にはXMLが標準的に使用されているため、Webサービス・アプリケーションには、Javaアプリケーションから直接XML形式データへアクセスする手段が必要となります。具体的には、XMLコンテンツをJavaアプリケーションで読み取れる形式に変換する必要があります。データ・バインディングでは、XML表現とJava表現間のデータ変換を記述します。

JAX-WSでは、JAXB(http://jcp.org/en/jsr/detail?id=222を参照)を使用してあらゆるデータ・バインディング・タスクを管理します。具体的には、JAXBによりJavaメソッド・シグネチャとWSDLのメッセージおよび操作がバインドされるため、実行時の変換が自動的に処理される一方で、そのマッピングをカスタマイズすることができます。これにより、XMLに関する知識がそれほどなくても、XMLデータと処理関数を、Javaテクノロジに基づくアプリケーションに簡単に組み込むことができます。

次の図に、JAXBのデータ・バインディング・プロセスを示します。

図5-1 JAXBでのデータ・バインディング

図5-1の説明が続きます
「図5-1 JAXBでのデータ・バインディング」の説明

この図に示すように、JAXBのデータ・バインディング・プロセスは、以下のタスクから構成されます。

JAXBバインディング言語を使用すると、カスタム・バインディング宣言を定義したり、JAXBアノテーションを指定してXMLとJava間のデータ変換を制御することができます。

WebLogic Serverには、2種類のデータ・バインディングおよびJAXBプロバイダが用意されています。

次の項では、WebLogic ServerでJAXBデータ・バインディングを使用する方法、さらには必要に応じてGlassfish RI JAXBプロバイダを構成する方法について説明します。

JAXBデータ・バインディング・アーティファクトの開発

WebLogic ServerでJAXBデータ・バインディング・アーティファクトを開発する手順は、Javaクラス・ファイルとWSDLのどちらから開始するかによって異なります。

こららの手順で説明しているjwscwsdlc、またはclientgen Antタスクを呼び出す場合、以下の点に注意する必要があります。

jwscwsdlc、またはclientgen Antタスクの詳細は、『Oracle WebLogic Server WebLogic Webサービス・リファレンス』の「Antタスク・リファレンス」を参照してください。

標準データ型のマッピング

WebLogic Webサービスでは、JSR 222: JavaTM Architecture for XML Binding (JAXB) 2.0仕様(http://jcp.org/en/jsr/detail?id=222)の規定に従って組込みのXMLスキーマ、Java、およびSOAPのデータ型がサポートされており、追加のプログラミング手順を踏まずに、そうしたデータ型をWebサービス操作で使用できます。組込みデータ型には、integerstringtimeなどがあります。

また、Webサービスの入力パラメータや戻り値として、様々なユーザー定義のXMLおよびJavaデータ型を使用できます。ユーザー定義のデータ型には、XMLスキーマやJavaの構成要素から作成する<xsd:complexType>やJavaBeanなどがあります。jwscclientgenなどのWebLogic WebサービスAntタスクでは、ユーザー定義のデータ型をXML表現とJava表現の間で変換するのに必要なデータ・バインディング・アーティファクトが自動的に生成されます。XML表現はSOAPリクエストやレスポンス・メッセージで使用し、Java表現はWebサービスを実装するJWSで使用します。

以下の項では、JAXBでサポートされている組込みデータ型およびユーザー定義データ型について説明します。

サポートされる組込みデータ型

次のセクションでは、WebLogic Webサービスがサポートする組込みデータ型およびそのXML表現とJava表現間のマッピングについて説明します。Webサービスを実装するバックエンド・コンポーネントのパラメータと戻り値のデータ型が、組込みデータ型のセットの中にあるかぎり、データはWebLogic Serverによって、XMLとJava間で自動的に変換されます。

ユーザー定義のデータ型を使用する場合は、XMLとJava間でデータを変換するデータ・バインディング・アーティファクトを作成する必要があります。WebLogic Serverには、ほとんどのユーザー定義データ型のデータ・バインディング・アーティファクトを自動的に生成可能なjwscおよびwsdlc Antタスクが用意されています。サポートされるXMLデータ型とJavaデータ型については、「サポートされるユーザー定義のデータ型」を参照してください。

組込みデータ型のXML-to-Javaマッピング

次の表に、サポートされるXMLスキーマ・データ型(ターゲット・ネームスペースhttp://www.w3.org/2001/XMLSchema)と、それぞれに対応するJavaデータ型をアルファベット順に示します。サポートされるユーザー定義のXMLデータ型については、「組込みデータ型のJava-to-XMLマッピング」を参照してください。

表5-1 XMLスキーマの組込みデータ型とJavaデータ型のマッピング

XMLスキーマ・データ型 Javaデータ型(小文字はプリミティブ・データ型を示します)

anySimpleType (この型のxsd:element用)

java.lang.Object

anySimpleType (この型のxsd:attribute用)

java.lang.String

base64Binary

byte[]

boolean

boolean

byte

byte

date

java.xml.datatype.XMLGregorianCalendar

dateTime

javax.xml.datatype.XMLGregorianCalendar

decimal

java.math.BigDecimal

double

double

duration

javax.xml.datatype.Duration

float

float

g

java.xml.datatype.XMLGregorianCalendar

hexBinary

byte[]

int

int

integer

java.math.BigInteger

long

long

NOTATION

javax.xml.namespace.QName

QName

javax.xml.namespace.QName

short

short

string

java.lang.String

time

java.xml.datatype.XMLGregorianCalendar

unsignedByte

short

unsignedInt

long

unsignedShort

int


次の例はJAXB仕様からの抜粋ですが、デフォルトのXML-to-Javaバインディングの例を示しています。

XMLスキーマ
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="purchaseOrder" type="PurchaseOrderType"/>
<xsd:element name="comment" type="xsd:string"/>
<xsd:complexType name="PurchaseOrderType">
     <xsd:sequence>
          <xsd:element name="shipTo" type="USAddress"/>
          <xsd:element name="billTo" type="USAddress"/>
          <xsd:element ref="comment" minOccurs="0"/>
          <xsd:element name="items" type="Items"/>
     </xsd:sequence>
     <xsd:attribute name="orderDate" type="xsd:date"/>
</xsd:complexType>
<xsd:complexType name="USAddress">
     <xsd:sequence>
          <xsd:element name="name" type="xsd:string"/>
          <xsd:element name="street" type="xsd:string"/>
          <xsd:element name="city" type="xsd:string"/>
          <xsd:element name="state" type="xsd:string"/>
          <xsd:element name="zip" type="xsd:decimal"/>
     </xsd:sequence>
<xsd:attribute name="country" type="xsd:NMTOKEN" fixed="US"/>
</xsd:complexType>
<xsd:complexType name="Items">
     <xsd:sequence>
          <xsd:element name="item" minOccurs="1" maxOccurs="unbounded">
               <xsd:complexType>
                    <xsd:sequence>
                         <xsd:element name="productName" type="xsd:string"/>
                         <xsd:element name="quantity">
                              <xsd:simpleType>
                                   <xsd:restriction base="xsd:positiveInteger">
                                        <xsd:maxExclusive value="100"/>
                                   </xsd:restriction>
                              </xsd:simpleType>
                         </xsd:element>
                         <xsd:element name="USPrice" type="xsd:decimal"/>
                         <xsd:element ref="comment" minOccurs="0"/>
                         <xsd:element name="shipDate" type="xsd:date"
                              minOccurs="0"/>
                    </xsd:sequence>
                    <xsd:attribute name="partNum" type="SKU" use="required"/>
               </xsd:complexType>
          </xsd:element>
     </xsd:sequence>
</xsd:complexType>
<!-- Stock Keeping Unit, a code for identifying products -->
<xsd:simpleType name="SKU">
     <xsd:restriction base="xsd:string">
          <xsd:pattern value="\d{3}-[A-Z]{2}"/>
     </xsd:restriction>
</xsd:simpleType>
</xsd:schema>
デフォルトJavaバインディング
import javax.xml.datatype.XMLGregorianCalendar; import java.util.List;
public class PurchaseOrderType {
     USAddress getShipTo(){...} 
     void setShipTo(USAddress){...}
     USAddress getBillTo(){...} 
     void setBillTo(USAddress){...}
     /** Optional to set Comment property. */
     String getComment(){...} 
     void setComment(String){...}
     Items getItems(){...}
     void setItems(Items){...}
     XMLGregorianCalendar getOrderDate() 
     void setOrderDate(XMLGregorianCalendar)
};
public class USAddress {
     String getName(){...} 
     void setName(String){...}
     String getStreet(){...} 
     void setStreet(String){...}
     String getCity(){...} 
     void setCity(String){...}
     String getState(){...} 
     void setState(String){...}
     int getZip(){...} 
     void setZip(int){...}
     static final String COUNTRY="USA";
};
public class Items {
     public class ItemType {
          String getProductName(){...} 
          void setProductName(String){...}
          /** Type constraint on Quantity setter value 0..99.*/
          int getQuantity(){...} 
          void setQuantity(int){...}
          float getUSPrice(){...} 
          void setUSPrice(float){...}
          /** Optional to set Comment property. */
          String getComment(){...} 
          void setComment(String){...}
          XMLGregorianCalendar getShipDate();
          void setShipDate(XMLGregorianCalendar);
          /** Type constraint on PartNum setter value "\d{3}-[A-Z]{2}".*/
          String getPartNum(){...} void setPartNum(String){...}
     };
     /** Local structural constraint 1 or more instances of Items.ItemType.*/
     List<Items.ItemType> getItem(){...}
}
public class ObjectFactory {
     // type factories
     Object newInstance(Class javaInterface){...}
     PurchaseOrderType createPurchaseOrderType(){...}
     USAddress createUSAddress(){...}
     Items createItems(){...}
     Items.ItemType createItemsItemType(){...}
     // element factories
JAXBElement<PurchaseOrderType>createPurchaseOrder(PurchaseOrderType){...}
     JAXBElement<String> createComment(String value){...}
}

組込みデータ型のJava-to-XMLマッピング

次の表に、サポートされているJavaデータ型と、それぞれに対応するXMLスキーマ・データ型をアルファベット順に示します。サポートされるユーザー定義のJavaデータ型については、「サポートされるユーザー定義のJavaデータ型」を参照してください。

表5-2 Javaデータ型とXMLスキーマ・データ型のマッピング

Javaデータ型(小文字はプリミティブ・データ型を示します) XMLスキーマ・データ型

boolean

boolean

byte

byte

double

double

float

float

long

long

int

int

javax.activation.DataHandler

base64Binary

java.awt.Image

base64Binary

java.lang.Object

anyType

java.lang.String

string

java.math.BigInteger

integer

java.math.BigDecimal

decimal

java.net.URI

string

java.util.Calendar

dateTime

java.util.Date

dateTime

java.util.UUID

string

javax.xml.datatype.XMLGregorianCalendar

anySimpleType

javax.xml.datatype.Duration

duration

javax.xml.namespace.QName

Qname

javax.xml.transform.Source

base64Binary

short

short


サポートされるユーザー定義のデータ型

以降の項の表には、jwscおよびwsdlc Antタスクでデータ・バインディング・アーティファクトを自動的に生成できるユーザー定義のXMLデータ型およびJavaデータ型(対応するJava表現またはXML表現など)をまとめます。

これらの表にないXMLデータ型またはJavaデータ型で、「サポートされる組込みデータ型」の表に示した組込みデータ型でもない型の場合は、ユーザー定義データ型のアーティファクトを手動で作成する必要があります。

サポートされるユーザー定義のXMLデータ型

次の表に、jwscおよびwsdlc AntタスクでサポートされるXMLスキーマ・データ型と、それぞれに対応するJavaデータ型またはマッピング・メカニズムをまとめます。

表5-3 サポートされているユーザー定義のXMLスキーマ・データ型

XMLスキーマ・データ型 同等のJavaデータ型またはマッピング・メカニズム

単純型および複合型の両方の要素を持つ<xsd:complexType>

JavaBean

単純なコンテンツを含む<xsd:complexType>

JavaBean

<xsd:complexType><xsd:attribute>

JavaBeanのプロパティ。

既存の単純型の制限による新しい単純型の派生

同等の単純型のJavaデータ型。

制限要素で使用されるファセット

シリアライゼーションおよびデシリアライゼーションで強制されないファセット。

<xsd:list>

リスト・データ型の配列。

wsdl:arrayType属性を使用した制限によってsoapenc:Arrayから派生する配列

arrayTypeデータ型と同等のJavaデータ型の配列。

制限によってsoapenc:Arrayから派生する配列

同等のJavaデータ型の配列。

単純型からの複合型の派生

_valueというプロパティのあるJavaBean。_valueの型は、この項の規則に従って単純型からマップされます。

<xsd:anyType>

java.lang.Object

<xsd:any>

java.lang.Object

<xsd:any[]>

java.lang.Object

<xsd:union>

ユニオン・メンバーの共通の親タイプ。

<xsi:nil>および<xsd:nillable>属性

Javaのnull値。

XMLデータ型が組込みデータ型で通常はJavaプリミティブ・データ型(intshortなど)にマップされる場合、そのXMLデータ型は実際には同等のオブジェクト・ラッパー型(java.lang.Integerjava.lang.Shortなど)にマップされます。

複合型の派生

Javaの継承を使用してマップされます。

抽象型

抽象Javaデータ型。


サポートされるユーザー定義のJavaデータ型

次の表に、jwscおよびwsdlc Antタスクでサポートされるユーザー定義のJavaデータ型と、それぞれに対応するXMLスキーマ・データ型をまとめます。

表5-4 サポートされるユーザー定義のJavaデータ型

Javaデータ型 同等のXMLスキーマ・データ型

サポートされている任意のデータ型をプロパティとするJavaBean

JavaBeanプロパティに対応する要素の<xsd:sequence>をコンテンツ・モデルとする<xsd:complexType>

サポートされるすべてのデータ型の配列および多次元配列(JavaBeanプロパティとして使用する場合)

maxOccurs属性がunboundedに設定されている<xsd:complexType>内の要素。

java.lang.Object

注意: 実行時オブジェクトのデータ型は既知の型でなければなりません。

<xsd:anyType>

java.util.Collection

リテラル配列。

java.util.List

リテラル配列。

java.util.ArrayList

リテラル配列。

java.util.LinkedList

リテラル配列。

java.util.Vector

リテラル配列。

java.util.Stack

リテラル配列。

java.util.Set

リテラル配列。

java.util.TreeSet

リテラル配列。

java.utils.SortedSet

リテラル配列。

java.utils.HashSet

リテラル配列。


JAXBアノテーションを使用したJava-to-XMLスキーマ・マッピングのカスタマイズ

必要に応じて、JAXBアノテーションを使用してJava-to-XMLスキーマ・マッピングのデフォルト・バインディング規則をオーバーライドすることができます。表5-5に、JavaオブジェクトをXMLにマッピングする方法を制御するためにJWSファイルに含めることができるJAXBマッピング・アノテーションを示します。これらの各アノテーションは、javax.xml.bind.annotationパッケージ(http://download.oracle.com/javaee/6/api/javax/xml/bind/annotation/package-summary.htmlを参照)で利用できます。

表5-5 JAXBマッピング・アノテーション

アノテーション

説明

@XmlAccessorType

デフォルトでフィールドやプロパティをマップするかどうかを指定します。フィールドおよびプロパティのデフォルト・シリアライゼーションの指定(@XmlAccessorTypeアノテーション)を参照してください。

@XmlElement

クラスに格納されているプロパティを、格納しているクラスがマップされているXMLスキーマの複合型のローカル要素へマップします。プロパティとローカル要素のマッピング(@XmlElement)を参照してください。

@XMLMimeType

image/jpegなど、プロパティのXML表現を制御するMIMEタイプとテキスト表現を関連付けます。MIMEタイプの指定(@XmlMimeTypeアノテーション)を参照してください。

@XmlRootElement

WebサービスのWSDLによって使用されるXMLスキーマのグローバル要素に最上位クラスをマップします。「最上位クラスとグローバル要素のマッピング(@XmlRootElement)」を参照してください。

@XmlSeeAlso

現在のクラスをバインディングする際に他のクラスをバインドします。複数のクラスのバインディング(@XmlSeeAlso)を参照してください。

@XmlType

XMLスキーマ型にクラスまたは列挙型をマップします。値クラスとスキーマ型のマッピング(@XmlType)を参照してください。


以下の項に、サポートされている組込みデータ型およびユーザー定義データ型のXMLスキーマに対するJavaオブジェクトのデフォルト・マッピングを示します。

JAXBアノテーションの例

次に、JAXBアノテーションの例を示します。

@XmlRootElement(name = "ComplexService", namespace ="http://examples.org")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "basicStruct", propOrder = {
    "intValue",
    "stringArray",
    "stringValue"
)
public class BasicStruct {
    protected int intValue;
    @XmlElement(nillable = true)
    protected List<String> stringArray;
    protected String stringValue;
    public int getIntValue() {
        return intValue;
    }
    public void setIntValue(int value) {
        this.intValue = value;
    }
    public List<String> getStringArray() {
        if (stringArray == null) {
            stringArray = new ArrayList<String>();
        }
        return this.stringArray;
    }

    public String getStringValue() {
        return stringValue;
    }
    public void setStringValue(String value) {
        this.stringValue = value;
    }
}

フィールドおよびプロパティのデフォルト・シリアライゼーションの指定(@XmlAccessorTypeアノテーション)

@XmlAccessorTypeアノテーションは、フィールドやプロパティをデフォルトでマッピングするかどうかを指定します。このアノテーションは、次のJavaプログラム要素に対して指定できます。

  • パッケージ

  • 最上位クラス

@XmlAccessorTypeは、@XmlType (値クラスとスキーマ型のマッピング(@XmlType))および@XmlRootElement (最上位クラスとグローバル要素のマッピング(@XmlRootElement))アノテーションで指定されます。

次の表に、@XmlAccessorTypeアノテーションに渡すことができる省略可能な要素を示します。

表5-6 @XMLAccessorTypeアノテーションの省略可能な要素

要素 説明

value

XMLAccessType.valuevalueを指定します。valueは以下のいずれかの値です。

  • FIELD - フィールドがXMLにバインドされます。

  • PROPERTY - JavaBeanプロパティおよびアノテーション付きのフィールドがXMLにバインドされます。

  • PUBLIC_MEMBER - パブリック・フィールド、アノテーション付きのフィールド、およびJavaBeanプロパティがXMLにバインドされます。これがデフォルトです。

  • NONE - アノテーション付きのフィールドとプロパティのみがXMLにバインドされます。


詳細は、http://download.oracle.com/javaee/6/api/javax/xml/bind/annotation/XmlAccessorType.htmlにあるJavadocの「javax.xml.bind.annotation.XmlAccessorType」を参照してください。例については、JAXBアノテーションの例の項を参照してください。

プロパティとローカル要素のマッピング(@XmlElement)

@XmlElementアノテーションは、クラスに格納されているプロパティを、格納しているクラスがマップされているXMLスキーマの複合型のローカル要素へマップします。このアノテーションは、次のJavaプログラム要素に対して指定できます。

  • JavaBeanプロパティ

  • 非静的な永続フィールド

次の表に、@XmlElementアノテーションに渡すことができるアノテーション要素を示します。

表5-7 @XMLElementアノテーションの省略可能な要素

要素 説明

name

JavaBeanのプロパティを表すXML要素のローカル名。この要素のデフォルトは、JavaBeanプロパティ名。

namespace

JavaBeanのプロパティを表すXML要素のネームスペース。デフォルトのネームスペースは、格納しているクラスのネームスペースから派生します。

nillable

nullを許容するように要素宣言をカスタマイズします。


詳細は、http://download.oracle.com/javaee/6/api/javax/xml/bind/annotation/XmlElement.htmlにあるJavadocの「javax.xml.bind.annotation.XmlElement」を参照してください。

MIMEタイプの指定(@XmlMimeTypeアノテーション)

@XmlMimeTypeアノテーションは、プロパティのXML表現を制御するMIMEタイプを指定します。このアノテーションは、XMLのxsd:base64BinaryバイナリにバインドされるImageSourceなどのデータ型に対して指定できます。

次の表に、@XmlMimeTypeアノテーションに渡すことができる必須の要素を示します。

表5-8 @XMLMimeTypeアノテーションの必須要素

要素 説明

value

image/jpegtext/xmlなど、MIMEタイプのテキスト表現を指定します。


詳細は、http://download.oracle.com/javaee/6/api/javax/xml/bind/annotation/XmlMimeType.htmlにあるJavadocの「javax.xml.bind.annotation.XmlMimeType」を参照してください。

最上位クラスとグローバル要素のマッピング(@XmlRootElement)

@XmlRootElementアノテーションは、WebサービスのWSDLによって使用されるXMLスキーマのグローバル要素に最上位クラスをマップします。このアノテーションは、次のJavaプログラム要素に対して指定できます。

  • 最上位クラス

  • 列挙型

@XmlRootElementは、@XmlType (値クラスとスキーマ型のマッピング(@XmlType))および@XmlAccessorType(フィールドおよびプロパティのデフォルト・シリアライゼーションの指定(@XmlAccessorType Annotation))アノテーションで指定されます。

次の表に、@XmlRootElementアノテーションに渡すことができる省略可能な要素を示します。

表5-9 @XmlRootElementアノテーションの省略可能な要素

要素 説明

name

XML要素のローカル名。この要素のデフォルトはクラス名です。

namespace

XML要素のネームスペース。デフォルトのネームスペースは、クラスのパッケージから派生します。


詳細は、http://download.oracle.com/javaee/6/api/javax/xml/bind/annotation/XmlRootElement.htmlにあるJavadocの「javax.xml.bind.annotation.XmlRootElement」を参照してください。例については、JAXBアノテーションの例の項を参照してください。

複数のクラスのバインディング(@XmlSeeAlso)

@XmlSeeAlsoアノテーションは、現在のクラスをバインドする際にクラスのリストをバインドします。次の表に、@XMLRootElementアノテーションに渡すことができる省略可能な要素を示します。

表5-10 @XmlSeeAlsoアノテーションの省略可能な要素

要素 説明

value

現在のクラスをバインドする際にJAXBで使用されるクラスのリスト。


値クラスとスキーマ型のマッピング(@XmlType)

@XmlTypeアノテーションは、クラスまたは列挙型をXMLスキーマ型にマップします。型は単純型または複合型の場合があります。このアノテーションは、次のJavaプログラム要素に対して指定できます。

  • 最上位クラス

  • 列挙型

@XmlTypeは、@XmlRootElement (最上位クラスとグローバル要素のマッピング(@XmlRootElement))および@XmlAccessorType (フィールドおよびプロパティのデフォルト・シリアライゼーションの指定(@XmlAccessorType Annotation))アノテーションで指定されます。

次の表に、@XmlTypeアノテーションに渡すことができる省略可能な要素を示します。

表5-11 @XmlTypeアノテーションの省略可能な要素

要素 説明

name

クラスのマップ先のXMLスキーマ型の名前。

namespace

XMLスキーマ型のターゲット・ネームスペースの名前。デフォルトは、クラスを格納しているパッケージがマップされるターゲット・ネームスペース。

propOrder

クラスで定義されているJavaBeanプロパティ名のリスト。このリストは、クラスがXMLスキーマの複合型へマップされる際のXMLスキーマ要素の順番を定義します。リスト内の各名前は、JavaBeanプロパティのJava識別子の名前です。すべてのJavaBeanプロパティをリストする必要があります。


詳細は、http://download.oracle.com/javaee/6/api/javax/xml/bind/annotation/XmlType.htmlにあるJavadocの「javax.xml.bind.annotation.XmlType」を参照してください。例については、JAXBアノテーションの例の項を参照してください。

バインディング宣言を使用したXML Schema-to-Javaマッピングのカスタマイズ

WSDLファイルの分散的特性から、現在のアプリケーションの要件を満たすためにその中身を常に制御または変更できるとは限りません。たとえば、WSDLファイルを所有していなかったり、パートナがすでに使用している場合は、変更を加えるのは非現実的または不可能です。

WSDLファイルを直接編集できない場合、カスタム・バインディング宣言を指定することによって、WSDLコンポーネントがJavaオブジェクトへマップされる方法をカスタマイズすることができます。バインディング宣言を使用すると、非同期性、ラッパー形式など、特定の機能を制御したり、XMLスキーマのカスタマイズにより生成されるJAXBデータ・バインディング・アーティファクトを制御することもできます。

バインディング宣言は以下のいずれかの方法で定義することができます。

選択する方法に関係なく、どのバインディング宣言も意味的には同じです。

カスタム・バインディング宣言は、次の図に示すようにスコープに関連付けられます。

図5-2 カスタム・バインディング宣言のスコープ

図5-2の説明が続きます
「図5-2 カスタム・バインディング宣言のスコープ」の説明

次の表で、各スコープの意味を説明します。

図5-12 カスタム・バインディング宣言のスコープ

スコープ 定義

グローバル・スコープ

グローバル・スコープのカスタマイズ値を表します。具体的には:

  • JAX-WSバインディング宣言の場合、ルート要素の一部として定義されるカスタマイズ値を表します。「ルート要素の指定」を参照してください。

  • JAXBアノテーションの場合、<globalBindings>バインディング宣言内に格納されるカスタマイズ値を表します。グローバル・スコープの値は、ソース・スキーマのすべてのスキーマ要素の他に、含まれる、またはインポートされるあらゆるスキーマに適用されます。

スキーマ・スコープ

<schemaBindings>バインディング宣言内に格納されるJAXBカスタマイズ値を表します。スキーマ・スコープの値は、スキーマのターゲット・ネームスペース内の要素に適用されます。

注意: このスコープが適用されるのはJAXBバインディング宣言のみです。

定義スコープ

グローバル宣言または型定義のバインディング宣言で定義されるJAXBカスタマイズ値を表します。定義スコープの値は、グローバル宣言または型定義を参照する要素に適用されます。

注意: このスコープが適用されるのはJAXBバインディング宣言のみです。

コンポーネント・スコープ

アノテーションが付けられたスキーマ要素またはWSDLに適用されるカスタマイズ値を表します。


カスタム・バインディング宣言のスコープは、以下の継承およびオーバーライド規則に準拠します。

以下の項では、カスタム・バインディング宣言の作成方法と、標準のカスタム・バインディング宣言について説明します。

カスタム・バインディング宣言の使用に関する詳細は、以下を参照してください。

外部バインディング宣言ファイルの作成

特定のWSDLまたはXMLスキーマ・ドキュメントのすべてのバインディング宣言を格納する外部のバインディング宣言ファイルを作成します。次に、バインディング宣言ファイルをwsdlcjwsc、またはclientgen Antタスクの<binding>子要素に渡します。

以降の項で説明する内容は、次のとおりです。

JAX-WSバインディング宣言を使用した外部バインディング宣言ファイルの作成

以下の項では、JAX-WSバインディング宣言ファイルのルート要素および子要素の指定方法について説明します。定義可能なカスタム・バインディング宣言については、「JAX-WSカスタム・バインディング宣言」を参照してください。

ルート要素の指定

jaxws:bindings宣言は、その他すべてのバインディング宣言のルートであり、WSDLファイルの場所およびXMLスキーマが従うネームスペースhttp://java.sun.com/xml/ns/jaxwsを定義します。

ルート宣言は次の形式で指定します。

<jaxws:bindings
    wsdlLocation="uri_of_wsdl"
    jaxws:xmlns="http://java.sun.com/xml/ns/jaxws">

uri_of_wsdlにWSDLファイルのURIを指定します。

表5-5で定義しているパッケージ、ラッパー形式、および非同期性マッピングのカスタマイズは、外部カスタマイズ・ファイルにおけるルート・バインディング宣言の一部として「グローバル」に定義できます。グローバル・バインディングは、wsdlLocation属性によって参照されるWSDL内のwsdl:definitionのスコープ全体に適用されます。

次に、パッケージ名、ラッパー形式、非同期マッピングのカスタマイズを定義するルート・バインディング要素の例を示します。

<jaxws:bindings
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
  wsdlLocation="http://localhost:7001/simple/SimpleService?WSDL"
  xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">
    <package name="example.webservices.simple.simpleservice">
    <enableWrapperStyle>true</enableWrapperStyle>
    <enableAsyncMapping>false</enableAsyncMapping>
</jaxws:bindings>
子要素の指定

ルートのjaxws:bindings要素には、子要素を含めることができます。カスタマイズしているWSDLノードは、node属性でXPath式を渡すことによって指定します。

コンパイルされたWSDLファイル内に埋め込まれたXMLスキーマは、標準のJAXBバインディングを使用してカスタマイズすることができます。詳細は、JAX-WS WSDL Customizations (http://jax-ws.java.net/nonav/2.1.2/docs/customizations.html)の「XML Schema Customization」を参照してください。定義可能なカスタムJAXBバインディング宣言については、「JAXBカスタム・バインディング宣言」を参照してください。

たとえば、次の例では、WSDLドキュメントのwsdl:definitionsノードのパッケージ名をexamples.webservices.complex.complexserviceとして定義しています。

<jaxws:bindings
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
  wsdlLocation="http://localhost:7001/simple/SimpleService?WSDL
  xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">
  <jaxws:bindings node="wsdl:definitions" 
            xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    <jaxws:package name="examples.webservices.simple.simpleservice"/>
</bindings>

JAXBバインディング宣言を使用した外部バインディング宣言ファイルの作成

JAXBバインディング宣言ファイルは、ネームスペースhttp://java.sun.com/xml/ns/jaxbのXMLスキーマに従うXMLドキュメントです。以下の項では、JAXBバインディング宣言ファイルのルート要素および子要素の指定方法について説明します。定義可能なカスタム・バインディング宣言については、「JAXBカスタム・バインディング宣言」を参照してください。

ルート要素の指定

jaxb:bindings宣言は、その他すべてのバインディング宣言のルートであり、ルート宣言は次の形式で指定します。

<jaxb:bindings
    schemaLocation="uri_of_schema">

uri_of_schemaにXMLスキーマ・ファイルのURIを指定します。

子要素の指定

ルートのjaxb:bindings要素には、子要素を含めることができます。カスタマイズしているスキーマ・ノードは、node属性でXPath式を渡すことによって指定します。

たとえば、次の例では、パッケージ名をexamples.webservices.simple.simpleserviceとして定義しています。

<jaxb:bindings
   schemaLocation="simpleservice.xsd">
   <jaxb:bindings node="//xs:simpleType[@name='value1']">
       <jaxb:package name="examples.webservices.simple.simpleservice"/>
   </jaxb:bindings>
</jaxb:bindings>

バインディング宣言の埋め込み

バインディング宣言は、以下のいずれかの方法でWSDLファイルに埋め込むことができます。

WSDLファイルへのJAX-WSまたはJAXBバインディング宣言の埋め込み

バインディング宣言は、WSDL拡張としてjaxws:bindings要素を使用してWSDLファイルに埋め込むことができます。定義可能なカスタム・バインディング宣言については、「JAX-WSカスタム・バインディング宣言」を参照してください。

たとえば、次の例では、SimpleServiceImplサービス・エンドポイント・インタフェース(またはポート)のクラス名をSimpleServiceとして定義しています。

<wsdl:portType name="SimpleServiceImpl">
     <jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">
            <jaxws:class name="SimpleService"/>
     </jaxws:bindings>
</wsdl:portType>

このバインディング宣言を指定しなかった場合、サービス・エンドポイント・インタフェースのデフォルト・クラス名は、wsdl:portType名、すなわちSimpleServiceImplに設定されます。

コンパイルされたWSDLファイル内に埋め込まれたXMLスキーマは、標準のJAXBバインディングを使用してカスタマイズすることができます。詳細は、JAX-WS WSDL Customizations (http://jax-ws.java.net/nonav/2.1.2/docs/customizations.html)の「XML Schema Customizations」を参照してください。定義可能なカスタムJAXBバインディング宣言については、「JAXBカスタム・バインディング宣言」を参照してください。

XMLスキーマへのJAXBバインディング宣言の埋め込み

JAXBカスタム宣言は、次に示すようにXMLスキーマの<appinfo>要素内に埋め込むことができます。

<xs:annotation>
    <xs:appinfo>
        <binding declaration>
    </xs:appinfo>
</xs:annotation>

たとえば、次の例では、スキーマのパッケージ名を定義しています。

<schema xmlns="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.w3.org/2001/XMLSchema"
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    jaxb:version="2.0">
    <annotation>
        <appinfo>
           <jaxb:schemaBindings>
            <jaxb:package name="example.webservices.simple.simpleservice"/>
           </jaxb:schemaBindings>
        </appinfo>
    </annotation>
</schema>

JAX-WSカスタム・バインディング宣言

次の表に、一般的なJAX-WSのカスタマイズをまとめます。JAX-WSカスタム・バインディング宣言の完全なリストについては、http://jax-ws.java.net/nonav/2.1.2/docs/customizations.htmlにあるJAX-WS WSDL Customizationを参照してください。

表5-13 JAX-WSカスタム・バインディング宣言

カスタマイズ 説明

パッケージ名

パッケージ名の定義には、jaxws:packageバインディング宣言を使用します。

このカスタマイズを指定しない場合、wsdlc Antタスクが、WSDLのtargetNamespaceに基づいてパッケージ名を生成します。このデータ・バインディングのカスタマイズは、wsdlcjwsc、またはclientgen AntタスクのpackageName属性によってオーバーライドされます。詳細は、『Oracle WebLogic Server WebLogic Webサービス・リファレンス』の「wsdlc」を参照してください。

このバインディング宣言は、「外部バインディング宣言ファイルの作成」で説明するようにルート・バインディング要素の一部として指定したり、次の例で示すようにwsdl:definitionsノード上で指定することができます。

<bindings
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
  wsdlLocation=
  "http://localhost:7001/simple/SimpleService?WSDL"
  xmlns="http://java.sun.com/xml/ns/jaxws">
  <bindings node="wsdl:definitions" 
          xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    <package name="example.webservices.simple.simpleService"/>
</bindings>

ラッパー形式規則

WSDL操作のパラメータや戻り値の型の生成方法を制御するラッパー形式規則を有効化または無効化するには、jaxws:enablesWrapperStyleバインディング宣言を使用します。

このバインディング宣言は、「外部バインディング宣言ファイルの作成」で説明するようにルート・バインディング要素の一部として指定したり、以下のいずれかのノード上で指定することができます。

  • wsdl:definitions - すべてのwsdl:portType属性のすべてのwsdl:operationsに適用されます。

  • wsdl:portType - wsdl:portType内のすべてのwsdl:operationsに適用されます。

  • wsdl:operation - wsdl:operationにのみ適用されます。

次の例では、wsdl:definitionsノードのラッパー形式規則を無効化しています。

<bindings
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
wsdlLocation="http://localhost:7001/simple/SimpleService?WSDL"
  xmlns="http://java.sun.com/xml/ns/jaxws">
  <bindings node="wsdl:definitions" 
          xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    <enableWrapperStyle>
       false
    </enableWrapperStyle>
</bindings>

非同期性

WSDLファイルのコンパイル時にclientgen Antタスクに、通常の同期メソッドとともに非同期のポーリング操作およびコールバック操作を生成させるには、jaxws:enableAsycMappingバインディング宣言を使用します。

このバインディング宣言は、「外部バインディング宣言ファイルの作成」で説明するようにルート・バインディング要素の一部として指定したり、以下のいずれかのノード上で指定することができます。

  • wsdl:definitions - すべてのwsdl:portType属性のすべてのwsdl:operationsに適用されます。

  • wsdl:portType - wsdl:portType内のすべてのwsdl:operationsに適用されます。

  • wsdl:operation - wsdl:operationにのみ適用されます。

次の例では、非同期のポーリング操作およびコールバック操作を無効化しています。

<bindings
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
wsdlLocation="http://localhost:7001/simple/SimpleService?WSDL"
  xmlns="http://java.sun.com/xml/ns/jaxws">
  <bindings node="wsdl:definitions" 
          xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    <enableAsyncMapping>
       false
    </enableAsyncMapping>
</bindings>

プロバイダ

プロバイダ・インタフェースとして一部をマークするには、jaxws:providerバインディング宣言を使用します。このバインディング宣言は、wsdl:portTypeの一部として指定できます。このバインディング宣言は、WSDLファイルから開始するサービスの開発時に適用されます。

クラス名

クラス名の定義には、jaxws:classバインディング宣言を使用します。このバインディング宣言は、以下のいずれかのノードに対して指定できます。

  • wsdl:portType - インタフェース・クラス名を定義します。

  • wsdl:fault - フォールト・クラス名を定義します。

  • soap:headerfault - 例外クラス名を定義します。

  • wsdl:service - 実装クラス名を定義します。

次の例では、実装クラスのクラス名を定義しています。

<bindings node="wsdl:definitions/wsdl:service[@name='SimpleService']">
    <class name="myService"></class> 
</bindings>

メソッド名

生成されたServiceクラスのポート・アクセサ・メソッドまたはサービス・エンドポイント・インタフェースの生成されたJavaメソッドの名前をカスタマイズするには、jaxws:methodバインディング宣言を使用します。

次の例では、wsdl:operation EchoHelloのJavaメソッド名を定義しています。

<bindings node="wsdl:definitions/wsdl:portType[@name='SimpleServiceImpl']/wsdl:operation[@name='EchoHello']">
    <method name="Greeting"></method> 
</bindings>

Javaパラメータ名

生成されたJavaメソッドのパラメータ名をカスタマイズするには、jaxws:parameterバインディング宣言を使用します。この宣言を使用すると、wsdl:portTypewsdl:operationのメソッド・パラメータを変更できます。

次の例では、wsdl:operation echoHelloのJavaメソッド名を定義しています。

<bindings node="wsdl:definitions/wsdl:portType[@name='SimpleServiceImpl']/wsdl:operation[@name='EchoHello']">
    <parameter part="definitions/message[@name='EchoHello']/
    part[@name='parameters']" element="hello"
    name="greeting"/> 
</bindings>

Javadoc

パッケージ、クラス、またはメソッドのJavadocテキストを指定するには、jaxws:javadocバインディング宣言を使用します。

たとえば、次の例では、メソッド・レベルでJavadocを定義しています。

<bindings node="wsdl:definitions/wsdl:portType[@name='SimpleServiceImpl']/wsdl:operation[@name='EchoHello']">
    <method name="Hello">
       <javadoc>Prints hello.</javadoc>
    </method> 
</bindings>

ハンドラ・チェーン

ハンドラをカスタマイズまたは追加するには、javaee:handlerchainバインディング宣言を使用します。インライン・ハンドラは、Web Services Metadata for the Java Platform仕様(JSR) (http://www.jcp.org/en/jsr/detail?id=181)で定義されているハンドラ・チェーン構成に従う必要があります。


JAXBカスタム・バインディング宣言

次の表に、一般的なJAXBのカスタマイズをまとめます。


注意:

次の表には、開始時に役立つJAXBカスタム・バインディング宣言のみをまとめています。すべてのJAXBカスタム・バインディング宣言の完全なリストと説明については、JAXB仕様、または、Java EE 5 Tutorialの 「Customizing JAXB Bindings」(http://jcp.org/en/jsr/detail?id=222)を参照してください。


表5-14 JAXBカスタム・バインディング宣言

カスタマイズ 説明

グローバル・バインディング

グローバル・スコープでバインディング宣言を定義するには、<globalBindings>バインディング宣言を使用します(図5-2を参照)。

<globalBindings>バインディング宣言には属性および要素を指定することができます。たとえば、以下のバインディング宣言では次の属性および要素を定義しています。

  • collectionType属性: java.util.Listインタフェースを実装し、生成される実装内のすべてのリストを表すために使用される型クラスmyArrayを指定します。

  • generateIsSetMethod属性:ゲッターおよびセッター・プロパティ・メソッドに対応するisSet()メソッドを生成します。

  • javaType要素: XMLスキーマのアトミック・データ型とJavaデータ型(組込みデータ型またはアプリケーション固有のデータ型)のバインディングをカスタマイズします。

<jaxb:globalBindings
    collectionType ="java.util.myArray"
    generateIsSetMethod="false">
    <jaxb:javaType name="java.util.Date"
        xmlType="xsd:date"
    </jaxb:javaType>
</jaxb:globalBindings>

スキーマ・バインディング

スキーマ・スコープでバインディング宣言を定義するには、<schemaBindings>バインディング宣言を使用します(図5-2を参照)。

例として、次の表の「パッケージ名」に関する説明を参照してください。

パッケージ名

スキーマのパッケージ名を定義するには、<schemaBindings>バインディング宣言の<package>要素を使用します(表5-12を参照)。

このカスタマイズを指定しない場合、wsdlc Antタスクが、WSDLのtargetNamespaceに基づいてパッケージ名を生成します。このデータ・バインディングのカスタマイズは、wsdlcjwsc、またはclientgen AntタスクのpackageName属性によってオーバーライドされます。詳細は、『Oracle WebLogic Server WebLogic Webサービス・リファレンス』の「wsdlc」を参照してください。

たとえば、次の例では、simpleservice.xsdファイルから生成されるすべてのJAXBクラスのパッケージ名を定義しています。

<jaxb:bindings
   xmlns:xs="http://www.w3.org/2001/XMLSchema"
   schemaLocation="simpleservice.xsd"
   node="/xs:schema">
   <jaxb:schemaBindings>
      <jaxb:package name="examples.jaxb"/>
   </jaxb:schemaBindings>
</jaxb:bindings>

次に、インポートされたXMLスキーマのパッケージ名を定義する方法を示します。

<jaxb:bindindgs
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    node="//xs:schema/xs:import[@namespace='http://examples.webservices.org/complexservice']">
    <jaxb:schemaBindings>
        <jaxb:package name="examples.jaxb"/>
        </jaxb:schemaBindings>
    </jaxb:bindings>

クラス名

スキーマ要素のクラス名を定義するには、<class>バインディング宣言を使用します。

次の例では、xsd:complexTypeのクラス名を定義しています。

<xs:complexType name="ComplexType">
    <xs:annotation><xs:appinfo>
           <jaxb:javadoc>This is my class.</jaxb:javadoc>
       </jaxb:class>
    </xs:appinfo></xs:annotation>
</xs:complexType>

Javaプロパティ名

スキーマ要素のプロパティ名を定義するには、<property>バインディング宣言を使用します。

次の例では、Javaプロパティ名を定義する方法について説明します。

<jaxb:bindindgs
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    node="//xs:schema/">
    <jaxb:schemaBindings>
        <jaxb:property generateIsSetMethod="true"/> 
    </jaxb:schemaBindings>
</jaxb:bindings>

Javaデータ型

XMLスキーマのアトミック・データ型とJavaデータ型(組込みデータ型またはアプリケーション固有のデータ型)のバインディングをカスタマイズするには、<javaType>バインディング宣言を使用します。

たとえば、グローバル・バインディング(上記の)を参照してください。

Javadoc

要素のJavadocを指定するには、<class>または<property>バインディング宣言の<javadoc>子要素を使用します。

例:

<xs:complexType name="ComplexType">
    <xs:annotation><xs:appinfo>
<jaxb:class name="MyClass"> 
           <jaxb:javadoc>This is my class.</jaxb:javadoc>
       </jaxb:class>
    </xs:appinfo></xs:annotation>
</xs:complexType>

Glassfish RI JAXBデータ・バインディング・プロバイダおよびJAXBプロバイダの使用

Glassfish RI JAXBデータ・バインディング・プロバイダおよびJAXBプロバイダは、標準のGlassfish JAXB実装を提供します。これは、以前のWebLogic ServerリリースではデフォルトのJAXBプロバイダでした。必要に応じてサーバー全体またはアプリケーション単位でGlassfish RIプロバイダをリストアできます。

JAXBデータ・バインディング・プロバイダおよびJAXBプロバイダは、いずれもEclipseLink MOXyをデフォルトで使用しますが、2つの異なるエンティティです。JAXBデータ・バインディング・プロバイダは、Webサービス・ツールおよびランタイムによって使用され、JavaエンドポイントからのWSDL生成などのタスクをJWSタスクで行われるのと同様に実行します。また、SOAPメッセージのコンテンツを実行時にマーシャリングおよびアンマーシャリングします。一方、JAXBプロバイダは、他のすべてのJAXB関連タスクに使用するJAXBContextプロバイダを指定します。JAXBプロバイダの構成は、一部のWebサービス・ツール(WSDLファイルおよびスキーマ・ファイルからのJavaクラスの生成など)に適用されますが、他のすべてのJAXBの用途も含まれます。これらの2つのプロバイダは個別に構成可能です。たとえば、データ・バインディングではEclipseLink MOXyを保持し、他のJAXBタスクではGlassfish RI JAXBプロバイダに戻すことができます。

データ・バインディングおよびJAXBプロバイダは、WL_HOME/server/lib/weblogic.jarに含まれる次のJava Service Provider Interface(SPI)ファイルを使用して構成します。

全体レベルおよびアプリケーション・レベルでの構成については次の項で説明します。

サーバー全体レベルでのデータ・バインディングおよびJAXBプロバイダの構成

WebLogic Serverディストリビューションには、デフォルトのデータ・バインディング構成のオーバーライドを簡単にするために、次のjarファイルが用意されています。

modules/databinding.override_1.0.0.0.jar

このjarファイルは、デフォルトではクラスパスに含まれていません。Glassfish RIデータ・バインディングおよびJAXBプロバイダの設定をリストアするには、WebLogic Serverの開始スクリプトを編集してこのjarファイルをクラスパスに付加します。

ツールおよびクライアントでは、このjarファイルをAntスクリプトまたは別のビルド環境全体に適用できます。

databinding.override_1.0.0.0.jarファイルはデータ・バインディング・プロバイダとJAXBプロバイダの両方をオーバーライドすることに注意してください。これらのプロバイダの両方ではなく、いずれかをオーバーライドする場合は、オーバーライドするサービス・プロバイダのエントリのみを含む簡単なjarファイルを作成し、このファイルをクラスパスで先に配置することで実現できます。

たとえば、Glassfish RI JAXBプロバイダのみを構成するには次のようにします。

  1. META-INF/services/javax.xml.bind.JAXBContextという名前のファイルを作成し、次のGlassfish RI JAXBプロバイダの単一エントリを含めます。

    com.sun.xml.bind.v2.ContextFactory

  2. jarファイル(jaxb_override.jarなど)を作成し、ステップ1で作成したファイルを追加します。

  3. Glassfish JAXBプロバイダを使用するクラスパスにこのjarファイルを付加します。

Glassfish RIデータ・バインディング・プロバイダのみを構成する場合も同じ手順を適用します。ただしこの場合、ステップ1で作成するファイルの名前をMETA-INF/services/com.sun.xml.ws.spi.db.BindingContextFactoryとし、次のGlassfish RIデータ・バインディング・プロバイダの単一エントリを含めます。

com.sun.xml.ws.db.glassfish.JAXBRIContextFactory.


注意:

データ・バインディング・プロバイダを構成すると、実行時のデータ・バインディングに加えて他の動作にも影響が及ぶ場合があります。たとえば、WebLogic Serverは実行時にデータ・バインディング・プロバイダを使用してWSDLを生成します。一方で、JAXBプロバイダを直接呼び出すと、実行時にSOAPフォルトが発生する場合があります。


オーバーライド用のjarファイルをクラスパスに配置するかわりに、Javaシステム・プロパティを直接編集できます。詳細は、「JAXB用Javaシステム・プロパティの構成」を参照してください。

アプリケーション・レベルでのデータ・バインディングおよびJAXBプロバイダの構成

単一のWebアプリケーションのデータ・バインディングおよびJAXBプロバイダを構成するには、WebLogic Serverが提供するフィルタリング・ロード・メカニズムを使用します。このメカニズムを使用すると、アプリケーションのクラスパスにある特定のアプリケーション・クラスとリソースを検索するときにシステム・クラスパスの検索を省略できます。具体的には、そのアプリケーションのEARまたはビルド出力ディレクトリのweblogic-application.xmlファイルで<prefer-application-resources>タグを使用します。

たとえば、アプリケーションに対してGlassfish RIデータ・バインディング・プロバイダを構成するには次のようにします。

  1. 次の例に示すように、weblogic-application.xmlファイルを編集して、データ・バインディング・リソースのエントリを含めます。

    <prefer-application-resources> <resource-name>META-INF/services/com.sun.xml.ws.spi.db.BindingContextFactory</resource-name>
    </prefer-application-resources>
    
  2. META-INF/services/com.sun.xml.ws.spi.db.BindingContextFactoryという名前のファイルを作成し、対象プロバイダのエントリを含めます。この場合は、com.sun.xml.ws.db.glassfish.JAXBRIContextFactoryです。

  3. ステップ2で作成したファイルをビルド出力ディレクトリに追加するか、EARファイルのエントリとして追加します。

Glassfish RI JAXBプロバイダを構成するには、同じ手順でJAXBプロバイダに適した値を使用します。具体的には、リソース名META-INF/services/javax.xml.bind.JAXBContextweblogic-application.xmlファイルに追加し、このファイルのプロバイダ名にcom.sun.xml.ws.db.glassfish.JAXBRIContextFactoryを設定します。

WebLogic Serverにおけるフィルタリング・ロード・メカニズムの詳細は、『Oracle WebLogic Serverパフォーマンスおよびチューニング』のフィルタリング・ローダー・メカニズムに関する項を参照してください。

JAXB用Javaシステム・プロパティの構成

Javaシステム・プロパティを構成してGlassfish RIプロバイダに戻したり、すでに戻されている場合はデフォルトのEclipseLink MOXyプロバイダを構成したりすることができます。


注意:

ある特定の状況では、間接的に呼び出されたJavaインスタンス(Antタスクからフォークされたクライアントなど)へのシステム・プロパティの伝播が困難な場合があります。このような場合、使用している環境でプロパティが確実に伝播されるようにする必要があります。


Glassfish RIデータ・バインディングおよびJAXBプロバイダを構成するには、表5-15に示すようにJavaシステム・プロパティを設定します。

表5-15 Glassfish RIプロバイダ用のJavaシステム・プロパティの設定

対象Javaシステム・プロパティ 設定値

com.sun.xml.ws.spi.db.BindingContextFactory

com.sun.xml.ws.db.glassfish.JAXBRIContextFactory

javax.xml.bind.JAXBContext

com.sun.xml.bind.v2.ContextFactory


デフォルトのEclipseLink MOXyプロバイダを構成するには、表5-16に示すようにJavaシステム・プロパティを設定します。

表5-16 EclipseLink MOXyプロバイダ用のJavaシステム・プロパティの設定

対象Javaシステム・プロパティ 設定値

com.sun.xml.ws.spi.db.BindingContextFactory

com.sun.xml.ws.db.toplink.JAXBContextFactory

javax.xml.bind.JAXBContext

org.eclipse.persistence.jaxb.JAXBContextFactory