3

XMLに簡単にバインドできる入力と出力を備えた多数の「サービス」をホストする環境があります。SOAP を介して 1 つ以上のサービスを動的に公開できるようにしたいと考えています。つまり、ユーザーはサービス A と B を Web サービスに結合できる必要があります (オプションで操作の名前などを構成できます)。

つまり、WSDL または少なくともその一部 (特に、サービスから要求できる XSD 定義) を動的に生成できる必要があり、単一のプロバイダーをすべて使用する新しいエンドポイントを動的に作成および公開できる必要があります。どのサービスを呼び出そうとしているかを (コンテキストに基づいて) クラスで決定します。XML をアンマーシャリングし、サービスを呼び出し、応答をマーシャリングして送り返します。

これは JAX-WS で可能ですか? JAX-WS に付属する既存の機能 (特に WS-* など) を活用したいと考えています。JAX-WS でそれができない場合、他のオプションはありますか?

4

2 に答える 2

2

あなたのユースケースは、実際にはJAX-WSで実装するのが非常に困難です(そしておそらく不可能です)。しかし、心配しないでください。この要件を持つのはあなたが初めてではありません。

統合が必要なレガシー システムがいくつかある大企業を想像してみてください。その後、SOAP Web サービスに基づく SOA アーキテクチャの実装に多くの費用と時間を費やしました。これらのサービスを組み合わせて (オーケストレーション)、ビジネス プロセスを作成します。

例:ビジネス プロセス「契約の作成」は、Web サービス A、B、および C の実行を必要とします。

しかし、ビジネス プロセスの変更にコード ソースの変更が必要な場合はどうなるでしょうか? 同社には、これらのプロセスを最新の状態に保つ開発チームが必要です。

これを解決するために、BPEL の動的バインディングが作成されました。このテクノロジーを使用すると、要求されたサービスのパラメーターに基づいて、実行時に新しいサービスを作成できます。

簡単に言うと、いくつかの「ベース Web サービス」を定義し、実行時にこれらのサービスを動的に結合するように BPEL サーバーを構成する場合に必要なことです。

オラクルのこの記事を読んで、アイデアを得てください...

JBoss BPEL ユーザーガイドはこちら。

あなたのケースでBPELを使用するためにすべきこと

  • SOAP 以外のサービスごとに SOAP Web サービスを作成します (これを「ベース Web サービス」と呼びます)。
  • 「基本 Web サービス」の構成/組み合わせを編成するように BPEL エンジンを構成します。
  • BPEL エンドポイントを使用して、実行時に (必要に応じて各要求ごとに) 「基本 Web サービス」を構成/結合できるクライアントを作成します。注: BPEL エンジン構成を変更する必要はありません。

これにより、オーケストレーションを行うための非常に強力なプラットフォームが得られ、将来のより複雑なユース ケースに拡張できます。

それが役に立てば幸い ...

于 2012-07-15T20:06:36.483 に答える
1

良い方法の 1 つは、CDM をペイロード構造として使用することです。CDM (Common Data Model) では、あらゆる XML タイプを吸収できる拡張可能なスキーマを定義します。

従来の XML:

<dataset> 
            <BillingAddress>
                 <set>
                     <po-box >22224<po-box>
                     <suburb   code="2009">Pyrmont</suburb>
                     <city  >Sydney</city>
                     <country  code="AU">Australia</country>
                </set>
            </BillingAddress>
            <OfficeAddress>
                 <set>
                      <street >2/73 Union St</street>
                     <suburb   code="2009">Pyrmont</suburb>
                     <city  >Sydney</city>
                     <country   code="AU">Australia</country>
               </set>
            </OfficeAddress> 
</dataset>

共通データ モデル XML:

<objects>
  <object is="Address">
       <set>
             <text is="suburb"  code="2009">Pyrmont</text>
             <text is="city">Sydney</text>
             <text is="country" code="AU">Australia</text>

            <object is="BillingAddress">
                 <set>
                     <text is="po-box.billing">22224<text>
                     <text is="suburb.billing" code="2009">Pyrmont</text>
                     <text is="city.billing">Sydney</text>
                     <text is="country.billing" code="AU">Australia</text>
                </set>
            </object>
            <object is="OfficeAddress">
                 <set>
                      <text is="street.office">2/73 Union St<text>
                     <text is="suburb.office"  code="2009">Pyrmont</text>
                     <text is="city.office">Sydney</text>
                     <text is="country.office" code="AU">Australia</text>
               </set>
            </object>
         </set>
    </object>
</objects>

メイン サービスは CDM を受け取り、XML の特定のフラグに基づいて、要求を適切な Web サービスにルーティングできます。

これは私の考えです。この上に構築する必要があります。

于 2012-07-17T08:14:56.367 に答える