WsdlCustomizerJa

NetBeans 5.5 内で WSDL をカスタマイズ

Contents


   JAX-WS 2.0 仕様は、Java マッピングと特定の機能の制御に対する、
   標準 XML に基づいたカスタマイズを規定します。
   これらのカスタマイズ、または宣言の結合は、
   Java にマップ出来るほとんどすべての WSDL コンポーネントをカスタマイズできます。
   例えばサービス終点インタフェースクラス、メソッド名、パラメータ名、例外クラス、その他。
   これらの宣言の結合で行うことが出来るもう別の重要なことは、
   非同期 (asynchrony)、プロバイダ、ラッパー形式、追加ヘッダーの様な、特定の機能の制御です。
   例えば、クライアントアプリケーションは、WSDL ファイルで定義されている、
   一つの portType の特定の操作や、一つの portType のすべての操作や、
   すべての portType 操作に対して、非同期を有効に出来ます。
   ここ に、別の情報があります。


   NetBeans 5.5 では WSDL カスタマイズは二つの異なる場合で有効です
   - Web サービスクライアントと WSDL ファイルからの Web サービス。
   三つの異なる方法で行えます - WSDL ファイルに埋め込む、
   クライアント/サービスに結合した外部ファイル内、
   NetBeans によって提供される WSDL カスタマイザ。
   ここでは、カスタマイズを行うに当たってもっとも単純である、WSDL カスタマイザに集中します。
   すべてのカスタマイズの筋書きを記述しますが、
   カスタマイザがすべてをサポートすると言うことではありません。
   WSDL カスタマイザはどちらのユースケースでも同一ですので、ここでは一度だけ記述します
   - Web サービスクライアントの場合。
   前提条件は、Web サービス上に Web サービスクライアントを作成したことです。
   プロジェクトタブに行き、Web サービス参照の下の Web サービスノードを右クリックします。
   「Web サービス属性を編集」を選択しマウスボタンをクリックします。
   WSDL カスタマイザダイアログウインドウが現れます。


  • WSDL カスタマイザ:
   File:Http://wiki.netbeans.org/wiki/attach/WsdlCustomizer/dialog.png




WSDL カスタマイザの機能


  • 宣言のカスタマイズ
  • 外部結合宣言
  • 埋め込み結合宣言


  • カスタマイザがサポートする標準カスタマイズ
  • 帯域結合
  • パッケージカスタマイズ
  • ラッパースタイル
  • 非同期 (Asynchrony)
  • クラスカスタマイズ
  • Java メソッドカスタマイズ


  • カスタマイザがサポートしない標準カスタマイズ
  • プロバイダインタフェース
  • Java パラメータカスタマイズ
  • Javadoc カスタマイズ
  • XML スキーマカスタマイズ
  • ハンドラ連鎖カスタマイズ




宣言カスタマイズ


   すべての結合宣言要素は http://java.sun.com/xml/ns/jaxws 名前空間にあります。
   結合宣言を指定するには二つの方法があります。
   最初の取り組み方は、与えられた WSDL 文書に関する結合宣言を、
   外部結合ファイルと呼ばれる独立文書の中に纏めてグループ化することです。
   二つめの取り組み方は、WSDL 文書内の埋め込み結合宣言で直接構成されます。
   どちらの場合でも、jaxws:bindings 要素は JAX-WS 結合宣言のコンテナとして使用されます。
   jaxws 接頭辞は http://java.sun.com/xml/ns/jaxws 名前空間に対応します。


外部結合宣言


   外部結合ファイルは意味的に埋め込み結合宣言と同等です。
   wsimport が外部結合ファイルのある WSDL 文書を処理するとき、
   wsdlLocation 属性を使用して対象としている WSDL 文書の中の
   ノード上の外部結合ファイル内ので定義された結合宣言を内部化します。
   埋め込み結合宣言は WSDL ファイルと WSDL ファイルを対象とする外部結合ファイル内に存在できますが、
   wsimport は、外部結合ファイル内で定義された結合宣言を埋め込むときに 結果の WSDL 文書が衝突する結合宣言を持つ場合、エラーを起こすことがあります。
   NetBeans 内では、カスタマイズダイアログの「外部バインドファイル」プロパティで
   外部結合ファイルを指定できます。


   * 外部結合ファイル: 


