Red Hat Training

A Red Hat training course is available for JBoss Enterprise SOA Platform

第16章 Smooks と JBoss Enterprise SOA Platform の統合

16.1. Message Transformation

JBoss Enterprise SOA Platform のメッセージ変換機能は、SmooksAction コンポーネントによって提供されます。これは、Smooks フレームワークを ESB アクション処理パイプラインにプラグインできるようにする ESB アクションモジュールです。これにより、Smooks を公開し、設定ファイルを必要とする ESB アクションをセットアップできます。
注記
JBoss Enterprise SOA Platform 製品には、多くの変換クイックスタートのサンプルが付属しています。transform_ クイックスタートを確認して、それらがどのように動作するかを理解してください。XML2XML の例は、学習に適しています。

16.2. resource-config プロパティー

最も基本的な設定では、メッセージ変換は、Smooks 設定ファイルを参照する resource-config プロパティーを使用します。
resource-config プロパティーの値には、URIResourceLocator クラスで定義される任意の URI ベースのリソースを指定できます。
<action name="transform" class="org.jboss.soa.esb.actions.converters.SmooksTransformer">
        <property name="resource-config" value="/smooks-config.xml" ></property>
</action>

16.3. 入出力設定

このアクションは、MessagePayloadProxy を使用して、メッセージペイロードにアクセスします。デフォルトでは、Message.Body.DEFAULT_LOCATION 位置からペイロードを取得するように設定されています。また、処理後は、ここに戻します。
注記
これらのデフォルト設定をオーバーライドするには、get-payload-location および set-payload-location アクションプロパティを変更します。

16.4. Java 出力設定

  1. メッセージを Java オブジェクトに変換するには、Transform_XML2POJO クイックスタートの例を確認してください。
  2. 構成された Java オブジェクトモデルをモデルドリブンの変換の一部として使用します。パイプラインで SmooksAction の後に続く他の ESB アクションインスタンスで、それらを使用できるようにすることもできます。このような Java オブジェクトグラフは、このアクションによって出力された ESB メッセージに添付され、後続のアクションに入力されるため、後続のパイプラインアクションインスタンスで使用できます。
  3. Smooks Java Bean 設定に定義されているように、beanId オブジェクトに直接基づくキーの下で、Message.getBody().add(...) を使用して、オブジェクトを ESB メッセージ出力に添付します。つまり、オブジェクトは、Body.get(beanId) 呼び出しを実行すると、ESB メッセージ本文で利用できます。
  4. また、java-output-location プロパティーを追加すると、出力メッセージに完全な Java オブジェクトマップを添付できます。
    <action name="transform" class="org.jboss.soa.esb.actions.converters.SmooksTransformer">
            <property name="resource-config" value="/smooks-config.xml" ></property>
            <property name="java-output-location" value="order-message-objects-map" ></property>
        </action>
    
  5. これはマップを Default Message Body Location にバインドするための簡単な方法です。
     <action name="transform" class="org.jboss.soa.esb.actions.converters.SmooksTransformer">
            <property name="resource-config" value="/smooks-config.xml" ></property>
            <property name="java-output-location" value="$default" ></property>
        </action>
    

16.5. プロファイルベースの変換

  1. プロファイルベースの変換を実行するには、次の例を参照してください。1 つの変換設定ファイル (smooks-config.xml) を定義する必要があります。メッセージは、3 つの異なるソースと 1 つのターゲット宛先の間で交換されています。ESB は、宛先サービスに送信する前に、3 つの異なるソースのそれぞれから (異なる形式で) 提供されたメッセージを Java オブジェクトに変換する必要があります。ESB の観点から見ると、宛先には、1 つのサービス設定があります。
    <service category="ServiceCat" name="TargetService" description="Target Service">
            <listeners>
                <!-- Message listners for getting the message into the action pipeline... -->
                <jms-listener name="Gateway-Listener" busidref="quickstartGwChannel" is-gateway="true"></jms-listener>
                <jms-listener name="Service-Listener" busidref="quickstartEsbChannel"></jms-listener>
            </listeners>
            <actions>
    
                
                <action name="transform" class="org.jboss.soa.esb.actions.converters.SmooksTransformer">
                    <property name="resource-config" value="/smooks-config.xml"></property>
                </action>
    
                <!-- An action to process the Java Object(s) -->
                <action name="process" class="com.acme.JavaProcessor" ></action>
    
            </actions>
        </service>
    
  2. ソースごとに 1 つずつ、3 つの異なる変換を定義します。これは、Smooks Message Profiling を使用すると、実行されます。
  3. 定義を 3 つの Smooks 設定ファイル (from_source1.xmlfrom_source2.xml、および from_source3.xml) に保存します。
  4. 上記の各ファイルで、その設定セットに default-target-profile を指定します。
     <smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.0.xsd" default-target-profile="from:source1">
            <!-- Source1 to Target Java message transformation resource configurations... -->
        </smooks-resource-list>
    
  5. これらのファイルをトップレベルの smooks-config.xml に追加します。
    <smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.0.xsd">
            <import file="classpath:/from_source1.xml" ></import>
            <import file="classpath:/from_source2.xml" ></import>
            <import file="classpath:/from_source3.xml" ></import>
        </smooks-resource-list>
    
    これで、3 つの異なる変換を持つ 1 つの SmooksAction インスタンスをロードするように、システムが設定されました。それぞれが独自の一意のプロファイル名で定義されています。
  6. SmooksAction が与えられたメッセージに 3 つの変換のうちどれを適用するかを知るには、メッセージが SmooksAction に流入する前に、メッセージの from プロパティを設定する必要があります。これは、ソース自体で行うことも、SmooksAction の前にあるコンテンツベースのアクションで行うこともできます。
    注記
    JBoss Enterprise SOA Platform は、from、つまり、from-typeto、および to-type 以外に、他のプロファイルもサポートします。これらを組み合わせて使用すると、より複雑な交換ベースの変換を行うことができます。

16.6. Transform_XML2POJO2

メッセージ変換は、/samples/quickstarts/transform_XML2POJO2/ と呼ばれるクイックスタートとして実装できます。このクイックスタートには、2 つのメッセージソースがあります。クイックスタートは、受信メッセージの from プロファイルを検出および設定するアクションパイプライン上で、Groovy スクリプトを実行します。

16.7. Transform_XML2POJO2 ファイル

変換で使用されるファイルは次のとおりです。
  • jboss-esb.xml: これは JBoss ESB 設定ファイルです。
  • smooks-config.xml: このファイルには、トップレベルの変換設定が含まれます。
  • from-dvdstore.xml: これには、トップレベルの smooks-config.xml ファイルにインポートされる DVD ストアメッセージ変換設定が含まれます。(プロファイル設定をメモします。) これは、DVD ストアメッセージを Java オブジェクトに変換するように設計された設定です。
  • from-petstore.xml: このファイルには、トップレベルの smooks-config.xml ファイルにインポートされる Pet Store メッセージ変換設定が含まれます。(プロファイル設定をメモします。) これは、DVD ストアメッセージを Java オブジェクトに変換するように設計された設定です。
  • check-origin.groovy: これは、内容に基づいて、各メッセージの送信元を判別する単純な Groovy スクリプトです。