Webサービス注釈の使用方法

WSDLファイルを生成するには、Enterprise JavaBeansインタフェースで次のWebサービス注釈を使用する必要があります。これらの注釈の使用については、『JSR 224: Java API for XML-Based Web Services (JAX-WS) 2.0』で説明されています。詳細は、次のURLを参照してください。

http://www.jcp.org/en/jsr/detail?id=224

また、Enterprise JavaBeansバインディング・レイヤーで現在サポートされているのは、ドキュメント/リテラルWSDLのみです。

表38-1で、使用する注釈について説明します。

表38-1 注釈

名前 説明

@javax.jws.WebResult;

@javax.jws.WebParam;

Webサービス・メッセージ・パートおよびXML要素に対する個々のパラメータのマッピングをカスタマイズします。正規化されたメッセージ・ペイロードからの適切なXML要素にSDOパラメータをマップするために、両方の注釈が使用されます。

@javax.jws.Oneway;

メソッドを、入力メッセージのみで出力メッセージのない一方向のWebサービス操作として指定します。この場合、Enterprise JavaBeansバインディング・コンポーネントは、リプライを想定しません。

@javax.xml.ws.RequestWrapper;

@javax.xml.ws.ResponseWrapper;

Enterprise JavaBeansバインディング・コンポーネントに対して、デシリアライズ・オブジェクトをアンラップするかどうか、またはシリアル化の前にラッパーを作成する必要があるかどうかを指示します。

Enterprise JavaBeansインタフェースは、既存のWSDLから生成するか、または他の手段で取得できます。WSDLが存在しない場合は生成できます。

@javax.xml.ws.WebFault;

WSDLフォルトをJava例外にマップします。この注釈は、WSDLフォルト・メッセージで参照するグローバル要素から生成される、JAXBタイプのマーシャリング時に使用されるフォルト要素名を取得します。

@oracle.webservices.PortableWebService

WSDLに使用するtargetNamespaceおよびserviceNameを指定します。例:

@PortableWebService(
targetNamespace = "http://hello.demo.oracle/",
serviceName = "HelloService")

serviceNameは、WSDLファイル名として使用されます。それが注釈内に指定されていない場合、かわりにサービス・エンドポイント・インタフェース(SEI)クラス名が使用されます。

適切なメソッド・パラメータ注釈の追加

メッセージ要素およびタイプのWSDLへのマップ方法を制御します。たとえば、インタフェースがdoc/lit/bareスタイルにある場合は、メソッドに次の注釈を追加します。

@WebMethod
@SOAPBinding(parameterStyle =
SOAPBinding.ParameterStyle.BARE)

@SDODatabinding

スキーマを生成するかわりに既存のスキーマを使用するために、インタフェース・クラスに追加します。例:

@SDODatabinding(schemaLocation = "etc/HelloService.xsd")

次の例は、注釈を使用したEnterprise JavaBeansインタフェースの例を示しています。

@Remote
@PortableWebService(targetNamespace = "http://www.example.org/customer-example",
 serviceName = "CustomerSessionEJBService")
@SDODatabinding(schemaLocation = "customer.xsd")
public interface CustomerSessionEJB {
     @WebMethod(operationName="createCustomer")
   @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
   @WebResult(targetNamespace = "http://www.example.org/customer-example",
 partName = "parameters", name = "customer")
   CustomerType createCustomer();
     @WebMethod(operationName="addPhoneNumber")
   @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
   @WebResult(targetNamespace = "http://www.example.org/customer-example",
 partName = "parameters", name = "customer")
   CustomerType addPhoneNumber(@WebParam(targetNamespace =
 "http://www.example.org/customer-example", partName = "parameters", name =
 "phone-number")PhoneNumber phNumber);
}