File:Http://wiki.netbeans.org/wiki/attach/WsdlCustomizer/extbind.png

埋め込み結合宣言


   埋め込み結合宣言は、外部結合ファイル内で宣言された結合宣言とは異なる規則に従います。
   いくつかの重要な事実と規則が、JAS-WS 2.0 仕様で定義されています。


  • 埋め込み結合宣言は、jaxws:bindings 要素を使用して WSDL 拡張として指定されます。
  • jaxws:bindings 要素が WSDL 拡張として使用されるとき、それはノード属性を持ってはいけません。
  • 結合宣言は、限定名が jaxws:bindings である子要素を持ってはいけません。
  • WSDL に埋め込まれた結合宣言は、それが拡張する WSDL 要素にのみ影響します。


   次は inline-customize サンプルの WDSL AddNumbers.wsdl 内の埋め込み結合宣言の例です:


 <tt><wsdl:portType name="AddNumbersImpl">
    <!-- wsdl:portType customizations -->
    <jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">
        <!-- rename the generated SEI from AddNumbersImpl to MathUtil -->
        <jaxws:class name="MathUtil"/>
        ...
    </jaxws:bindings>
    <wsdl:operation name="addNumber">
    ...
</wsdl:portType></tt> 


上記 WSDL ファイルの抜粋は、wsdl:portType カスタマイズを示します。jaxws:bindings は portType の拡張要素として現れます。生成されたサービス終点インタフェースのクラス名をカスタマイズします。このカスタマイズがないと、既定で、サービス終点インタフェースクラスの名前は wsdl:portType 名に続いて付けられます。結合宣言 jaxws:class は、生成されるクラスの名前を AddNumberImpl 出はなくて MathUtil にカスタマイズします。

  • NetBeans 5.5 での埋め込み結合:


File:Http://wiki.netbeans.org/wiki/attach/WsdlCustomizer/embbind.png

  いわゆる「mime 内容」は、
  wsdl 型がどのように Java に結合されるのかの追加メタデータを提供する添付機構です。
  wsdl の結合節では、もし mime 部分が mime:content 情報で修飾されている場合、
  ユーザには wsimport にどの型を生成するのかを伝える選択肢があります。
  二値データ (すなわち xsd:base64Binary) を送る操作を例に取ってみましょう。
  さらに、結合節内で、mime multipart として修飾され、
  型が GIF ファイルであり得るという mime 内容情報と関係づけられています。
  「MIME コンテントを有効にする」が偽に設定されている場合は、そのデータはバイト配列に結合されます。
  「MIME コンテントを有効にする」が真に設定されている場合は、
  wsimport は結合節の mime:content 部分内の情報を使用して、java.awt.Image に結合します。
  ラッパー形式では、「MIME コンテントを有効にする」が「大域」レベルに設定されていると、
  それはその wsdl の全結合操作に影響します。
  同様に、それは「結合」レベル、より細かい、結合操作レベルで上書きできます。





カスタマイザでサポートされる標準カスタマイズ


大域結合


   大域カスタマイズは、jaxws:bindings@wsdlLocation で参照される wsdl 内の
   wsdl:definition のスコープ全体に適用されます。
   次のカスタマイズは大域スコープを持ちます。


  • パッケージ名
  • ラッパー形式
  • 非同期マッピング


* これらはカスタマイズダイアログで見つけられます:: 


File:Http://wiki.netbeans.org/wiki/attach/WsdlCustomizer/global.png

パッケージカスタマイズ


  既定で、wsimport は、WSDL targetNamespace から計算されたパッケージ内で
  WSDM アーティファクトを生成します。
  例えば、targetNamespace が http://duke.example.org でパッケージカスタマイズが無い WSDL ファイルは、
  org.example.duke パッケージにマップされます。
  既定パッケージマップをカスタマイズするには、
  wsdl:definitions ノード上の jaxws:package カスタマイズを使用するか、
  それは最上レベル結合要素の内側に直接現れるかもしれません。
  NetBeans 5.5 のカスタマイザでは、前の例で記述した大域設定パラメータの方でのみ
  パッケージをカスタマイズできます。



ラッパー形式


  wsdl 操作のパラメータの型と戻り方が生成される方法を制御します。
  カスタマイズがない場合、wsimport はラッパー形式を使用して生成します (従ってこれは既定で有効です)。
  仕様から例を得ると、操作が setLastTradePrice という名前の入力メッセージと
  setLastTradePriceResponse という名前の出力メッセージを持っているとしましょう。
  さらに、setLastTradePrice の文が実際に二つの基本型、文字列と実数で構成されているとしましょう。
  非ラッパー形式だと、wsimport は次の Java コードを生成します:
        SetLastTradePriceResponse setLastTradePrice( SetLastTradePrice setLastTradePrice);


  ラッパー形式だと、wsimport は次の Java コードを生成します:
        void setLastTradePrice(String tickerSymbol, float lastTradePrice);

  見てわかると思うのですが、ラッパー形式では、目そっそぱらめー他はコンポーネントに分解されています。
  従って、ラッパー形式にするか市内かは、開発者のコード様式に依存します。


  NetBeans 5.5 では、カスタマイザは三つのラッパー形式の設定で利用できます:


  • 大域スコープ - 大域結合内
  • ポート型 - ポート型内
  • 操作 - ポート型操作内



非同期 (Asynchrony)


   クライアントアプリケーションは jaxws:enableAsyncMappingbinding を使用して、
   wsimport が WSDL ファイルをコンパイルする際に、
   通常の同期メソッドと共に非同期ポーリングと呼び戻し操作を生成させることが出来ます。
   次は生成された指紋がどのようなものかです
   (読みやすくするために、同期メソッドの注釈は削除されています):


//synchronous method
    public int addNumbers(int number1, int number2) throws
        org.duke.AddNumbersFault_Exception,  java.rmi.RemoteException;
    //async polling Method
    public Response<AddNumbersResponse> addNumbers(int number1, int number2);
    //async callback Method
    public Future<?> addNumbers(int number1, int number2, AsyncHandler<AddNumbersResponse>);
...
   これは、上で記述されたラッパー形式結合宣言と同じ設定の場合を持ちます。


  • 大域スコープ - 大域結合内
  • ポート型 - ポート型内
  • 操作 - ポート型操作内


クラスカスタマイズ


   wsdl:portType、wsdl:fault、soap:headerfault、wsdl:server に対して生成されたクラスは、
   jaxws:class 結合宣言を使用してカスタマイズできます。



  • サービス終点インタフェースクラス:


File:Http://wiki.netbeans.org/wiki/attach/WsdlCustomizer/porttype.png

  • サービスクラス:


File:Http://wiki.netbeans.org/wiki/attach/WsdlCustomizer/services.png

  • 例外クラス - このカスタマイズは、WSDL ファイルにサービスがあり、例外を投げることがある場合にのみ利用できます。 exception.png ]



Java メソッドカスタマイズ


   jaxws:method 結合宣言を使用して、
   生成されるサービス終点インタフェースの Java メソッド名のカスタマイズと、
   生成されるサービスクラス内のポートアクセス用メソッドのカスタマイズが出来ます。


  • サービス終点インタフェースメソッド


File:Http://wiki.netbeans.org/wiki/attach/WsdlCustomizer/porttypeops.png

  • サービスクラス内のポートアクセス用メソッド


File:Http://wiki.netbeans.org/wiki/attach/WsdlCustomizer/portaccmethods.png



プロバイダインタフェース


   既定で、jaxws:provider 結合の値は偽です。
   つまり、プロバイダインタフェース生成は無効です。
   ポートをプロバイダインタフェースとして印付けるには、
   この結合宣言は XPath 式を使用して wsdl:port ノードを参照すべきです。
   プロバイダ結合宣言は、
   WSDL ファイルから起動されるサーバを開発しているときにのみ適用することに注意してください。
プロバイダインタフェースオプションは WSDL からの Web サービスに対してのみ WSDL カスタマイザでアクセスでき、WS コンテンツからは出来ません。


   File:Http://wiki.netbeans.org/wiki/attach/WsdlCustomizer/provider.png





カスタマイザでサポートされていない標準カスタマイズ


   これらのカスタマイズは WSDL カスタマイザではアクセスできず、WSDL 文書または外部ファイル内でのみ利用できます。



Java パラメータカスタマイズ


   jaxws:package 結合宣言を使用して、生成される Java メソッドのパラメータ名を変更できます。
   wsdl:portType 内の wsdl:operation のメソッドパラメータを変更できます。


<bindings node="wsdl:definitions/wsdl:portType[[@name=AddNumbersImpl | @name='AddNumbersImpl']]/wsdl:operation[@name=addNumbers]">
       <!-- rename method parameters-->
        <parameter part="definitions/message[[@name=addNumbers | @name='addNumbers']]/part[@name=parameters]" element="tns:number1" name="num1"/>
...


Javadoc カスタマイズ


   Jaxws:javadoc カスタマイズを使用して、Java パッケージやクラス (SEI、サービスまたは例外クラス)、SEI およびサービスクラス内のメソッドにに対する Javadoc テキストを指定できます。
   このためには、対応する wsdl ノード上に現れる必要があります。


パッケージレベル Javadoc:

<jaxws:package name="xs:string">?
<jaxws:javadoc>xs:string</jaxws:javadoc>?
</jaxws:package>

クラスレベル Javadoc:

<jaxws:class name="xs:string">?
<jaxws:javadoc>xs:string</jaxws:javadoc>?
</jaxws:class>

メソッドレベル Javadoc:

<jaxws:method name="xs:string">?
<jaxws:javadoc>xs:string</jaxws:javadoc>?
</jaxws:method> 

XML スキーマカスタマイズ


   コンパイルされた WSDL ファイル内に埋め込まれる XML スキーマは、
   標準 JAXB 結合を使用してカスタマイズできます。
   これらの JAXB 結合はスキーマ内部、
   または外部結合宣言ファイル内の jaxws:bindings 要素の子として存在します。



<jaxws:bindings node="wsdl:definitions/wsdl:types/xsd:schema[@targetNamespace=http://duke.example.org]">
        <jaxb:schemaBindings>
            <jaxb:package name="fromwsdl.server"/>
       </jaxb:schemaBindings>
   </jaxws:bindings>
   WSDL ファイルによって移入された外部 XML スキーマファイルは、JAXB 外部結合宣言ファイルを使用してカスタマイズできます。
<jxb:bindings
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
    version="1.0">
    <jxb:bindings schemaLocation="http://localhost:8080/jaxws-external-customize/schema1.xsd" node="/xsd:schema">
        <jxb:schemaBindings>
            <jxb:package name="fromjava.client"/>
        </jxb:schemaBindings>
    </jxb:bindings>
...


ハンドラ連鎖カスタマイズ


   jaxws:bindings カスタマイズを使用して、ハンドラをカスタマイズしたり追加出来ます。
   必要なことは、JSR 181 ハンドラ連鎖構成スキーマに準拠したハンドラ連鎖構成を、
   jaxws:bindings 要素内に埋め込むことだけです。
   次は、JSR 181 ハンドラ連鎖構成を含む、単純な JAX-WS 結合宣言ファイルです。
<jaxws:bindings
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    wsdlLocation="http://localhost:8080/jaxws-fromwsdlhandler/addnumbers?WSDL"
    xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
   xmlns:javaee="http://java.sun.com/xml/ns/javaee">
    <jaxws:bindings node="wsdl:definitions">
        <javaee:handler-chain>
            <javaee:handler-chain-name>LoggingHandlers</javaee:handler-chain-name>                    
            <javaee:handler>
                <javaee:handler-name>Logger</javaee:handler-name>
                <javaee:handler-class>fromwsdlhandler.common.LoggingHandler</javaee:handler-class>          
            </javaee:handler>                        
        </javaee:handler-chain>
    </jaxws:bindings>
</jaxws:bindings>


   ハンドラ連鎖構成は WSDL カスタマイズエディタ内の一つの区画を占めてはいませんが、
   NetBeans 5.5. 内では、倉案とのためにハンドラを構成するときに内部的に実際に使用されています。
   Web サービス/クライアントノードのコンテキストメニュー内の
   「ハンドラを設定」をクリックした後に開くダイアログの中でハンドラをカスタマイズでき、
   クライアントの場合は、隠れたところでハンドラ連鎖カスタマイズが起きています。

---

Not logged in. Log in, Register

By use of this website, you agree to the NetBeans Policies and Terms of Use. © 2012, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo