第12章 事前定義されたアクション

このセクションでは、JBoss ESB にデフォルトで含まれるすべてのアクションのカタログを提供します。

12.1. トランスフォーマーとコンバーター

コンバーター/トランスフォーマーは、メッセージペイロードを相互に変換するアクションプロセッサーの分類です。
特別に指定されていない限り、これらのすべてのアクションはメッセージペイロードを取得および設定するために MessagePayloadProxy を使用します。

12.1.1. ByteArrayToString

入力タイプ byte[ ]
クラス org.jboss.soa.esb.actions.converters.ByteArrayToString
byte[] ベースのメッセージペイロードを取得して java.lang.String オブジェクトインスタンスに変換します。

表12.1 ByteArrayToString のプロパティ

プロパティ 説明 必須
encoding
メッセージバイト配列のバイナリデータエンコーディング。デフォルトは UTF-8
No

例12.1 設定例

<action name="transform" class="org.jboss.soa.esb.actions.converters.ByteArrayToString">
    <property name="encoding" value="UTF-8" />
</action>

12.1.2. LongToDateConverter

入力タイプ
java.lang.Long/long
出力タイプ
java.util.Date
クラス
org.jboss.soa.esb.actions.converters.LongToDateConverter
ロングベースのメッセージペイロードを取得し、java.util.Date オブジェクトインスタンスに変換します。

例12.2 設定例

<action name="transform" class="org.jboss.soa.esb.actions.converters.LongToDateConverter">

12.1.3. ObjectInvoke

入力タイプ ユーザーオブジェクト
出力タイプ ユーザーオブジェクト
クラス org.jboss.soa.esb.actions.converters.ObjectInvoke
メッセージペイロードとしてバインドされたオブジェクトを取得し、処理するよう設定された「プロセッサー」に提供します。処理結果は新しいペイロードとしてメッセージに再びバインドされます。

表12.2 ObjectInvoke のプロパティ

プロパティ 説明 必須
class-processor
メッセージペイロードの処理に使用されるプロセッサークラスのランタイムクラス名です。
Yes
class-method
メソッドを処理すために使用されるプロセッサークラスのメソッド名。
No

例12.3 設定例

<action name="invoke" class="org.jboss.soa.esb.actions.converters.ObjectInvoke">
    <property name="class-processor" value="org.jboss.MyXXXProcessor"/>
    <property name="class-method" value="processXXX" />
</action>

12.1.4. ObjectToCSVString

入力タイプ ユーザーオブジェクト
出力タイプ java.lang.String
クラス org.jboss.soa.esb.actions.converters.ObjectToCSVString
メッセージペイロードとしてバインドされたオブジェクトを取得し、提供されたメッセージオブジェクトと カンマ区切りの "bean-properties” リストプロパティに基づいたカンマ区切り値 (CSV) 文字列に変換します。

表12.3 ObjectToCSVString プロパティ

プロパティ 説明 必須
bean-properties
出力 CSV 文字列のために CSV 値を取得するために使用するオブジェクト Bean プロパティ名の一覧。オブジェクトは一覧の各プロパティに対して getter メソッドをサポートする必要があります。
Yes
fail-on-missing-property
プロパティがオブジェクトで不明な場合 (つまり、オブジェクトがプロパティの getter メソッドをサポートしない場合) にアクションが失敗するかどうかを示すフラグ。デフォルト値は false です。
No

例12.4 設定例

<action name="transform"
    class="org.jboss.soa.esb.actions.converters.ObjectToCSVString">
    <property name="bean-properties"
        value="name,address,phoneNumber"/>
    <property name="fail-on-missing-property" 
        value="true" />
</action>

12.1.5. ObjectToXStream

入力タイプ ユーザーオブジェクト
出力タイプ java.lang.String
クラス org.jboss.soa.esb.actions.converters.ObjectToXStream
メッセージペイロードとしてバインドされるオブジェクトを取得し、XStream プロセッサーを使用して XML に変換します。http://xstream.codehaus.org/ を参照してください。

表12.4 ObjectToXStream のプロパティ

プロパティ 説明 必須
class-alias
シリアル化前に XStream.alias(String, Class) の呼出しで使用されるクラスエイリアス。デフォルトでは入力オブジェクトのクラス名に設定されます。
No
exclude-package
生成された XML からパッケージ名を除外します。デフォルト値は true です。class-alias が指定されている場合は適用できません。
No
aliases
XStream が XML エレメントをオブジェクトに変換できるように追加のエイリアスを指定します。
No
namespaces
XStream によって生成された XML に追加する必要があるネームスペースを指定します。各 namespace-uri はこのネームスペースが現れるエレメントである local-part に関連付けられます。
No
xstream-mode
使用する XStream モードを指定します。設定可能な値は XPATH_RELATIVE_REFERENCES (デフォルト値)、XPATH_ABSOLUTE_REFERENCESID_REFERENCES、または NO_REFERENCES です。
No
fieldAliases
Xstream に追加されたフィールドエイリアス
No
implicit-collections
Xstream で登録されます。
No
converters
Xtream で登録されるコンバーター一覧
No

例12.5 設定例

<action name="transform" class="org.jboss.soa.esb.actions.converters.ObjectToXStream">
    <property name="class-alias" value="MyAlias" />
    <property name="exclude-package" value="true" />
    <property name="aliases">
        <alias name="alias1" class="com.acme.MyXXXClass1" />
        <alias name="alias2" class="com.acme.MyXXXClass2" />
        <alias name="xyz" class="com.acme.XyzValueObject"/>
        <alias name="x" class="com.acme.XValueObject"/>
        ...
    </property>
    <property name="namespaces">
        <namespace namespace-uri="http://www.xyz.com" local-part="xyz"/>
        <namespace namespace-uri="http://www.xyz.com/x" local-part="x"/>
        ...
    </property>
    <property name="fieldAliases">
        <field-alias alias="aliasName" definedIn="className" fieldName="fieldName"/>
        <field-alias alias="aliasName" definedIn="className" fieldName="fieldName"/>
        ...
    </property>
    <property name="implicit-collections">
        <implicit-collection class="className" fieldName="fieldName" 
            fieldType="fieldType" itemType="itemType"/>
        ...
    </property>
    <property name="converters">
        <converter class="className" fieldName="fieldName" fieldType="fieldType"/>
        ...
    </property>
</action>

12.1.6. XStreamToObject

入力タイプ java.lang.String
出力タイプ ユーザーオブジェクト (“incoming-type” プロパティによって指定されます)
クラス org.jboss.soa.esb.actions.converters.XStreamToObject
メッセージペイロードとしてバインドされる XML を取得し、XStream プロセッサーを使用してオブジェクトに変換します。http://xstream.codehaus.org/ 参照してください。

表12.5 XStreamToObject のプロパティ

プロパティ 説明 必須
class-alias
シリアル化中に使用されるクラスエイリアス。デフォルトでは入力オブジェクトのクラス名に設定されます。
No
exclude-package
XML にパッケージ名を含めるかどうかを示すフラグ。
YES
incoming-type
クラスタイプ
Yes
root-node
XML の実際のルートノードとは異なるルートノードを指定します。XPath 式を取得します。
No
aliases
XStream が XML エレメントをオブジェクトに変換できるように追加のエイリアスを指定します。
No
attribute-aliases
Xstream が XML 属性をオブジェクトに変換できるように追加の属性エイリアスを指定します。
No
fieldAliases
Xstream に追加されたフィールドエイリアス
No
implicit-collections
Xstream で登録されます。
No
converters
Xstream が XML エレメントと属性をオブジェクトに変換できるようにコンバーターを指定します。コンバーターの詳細については、http://xstream.codehaus.org/converters.html を参照してください。
No

例12.6 設定例

<action name="transform" class="org.jboss.soa.esb.actions.converters.XStreamToObject">
    <property name="class-alias" value="MyAlias" />
    <property name="exclude-package" value="true" />
    <property name="incoming-type" value="com.acme.MyXXXClass" />
    <property name="root-node" value="/rootNode/MyAlias" />
    <property name="aliases">
        <alias name="alias1" class="com.acme.MyXXXClass1/>
        <alias name="alias2" class="com.acme.MyXXXClass2/>
        ...
    </property>
    <property name="attribute-aliases">
        <attribute-alias name="alias1" class="com.acme.MyXXXClass1"/>
        <attribute-alias name="alias2" class="com.acme.MyXXXClass2"/>
        ...
    </property>
    <property name="fieldAliases">
        <field-alias alias="aliasName" definedIn="className" fieldName="fieldName"/>
        <field-alias alias="aliasName" definedIn="className" fieldName="fieldName"/>
        ...
    </property>
    <property name="implicit-collections">
        <implicit-colletion class="className" fieldName="fieldName" fieldType="fieldType" 
            itemType="itemType"/>
        ...
    </property>
    <property name="converters">
        <converter class="className" fieldName="fieldName" fieldType="fieldType"/>
        ...
    </property>
</action>

12.1.7. XsltAction

全ドキュメントに変換を行います。フラグメントごとに変換が必要な場合。

表12.6 XsltAction プロパティ

プロパティ 説明 必須
get-payload-location
メッセージペイロードに含まれるメッセージボディの位置
未指定のデフォルトのペイロード位置を使用する場合
NO
set-payload-location
結果となるペイロードが配置されるメッセージボディの位置。
未指定のデフォルトのペイロード位置を使用する場合
No
templateFile
XSL テンプレートファイルへのパス。デプロイアーカイブまたは URL 内のファイルパスで定義します。
Yes
resultType
結果となるメッセージペイロードとして設定される結果のタイプ。
このプロパティは、変換の出力結果を制御します。現在利用可能な値は以下のとおりです。
  • STRING: String を作成します。
  • BYTES: バイト配列 (byte[]) を作成します。
  • DOM: DOMResult を作成します。
  • SAX: SAXResult を作成します。
  • 上記だけではニーズを満たせない場合、SOURCERESULT を使用してカスタマイズした結果を作成することができます。
    メッセージペイロードに SourceResult オブジェクト (org.jboss.soa.esb.actions.transformation.xslt.SourceResult) が含まれている場合、これはペイロードの SourceResult オブジェクトの result 属性として、同じタイプの結果を生み出します。
メッセージペイロードが SourceResult オブジェクトで、resultTypeSOURCERESULT に設定されていない場合、結果は resultType で指定されているタイプで返されます。開発者は、このタイプに互換があることを確認するようにしてください。
No
failOnWarning
true の場合、変換警告が発生して例外が送出されます。false の場合、問題があることがロギングされます。
デフォルトは true
No
uriResolver
URIResolver を実装するクラスの完全修飾クラス名。これは、変換ファクトリに設定されます。
No
factory.feature.*
変換ファクトリに設定されるファクトリ機能。完全修飾 URI である機能名は factory.feature. 接頭辞のあとに指定する必要があります。例:factory.feature.http://javax.xml.XMLConstants/feature/secure-processing
No
Factory.attribute.*
変換ファクトリに設定されるファクトリ属性。属性名は factory.attribute. 接頭辞のあとに指定する必要があります。例:factory.attribute.someVendorAttributename
NO
validation
True の場合、ソース文書が無効になり、例外が送出されます。False の場合、整形式の文書が強制されたとしても、検証が行われます。「XsltAction 検証」 を参照してください。
デフォルト値 false
.
No
schemaFile
使用する入力スキーマファイル (XSD)。クラスパスに置かれている。「XsltAction 検証」 を参照してください。
No
schemaLanguage
使用する入力スキーマ言語。「XsltAction 検証」 を参照してください。
No

12.1.7.1. XsltAction 検証

XsltAction 検証の設定には、様々な方法があります。以下に例とともに示しています。
  1. Disabled (デフォルト)
    これは、明示的に false に設定するか、省略され検証を無効にすることができます。
    <property name="validation" value="false"/>
  2. DTD
    <property name="validation" value="true"/>
    <property name="schemaLanguage" value="http://www.w3.org/TR/REC-xml"/>
    または
    <property name="validation" value="true"/>
    <property name="schemaLanguage" value=""/>
  3. W3C XML Schema または RELAX NG
    <property name="validation" value="true"/>
    または
    <property name="validation" value="true"/>
    <property name="schemaLanguage" value="http://www.w3.org/2001/XMLSchema"/>
    または
    <property name="validation" value="true"/>
    <property name="schemaLanguage" value="http://relaxng.org/ns/structure/1.0"/>
  4. W3C XML Schema または schemaFile が含まれる RELAX NG
    <property name="validation" value="true"/>
    <property name="schemaFile" value="/example.xsd"/>
    または
    <property name="validation" value="true"/>
    <property name="schemaLanguage" value="http://www.w3.org/2001/XMLSchema"/>
    <property name="schemaFile" value="/example.xsd"/>
    または
    <property name="validation" value="true"/>
    <property name="schemaLanguage" value="http://relaxng.org/ns/structure/1.0"/>
    <property name="schemaFile" value="/example.rng"/>
検証が有効化どうかで、XsltAction に対する結果は複数あります。
  1. XML が整形式で、有効な場合
    • 変換が実行されます。
    • パイプラインが継続されます。
  2. XML が不正な場合
    • エラーはロギングがされます。
    • SAXParseException -> ActionProcessingException
    • パイプラインが停止されます。
  3. XML が整形式であるが無効な場合
    • 検証が有効でない場合
      • 変換が失敗します。
      • パイプラインが継続されます。
    • 検証が有効な場合
      • エラーはロギングがされます。
      • SAXParseException -> ActionProcessingException
      • パイプラインが停止されます。

12.1.8. SmooksTransformer

重要

SmooksTransformer アクションは今後廃止予定です。より一般的な目的を持ち、より柔軟な Smooks アクションクラスについては、SmooksAction を参照してください。
クラス org.jboss.soa.esb.actions.converters.SmooksTransformer
JBossESB でのメッセージ変換は SmooksTransformer コンポーネントによってサポートされています。これは Smooks データ変換/処理フレームワークを ESB アクション処理パイプラインにプラグインできるようにする ESB アクションコンポーネントです。
SmooksTransformer コンポーネントでは、広範なソース (XML、CSV、EDI など) とターゲット (XML、Java、CSV、EDI など) データ形式がサポートされています。また、1 つのフレームワーク内に広範な変換テクノロジもサポートされています。
詳細情報は、http://www.smooks.org の Web サイトを参照してください。

表12.7 SmooksTransformer リソースの設定:

プロパティ 説明 必須
resource-config
Smooks リソース設定ファイル。
Yes

表12.8 SmooksTransformer メッセージプロファイルプロパティ (オプション)

プロパティ 説明 必須
from
メッセージ交換参加者名、 メッセージ生成者
No
from-type
"from" メッセージ交換参加者によって作成されたメッセージタイプ/形式。
No
to
メッセージ交換参加者名、 メッセージ消費者
No
to
メッセージ交換参加者名、メッセージ消費者
No
to-type
“to”メッセージ交換参加者によって消費されたメッセージタイプ/形式。
No
上記のすべてのプロパティはメッセージにプロパティとして提供することにより上書きできます (Message.Properties)。

例12.7 設定例: デフォルトの入力/出力

<action name="transform" class="org.jboss.soa.esb.actions.converters.SmooksTransformer">
    <property name="resource-config" value="/smooks/config-01.xml" />
</action>

例12.8 設定例: 名前付きの入力/出力

<action name="transform" class="org.jboss.soa.esb.actions.converters.SmooksTransformer">
    <property name="resource-config" value="/smooks/config-01.xml" /> 
    <property name="get-payload-location" value="get-order-params" />
    <property name="set-payload-location" value="get-order-response" />
</action>

例12.9 設定例:メッセージプロファイルの使用

<action name="transform" class="org.jboss.soa.esb.actions.converters.SmooksTransformer">
    <property name="resource-config" value="/smooks/config-01.xml" />
    <property name="from" value="DVDStore:OrderDispatchService" />
    <property name="from-type" value="text/xml:fullFillOrder" />
    <property name="to" value="DVDWarehouse_1:OrderHandlingService" />
    <property name="to-type" value="text/xml:shipOrder" />
</action>
Java オブジェクトは、Message.Body under their beanId の配下で Message.Body にバインドされます。詳細は、http://community.jboss.org/wiki/MessageTransformation を参照してください。

12.1.9. SmooksAction

SmooksAction クラス (org.jboss.soa.esb.smooks.SmooksAction) は Smooks 「プロセス」を実行する第 2 世代 ESB アクションクラスです (単にメッセージを変換する以外のこと (分割など) ができます)。SmooksTransformer アクションは今後の ESB のリリースで廃止 (最後は削除) される予定です。
SmooksAction クラスプロセス (Smooks PayloadProcessor を使用) は、文字列、バイト配列、InputStreams、リーダー、POJO などの広範な ESB メッセージペイロードを処理できます。したがって、Java 対 Java の変換を含む広範な変換を実行できます。また、コンテンツベースのペイロード分割およびルーティング (ESB メッセージルーティングではない) を含むソースメッセージストリームに対する他の種類の操作も実行できます。SmooksAction を使用すると、JBoss ESB 内のすべての Smooks 機能を有効にできます。
Smooks の Web サイトには、Smooks ユーザーガイド (およびその他のドキュメント) があります。また、Smooks のチュートリアルも確認してください。

重要

Smooks はベースの <resource-config> から行うリソース設定のうち特定の設定エラータイプを検出 (エラーの報告もなし) しません。たとえば、リソース (<resource>) が Smooks Visitor 実装で、Visitor クラスの名前のスペルを間違えている場合、Smooks はこのスペスミス部分がクラスであるべきなのかを把握しないため、エラーとして扱いません。Smooks は、Java Visitor 実装だけでなく、多様なリソースタイプをサポートしている点を忘れないでください。
この問題を最も簡単に回避する方法は (JBoss ESB 4.5.GA 以降) 拡張 Smooks 設定の名前空間を事前定義済みの機能すべてに使用することです。例えば、org.milyn.javabean.BeanPopulator <resource-config> を定義することで、Java でバインドする設定を定義する代わりに、http://www.milyn.org/xsd/smooks/javabean-1.2.xsd 設定の名前空間を使用してください (<jb:bean> 設定など)。
新規の Smooks Visitor 機能を実装した場合、この問題を最も簡単に回避する方法はこの新規リソースタイプの拡張設定生空間を定義することです。また、IDE に組み込んだスキーマサポートを活用できるため、この新しいリソースを簡単に設定することができるという利点もあります。
これらの拡張名前空間設定に関する例については、Smooks v1.1+ ドキュメントを参照してください。

12.1.9.1. SmooksAction の設定

以下は基本的な SmooksAction 設定を示しています。

例12.10 SmooksAction

<action name="transform" class="org.jboss.soa.esb.smooks.SmooksAction">
    <property name="smooksConfig" value="/smooks/order-to-java.xml" />
</action>
オプションの設定プロパティ:

表12.9 SmooksAction オプションとなる設定プロパティ

プロパティ 説明 デフォルト値
get-payload-location
メッセージペイロードに含まれるメッセージボディの位置
デフォルトのペイロード位置
set-payload-location
結果となるペイロードが配置されるメッセージボディの位置。
デフォルトのペイロード位置
mappedContextObjects
ESB メッセージボディの EXECUTION_CONTEXT_ATTR_MAP_KEY マップにマッピングされるコンマ区切りの Smooks ExecutionContext オブジェクト。デフォルトは空の一覧です。オブジェクトはシリアライズできる必要があります。
resultType
結果となるメッセージペイロードとして設定される結果のタイプ。「結果タイプの指定」 を参照してください。
STRING
javaResultBeanId
resultType=JAVA の場合のみ該当
resultType が "JAVA" の場合に結果としてマッピングされる Smooks Bean コンテキスト beanId。指定されていない場合は、Bean コンテキスト Bean Map が JAVA の結果としてマッピングされます。
reportPath
Smooks 実行レポートを生成するときのパスおよびファイル名。これは開発での使用を目的としており、本番稼働での使用は目的としていません。
Smooks Execution Report の詳細情報は、http://www.smooks.org/mediawiki/index.php?title=V1.2:Smooks_v1.2_User_Guide#Checking_the_Smooks_Execution_Process を参照してください。

12.1.9.2. メッセージ入力ペイロード

SmooksAction は ESB メッセージでメッセージペイロードを取得および設定するために ESB MessagePayloadProxy クラスを使用します。したがって、get-payload-locationset-payload-location アクションプロパティを使用してそのように設定されていない限り、SmooksAction はデフォルトのメッセージ位置にあるメッセージペイロードを取得および設定します (つまり、Message.getBody().get() and Message.getBody().set(Object) を使用)。
上述したように、SmooksAction は広範なメッセージペイロードタイプを自動的にサポートします。つまり、アクションチェインで SmooksAction よりも前に “fixup” アクションを実行しなくても SmooksAction 自体はほとんどのペイロードタイプを処理できます。

12.1.9.3. XML、EDI、CSV などの入力ペイロード

SmooksAction を使用してこれらのメッセージタイプを処理するには、ソースメッセージを以下の形式で提供します。
  1. 文字列
  2. InputStream
  3. Reader
  4. バイトアレイ
これ以外に、該当するメッセージタイプを処理するために標準的な Smooks 設定 (ESB 設定ではなく Smooks 設定) を行う必要があります。たとえば、XML ソースではない場合 (EDI、CSV など) はパーサーを設定します。

12.1.9.4. Java 入力ペイロード

提供されたメッセージペイロードがタイプ String、InputStream、Reader、または byte[] のいずれかでない場合、SmooksAction は JavaSource としてペイロードを処理し、Java から XML、Java 対 Java などの変換を実行できるようになります。
Smooks コアランタイムは、XML、EDI、Java などの入力ソースが作成する SAX イベントのストリームを処理し、これらのイベントが Visitor ロジックをトリガーすることで機能します。Java ソースの場合、Smooks は XStream を使用して、この SAX イベントのストリームを生成します。
しかし、出力形式を作成するため、テンプレートのみ (通常、FreeMaker テンプレートなど) を Java Source オブジェクトモデルに適用したい場合もあります。これを行うには、イベントのストリームを生成してはいけないSmooks コアランタイムに通知する必要があります。以下の 2 種類の方法で、これを行うことができます。
  1. Smooks.filterSource が渡される JavaSource インスタンス上で setEventStreamRequired(false) を呼び出す
    JavaSource javaSource = new JavaSource(orderBean);
     
    // Turn streaming off via the JavaSource...
    javaSource.setEventStreamRequired(false);
     
    smooks.filterSource(javaSource, result);
  2. あmたは、Smooks 設定の読み込み機能をオフにする
    <?xml version="1.0"?>
    <smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd">
     
        <reader>
            <features>
                <setOff feature="http://www.smooks.org/sax/features/generate-java-event-stream" />
            </features>
        </reader>
     
        <!-- Other Smooks configurations e.g. a FreeMarker template... -->
     
    </smooks-resource-list>
FreeMarker テンプレートの適用時、テンプレートのコンテキスト bean の名前 (テンプレートで使用する名前) は、JavaSource のオブジェクトタイプにより決まります。
  • オブジェクトが Map の場合、Map インスタンスはテンプレートコンテキストになり、テンプレート内の bean 名に Map エントリキーを使用するだけでよくなります。
  • Map 以外のオブジェクトは、JavaSource クラスがオブジェクトクラス SimpleName を取り、JavaBean プロパティ名をそこから作成します。これは、テンプレート作成に使用するコンテキスト bean の名前です。例えば、Bean クラス名は com.acme.Order で、テンプレート作成用のコンテキスト bean 名は order になります。

12.1.9.5. 結果タイプの指定

Smooks アクションはさまざまな結果タイプを生成できるため、必要な結果タイプを指定できる必要があります。これは、ESB メッセージペイロード位置に再びバインドされる結果に影響します。
デフォルトでは、ResultType は “STRING” ですが、“resultType” 設定プロパティを設定することにより “BYTES”、“JAVA”、または “NORESULT” に設定することもできます。
"JAVA" の resultType を指定すると、Smooks ExecutionContext (特に Bean コンテキスト) から 1 つまたは複数の Java オブジェクトを選択できます。Bean コンテキストから ESB メッセージペイロード位置にバインドされる特定の Bean を指定できるようにすることにより、javaResultBeanId 設定プロパティは resultType プロパティと組み合わされます。以下は、"order" Bean をメッセージペイロードとして Smooks Bean コンテキストから ESB メッセージにバインドする例です。

例12.11 結果タイプの指定

<action name="transform" class="org.jboss.soa.esb.smooks.SmooksAction">
    <property name="smooksConfig" value="/smooks/order-to-java.xml" />
    <property name="resultType" value="JAVA" />
    <property name="javaResultBeanId" value="order" />
</action>

12.1.10. PersistAction

入力タイプ メッセージ
出力タイプ 入力メッセージ
クラス org.jboss.soa.esb.actions.MessagePersister
これは MessageStore と対話するために使用されます (必要な場合)。

表12.10 PersistAction のプロパティ

プロパティ 説明 必須
classification
メッセージが保存される場所を分類するために使用されます。メッセージプロパティ org.jboss.soa.esb.messagestore.classification がメッセージで定義されている場合は、そのメッセージプロパティが代わりに使用されます。それ以外の場合は、デフォルト値がインスタンス作成時に提供されることがあります。
Yes
message-store-class
MessageStore の実装
Yes
terminal
パイプラインを終了するためにアクションが使用される場合、この値は true (デフォルト値) に設定する必要があります。それ以外の場合は、この値を false に設定します (入力メッセージが処理から返されます)。
No

例12.12 PersistAction

<action name="PersistAction" class="org.jboss.soa.esb.actions.MessagePersister">
    <property name="classification" value="test"/>
    <property name="message-store-class" 
        value="org.jboss.internal.soa.esb.persistence.format.db.DBMessageStoreImpl"/>
</action>

12.2. ビジネスプロセス管理

12.2.1. JBPM - BpmProcessor

入力タイプ AbstractCommandVehicle.toCommandMessage() で生成される org.jboss.soa.esb.message.Message
出力タイプ Message – 入力メッセージと同じ
クラス org.jboss.soa.esb.services.jbpm.actions.BpmProcessor
JBossESB は BpmProcessor アクションを使用して JBPM への呼出しを行うことができます。JBPM から JBossESB を呼び出す方法についてはServices Guideの「JBPM 統合」の章も参照してください。BpmProcessor アクションは JBPM コマンド API を使用して JBPM への呼び出しを行います。
以下の JBPM コマンドが実装されています。
  • NewProcessInstanceCommand
  • StartProcessCommand
  • CancelProcessInstanceCommand
  • GetProcessInstanceVariablesCommand

表12.11 BpmProcessor のプロパティ

プロパティ 説明 必須
command
呼び出される JBPM コマンド。必須の許容値:
  • NewProcessInstanceCommand
  • StartProcessInstanceCommand
  • SignalCommand
  • CancelProcessInstanceCommand
Yes
processdefinition
process-definition-id プロパティが使用されない場合の New- および Start-ProcessInstanceCommands の必須プロパティ。このプロパティの値は JBPM にすでにデプロイされ、新しいインスタンスを作成したいプロセス定義を参照する必要があります。このプロパティは Signal- および CancelProcessInstance-Commands に適用されません。
場合による
process-definition-id
processdefinition プロパティが使用されない場合の New- および Start-ProcessInstanceCommands の必須プロパティ。このプロパティの値は新しいインスタンスを作成したい JBPM の processdefintion id を参照する必要があります。このプロパティは Signal- および CancelProcessInstanceCommands に適用されません。
場合による
actor
New- および StartProcessInstanceCommands のみに適用される JBPM actor id を指定するオプションプロパティ。
No
key
JBPM キーの値を指定するオプションプロパティ。たとえば、このキーの値として一意の請求書 id を渡すことができます。JBPM 側では、このキーは “ビジネス” キー id フィールドになります。このキーはプロセスインスタンスに対する文字列ベースのビジネスキープロパティです。ビジネスキーが提供される場合、ビジネスキーとプロセス定義の組み合わせは一意である必要があります。EsbMessage から必要な値を抽出するためにキーの値は MVEL 式を保持できます。たとえば、メッセージのボディに “businessKey”という名前の名前付きパラメーターがある場合は、“body.businessKey” を使用します。このプロパティは New- および StartProcessInstanceCommands に対してのみ使用されることに注意してください。
No
transition-name
オプションパラメーター。このプロパティは StartProcessInstance- および Signal Commands にのみ適用され、現在のノードから複数の移行が存在する場合にのみ使用されます。このプロパティが指定されていない場合は、ノードからデフォルトの移行が取得されます。デフォルトの移行は JBPM processdefinition.xml の該当するノードに対して定義された移行の一覧の最初の移行です。
No
esbToBpmVars
New- および StartProcessInstanceCommands、SignalCommand のオプションプロパティ。このプロパティは EsbMessage から抽出し、特定のプロセスインスタンスに対する JBPM コンテキストに設定する必要がある変数の一覧を定義します。この一覧はマッピングエレメントから構成されます。各マッピングエレメントは以下の属性を持つことができます。
  • esb: EsbMessage のどこからでも値を抽出する MVEL 式を含むことができる必須属性。
  • bpm: JBPM 側で使用される名前を含むオプション属性。省略すると、esb 名が使用されます。
  • default: esb MVEL 式が EsbMessage で設定された値を見つけることができない場合にデフォルト値を保持できるオプション属性。
No

12.3. スクリプト

スクリプトアクションプロセッサーはスクリプト言語を使用してアクション処理ロジックの定義をサポートします。

12.3.1. GroovyActionProcessor

クラス org.jboss.soa.esb.actions.scripting.GroovyActionProcessor
Groovy アクション処理スクリプトを実行し、メッセージ、payloadProxy、アクション設定、およびロガーを入力変数として受け取ります。

表12.12 GroovyActionProcessor のプロパティ

プロパティ 説明 必須
script
Groovy スクリプトへのパス (クラスパス上)。
supportMessageBasedScripting
メッセージ内でスクリプトの使用を許可します。
cacheScript
スクリプトをキャッシュします。 デフォルトの設定は true です。
No

表12.13 GroovyAction Processor Script Binding の変数

変数 説明
message
メッセージ
payloadProxy
メッセージペイロードのユーティリティ (MessagePayloadProxy)
config
アクション設定 (ConfigTree)
logger
GroovyActionProcessor のスタティック Log4J Logger (Logger)。

例12.13 設定例

<action name="process" class="org.jboss.soa.esb.scripting.GroovyActionProcessor">
    <property name="script" value="/scripts/myscript.groovy"/>
</action>

12.3.2. ScriptingAction

クラス org.jboss.soa.esb.actions.scripting.ScriptingAction
Bean スクリプトフレームワーク (BSF) を使用してスクリプトを実行すると、メッセージ、payloadProxy、アクション設定、ロガーを入力変数として受け取ります。
  1. JBoss ESB 4.8 には BSF 2.3.0 が含まれています。このバージョンは、BSF 2.4.0 に比べ言語サポートが少なくなっています (例えば、Groovy がない、非機能の Rhino など)。今後のバージョンには、Groovy と Rhino をサポートする BSF 2.4.0 が含まれる予定です。
  2. BSF はスクリプトをプリコンパイル、キャッシュ、および再使用する API を提供しません。このため、ScriptingAction のを実行するたびに再びコンパイルを行うことになります。パフォーマンス要件を評価する場合はこのことを考慮してください。
  3. アプリケーションに BeanShell スクリプトを含める場合は、.bsh の代わりに .beanshell 拡張子を使用することが推奨されます。.beanshell 拡張子を使用しないと、JBoss BSHDeployer がそのスクリプトを取得することがあります。

表12.14 ScriptingAction のプロパティ

プロパティ 説明 必須
script
スクリプトへのパス (クラスパス上)。
supportMessageBasedScripting
メッセージ内でスクリプトの使用を許可します。
language
オプションのスクリプト言語 (拡張機能の減少よりも優先されます)。
No

表12.15 ScriptingAction Processor Script Binding の変数

変数 説明
message
メッセージ
payloadProxy
メッセージペイロードのユーティリティ (MessagePayloadProxy)
config
アクション設定 (ConfigTree)
logger
ScriptingAction の静的な Log4J Logger (Logger)

例12.14 ScriptingAction

<action name="process" class="org.jboss.soa.esb.scripting.ScriptingAction">
    <property name="script" value="/scripts/myscript.beanshell"/>
</action>

12.4. サービス

ESB サービス内で定義されたアクション。

12.4.1. EJBProcessor

入力タイプ EJB のメソッド名とパラメータ
出力タイプ EJB 固有のオブジェクト
クラス org.jboss.soa.esb.actions.EJBProcessor
入力メッセージを取得してステートレスセッション Bean の呼び出しにその内容を使用します。 このアクションは EJB2.x と EJB3.x に対応します。

表12.16 EJBProcessor のプロパティ

プロパティ 説明 必須
ejb3
これが EJB3.x セッション Bean の呼び出しの場合
ejb-name
EJB の ID。ejb3 が true の場合はオプションです。
jndi-name
関連する JNDI ルックアップです。
initial-context-factory
JNDI ルックアップのメカニズムです。
provider-url
関連するプロバイダです。
method
呼び出す EJB メソッド名。
lazy-ejb-init
EJB がデプロイメント時ではなくランタイム時に遅延して初期化されるべきかどうか。デフォルトは false。
No
ejb-params
メソッドを呼び出すときにメソッドが存在する入力メッセージの位置で使用するパラメーターの一覧。
esb-out-var
出力の位置 (デフォルト値は DEFAULT_EJB_OUT)。
No

例12.15 EJB 2.x の設定例

<action name="EJBTest" class="org.jboss.soa.esb.actions.EJBProcessor">
    <property name="ejb-name" value="MyBean" />
    <property name="jndi-name" value="ejb/MyBean" />
    <property name="initial-context-factory" value="org.jnp.interfaces.NamingContextFactory" />
    <property name="provider-url" value="localhost:1099" />
    <property name="method" value="login" />
    <!-- Optional output location, defaults to "DEFAULT_EJB_OUT"
    <property name="esb-out-var" value="MY_OUT_LOCATION"/> -->
    <property name="ejb-params">
    <!-- arguments of the operation and where to find them in the message -->
        <arg0 type="java.lang.String">username</arg0>
        <arg1 type="java.lang.String">password</arg1>
    </property>
</action>

例12.16 EJB 3.x の設定例

<action name="EJBTest" class="org.jboss.soa.esb.actions.EJBProcessor">
    <property name="ejb3" value="true" />
    <property name="jndi-name" value="ejb/MyBean" />
    <property name="initial-context-factory" value="org.jnp.interfaces.NamingContextFactory" />
    <property name="provider-url" value="localhost:1099" />
    <property name="method" value="login" />
    <!-- Optional output location, defaults to "DEFAULT_EJB_OUT"
    <property name="esb-out-var" value="MY_OUT_LOCATION"/> -->
    <property name="ejb-params">
        <!-- arguments of the operation and where to find them in the message -->
        <arg0 type="java.lang.String">username</arg0>
        <arg1 type="java.lang.String">password</arg1>
    </property>
</action>

12.5. ルーティング

ルーティングアクションは 2 つ以上のメッセージ交換参加者間でのメッセージの条件ルーティングをサポートします。

12.5.1. Aggregator

クラス org.jboss.soa.esb.actions.Aggregator
メッセージ集約アクション。Aggregator Enterprise Integration Pattern の実装については、http://www.enterpriseintegrationpatterns.com/Aggregator.html を参照
このアクションは正しい相関データを持つすべてのメッセージに依存します。このデータは “aggregatorTag” (Message.Properties) という名前のプロパティとしてメッセージに設定されます。ContentBasedRouter と StaticRouter アクションを参照してください。
このデータは形式は以下のとおりです。
[UUID] ":" [message-number] ":" [message-count]
すべてのメッセージがアグリゲータによって受け取られた場合は、Message.Attachment 一覧 (名前なし) の一部としてすべてのメッセージに含まれる新しいメッセージが返されます。それ以外の場合、アクションは null を返します。

表12.17 アグリゲータのプロパティ

プロパティ 説明 必須
timeoutInMillis
集約プロセスがタイムアウトするまでのミリ秒単位の時間です。
No

例12.17 設定例

<action class="org.jboss.soa.esb.actions.Aggregator" name="Aggregator">
    <property name="timeoutInMillis" value="60000"/>
</action>

12.5.2. EchoRouter

単に受信メッセージペイロードを情報ログストリームにエコーし、処理メソッドから入力メッセージを返します。

12.5.3. HttpRouter

クラス org.jboss.soa.esb.actions.routing.http.HttpRouter
このアクションは、外部の (ESB 非対応) HTTP エンドポイントを ESB アクションパイプラインから呼び出しできます。このアクションは、背後で Apache Commons HttpClient を使用します。

表12.18 Apache Commons HttpRouter

プロパティ 説明 必須
unwrap
true (デフォルト) の場合は送信前にメッセージオブジェクトからメッセージペイロードを抽出します。false の場合は、MessageType に従い、シリアライズされたメッセージを XML または Base64 でコンドードされた Java シリアライズオブジェクトとして送信します。
No
endpointUrl
メッセージが転送されるエンドポイント
Yes
http-client-property
HttpRouter は、HttpClientFactory を使用して HttpClient インスタンスを作成、設定します。ローカルのファイルシステム、クラスパス、URI でプロパティファイルを参照するファイルプロパティを使用することで、ファクトリ設定を指定します。これがどのように行われるか、以下の例を参照してください。ファクトリプロパティに関する詳細情報は、http://www.jboss.org/community/docs/DOC-9969 を参照してください。
No
method
現在 GET と POST のみのサポートです。
Yes
responseType
応答が返される形式を指定します。 STRING か BYTES になり、 デフォルト値は STRING です。
No
headers
リクエストに追加。複数の <header name="test" value="testvalue" /> 要素をサポートします。
No
MappedHeaderList
対象のエンドポイントに伝搬されるべきヘッダー名をコンマ区切りの一覧にしたもの。ヘッダーの値は、http-gateway から ESB に入るリクエストまたは、現在の ESB メッセージのプロパティ内にあるリクエストにある値をリトリーブします。
No

例12.18 設定例

<action name="httprouter"  class="org.jboss.soa.esb.actions.routing.http.HttpRouter">
    <property name="endpointUrl"value="http://host:80/blah">
        <http-client-property name="file" value="/ht.props"/>
    </property>
    <property name="method" value="GET"/>
    <property name="responseType" value="STRING"/>
    <property name="headers">
        <header name="blah" value="blahval" ></header>
    </property>
</action>

12.5.4. JMSRouter

クラス org.jboss.soa.esb.actions.routing.JMSRouter
受信メッセージを JMS にルーティングします。

表12.19 JMSRouter

プロパティ 説明 必須
unwrap
true の場合は送信前にメッセージオブジェクトからメッセージペイロードを抽出します。false (デフォルト値) の場合は、シリアル化されたメッセージオブジェクトが送信されます。
No
jndi-context-factory
使用する JNDI コンテキストファクトリ。デフォルト値は org.jnp.interfaces.NamingContextFactory です。
No
jndi-URL
使用する JNDI URL。デフォルト値は 127.0.0.1:1099 です。
No
jndi-pkg-prefix
使用する JNDI 命名パッケージ接頭辞。デフォルト値は org.jboss.naming:org.jnp.interfaces です。
No
connection-factory
使用する ConnectionFactory の名前です。 デフォルトは ConnectionFactory です。
No
persistent
persistent: JMS DeliveryMody。true (デフォルト値) または false を設定します。
No
priority
使用される JMS 優先度。デフォルト値は javax.jms.Message.DEFAULT_PRIORITY です。
No
time-to-live
使用される JMS Time-To-Live。デフォルト値は javax.jms.Message.DEFAULT_TIME_TO_LIVE です。
No
security-principal
JMS 接続の作成時に使用するセキュリティプリンシパル。
Yes
security-credentials
JMS 接続の作成時に使用するセキュリティクレデンシャル。
Yes
property-strategy
JMSPropertiesSetter interface の実装 (デフォルト値をオーバーライドする場合)。
No
message-prop
メッセージで設定されるプロパティには message-prop という接頭辞が付けられます。
No
jndi-prefixes
コンマで区切った接頭辞の文字列。これら接頭辞を持つプロパティは JNDI 環境に追加されます。
No
jndiName
メッセージが送信されるべきキューまたはトピック名を定義します。
No

12.5.5. EmailRouter

クラス org.jboss.soa.esb.actions.routing.email.EmailRouter
設定された e-メールアカウントへ受信メッセージをルーティングします。

表12.20 EmailRouter プロパティ

プロパティ 説明 必須
unwrap
true の場合は送信前にメッセージオブジェクトからメッセージペイロードを抽出します。false (デフォルト値) の場合は、シリアル化されたメッセージオブジェクトが送信されます。
 
host
SMTP サーバーのホスト名。指定されていない場合は、jbossesb-properties.xml のデフォルトプロパティ 'org.jboss.soa.esb.mail.smtp.host' が使用されます。
 
port
SMTP サーバーのポート。指定されていない場合は、jbossesb-properties.xml のデフォルトプロパティ 'org.jboss.soa.esb.mail.smtp.port' が使用されます。
 
username
SMTP サーバーのユーザー名。指定されていない場合は、jbossesb-properties.xml のデフォルトプロパティ 'org.jboss.soa.esb.mail.smtp.user' が使用されます。
 
password
SMTP サーバーの上記ユーザー名に対するパスワード。指定されていない場合は、jbossesb-properties.xml のデフォルトプロパティ 'org.jboss.soa.esb.mail.smtp.password' が使用されます。
 
auth
true の場合、AUTH command を使用してユーザー認証を試行します。指定されていない場合は、jbossesb-propertiesxml のデフォルトプロパティ 'org.jboss.soa.esb.mail.smtp.auth' が使用されます。
 
from
送信元の e-メールアドレス
 
sendTo
送信先の e-メールアカウント
 
subject
E-メールの件名
 
messageAttachmentName
メッセージペイロードを含む添付のファイル名 (オプション)。指定されない場合は、メッセージペイロードがメッセージボディに含まれます。
 
message
電子メールメッセージを構成する ESB メッセージコンテンツに追加する文字列 (オプション)
 
ccTo
カンマ区切り一覧形式の電子メールアドレス (オプション)
 
attachment
送信メールに追加される添付ファイルを含む子要素
 

例12.19 設定例

<action name="send-email"  class="org.jboss.soa.esb.actions.routing.email.EmailRouter">
    <property name="unwrap" value="true" /> 
    <property name="host" value="smtpHost" /> 
    <property name="port" value="25" /> 
    <property name="username" value="smtpUser" /> 
    <property name="password" value="smtpPassword" /> 
    <property name="from" value="jbossesb@xyz.com" /> 
    <property name="sendTo" value="system2@xyz.com" /> 
    <property name="subject" value="Message Subject" />  
</action> 

12.5.6. ContentBasedRouter

クラス org.jboss.soa.esb.actions.ContentBasedRouter
コンテンツベースのメッセージルーティングアクション。
このアクションは、以下のルーティングルールプロバイダータイプをサポートします。
  • XPath: 単純な XPath ルール。アクションのインライン定義、または .properties 形式ファイルを外部から定義
  • Drools: Drools ルールファイル (DSL)。XPath ベースの DSL に対する事前定義サポート

表12.21 ContentBasedRouter プロパティ

プロパティ 説明 必須
cbrAlias
コンテンツベースルーティングプロバイダーのエイリアス。対応値は、"Drools" (デフォルト)、 "Xpath"、"Regex"。
ruleSet
外部定義のルールファイル。Drools ルールプロバイダーが使用されている場合は、Drools DSL ファイル。XPath または Regex プロバイダーが使用されている場合は、.properties ルールファイル。
ruleLanguage
CBR 評価ドメイン固有言語 (DSL) ファイル。Drools ルールプロバイダーのみに該当
ruleReload
ルールファイルを毎回再ロードするかどうかを示すフラグです。 デフォルトは “false” です。
ruleAuditType
Drools に監査ロギングを実行させる任意のプロパティ。ログを Drools Eclipse プラグインに読み込ませ確認することができます。有効な値は CONSOLE、FILE、THREADED_FILE で、デフォルトでは監査ロギングが実行されます。
 
ruleAuditFile
監査ロギングのファイルパスを定義する任意のプロパティ。FILE あるいは THREADED_FILE ruleAuditType のみに適用されます。デフォルトは "event" です。JBoss Drools は ".log" を自動で追加します。このファイルのデフォルトの場所は "." (現在の作業ディレクトリ、つまり JBoss では bin/ ディレクトリ) となっています。
 
ruleAuditInterval
監査イベントを監査ログにフラッシュする頻度を定義する任意のプロパティ。これは THREADED_FILE ruleAuditType のみに適用されます。デフォルトは 1000 (ミリ秒) です。
 
destinations
<route-to> 設定のコンテナープロパティ。ルールが外部定義される場合、この設定は以下の形式になります。
<route-to destination-name="express" 
    service-category="ExpressShipping" service-name="ExpressShippingService"/>
ルールが設定内にインライン定義されている場合、この設定は以下の形式を取ります (Drools プロバイダーへのサポートはなし)。
<route-to service-category="ExpressShipping" 
    service-name="ExpressShippingService" expression="/order[@statusCode='2']" />
namespaces
XPath ルールプロバイダーなどで必要な <namespace> 設定のコンテナープロパティ。<namespace> 設定は以下の形式をとります。
<namespace prefix="ord" uri="http://acme.com/order" />

表12.22 ContentBasedRouter プロセスのメソッド

プロパティ 説明 必須
process
メッセージに集約データを追加しないでください。
Regex は XPath と同じ方法で設定します。唯一の違いは、XPath 表現の代わりに正規表現を使用することです。
コンテンツベースのルーティングに関する詳細情報は、サービスガイドの、「コンテンツベースルーティングとは」の章を参照してください。

12.5.7. StaticRouter

クラス org.jboss.soa.esb.actions.StaticRouter
スタティックメッセージルーティングアクション。これは基本的にコンテンツベースルーターの簡略化バージョンです (ただし、コンテンツベースルーティングルールをサポートしない点を除く)。

表12.23 StaticRouter のプロパティ

プロパティ 説明
destinations
<route-to> 構成のコンテナプロパティです。
<route-to destination-name="express" service-category="ExpressShipping" 
    service-name="ExpressShippingService"/>

表12.24 StaticRouter プロセスのメソッド

method 説明
process
メッセージに集約データを追加しないでください。
「Aggregator」 を参照してください。

例12.20 設定例 - StaticRouter

<action name="routeAction" class="org.jboss.soa.esb.actions.StaticRouter">
    <property name="destinations">
        <route-to service-category="ExpressShipping" service-name="ExpressShippingService"/>
        <route-to service-category="NormalShipping" service-name="NormalShippingService"/>
    </property>  
</action>

12.5.8. SyncServiceInvoker

クラス org.jboss.soa.esb.actions.SyncServiceInvoker
同期メッセージルーティングアクション。このアクションは、設定サービスに同期呼び出しを行い、呼び出しの応答をアクションパイプラインに渡し、後続のアクション (があれば、後続のアクション) により処理が行われるか、サービスが RequestResponse サービスの場合応答として渡されます。

表12.25 SyncServiceInvoker プロパティ

プロパティ 説明 必須
service-category
サービスカテゴリ
Yes
service-name
サービス名
Yes
failOnException
アクションが対象サービスの呼び出しからの例外で失敗させるかどうか。False に設定している場合は、アクションはパイプラインに入力メッセージを単に返して、サービス処理を継続できます。失敗のステータスを把握する必要がある場合は、このパラメーターを true に設定して、通常の "faultTo" の仕組みを使用してパイプラインが失敗できるようにします (デフォルトは true)。
No
suspendTransaction
このアクションは、トランザクションがアクティブな状態にある場合に実行されると失敗します。このプロパティを True に設定されている場合、トランザクションは一時停止される場合があります。デフォルトは、False です。
No
ServiceInvokerTimeout
呼び出しのタイムアウト (ミリ秒)。タイムアウトされると、例外が発生し "failOnException" 設定に従ったアクションが起こされます。デフォルトは 3000 です。
No

例12.21 設定例 - SyncServiceInvoker

<action name="route” class="org.jboss.soa.esb.actions.SyncServiceInvoker">
    <property name="service-category" value="Services" />
    <property name="service-name" value="OM" />
</action>

12.5.9. StaticWireTap

クラス org.jboss.soa.esb.actions.StaticWireTap
StaticWiretap アクションは StaticRouter とは異なります。違いは、StaticWiretap はアクションチェーン上でリッスンして、それ以下のアクションを実行することができます。しかし、StaticRouter アクションは、使用時にアクションチェーンを終了します。そのため、StaticRouter チェーンで最後のアクションでなければなりません。

表12.26 StaticWireTap のプロパティ

プロパティ 説明 必須
destinations
<route-to> 構成のコンテナプロパティです。
<route-to destination-name="express" service-category="ExpressShipping" 
    service-name="ExpressShippingService"/>

表12.27 StaticWireTap プロセスのメソッド

method 説明
process
メッセージに集約データを追加しないでください。
「Aggregator」 を参照してください。

例12.22 設定例 - StaticWireTap

<action name="routeAction" class="org.jboss.soa.esb.actions.StaticWiretap">
    <property name="destinations">
        <route-to service-category="ExpressShipping" service-name="ExpressShippingService"/>
        <route-to service-category="NormalShipping" service-name="NormalShippingService"/>
    </property>  
</action>

12.5.10. Email WireTap

クラス org.jboss.soa.esb.actions.routing.email.EmailWiretap

表12.28 Email WireTap プロパティ

プロパティ 説明
host
SMTP サーバーのホスト名。指定されていない場合は、jbossesb-properties.xml のデフォルトプロパティ 'org.jboss.soa.esb.mail.smtp.host' が使用されます。
port
SMTP サーバーのポート。指定されていない場合は、jbossesb-properties.xml のデフォルトプロパティ 'org.jboss.soa.esb.mail.smtp.port' が使用されます。
username
SMTP サーバーのユーザー名。指定されていない場合は、jbossesb-properties.xml のデフォルトプロパティ 'org.jboss.soa.esb.mail.smtp.user' が使用されます。
password
SMTP サーバーの上記ユーザー名に対するパスワード。指定されていない場合は、jbossesb-properties.xml のデフォルトプロパティ 'org.jboss.soa.esb.mail.smtp.password' が使用されます。
auth
true の場合、AUTH command を使用してユーザー認証を試行します。指定されていない場合は、jbossesb-propertiesxml のデフォルトプロパティ 'org.jboss.soa.esb.mail.smtp.auth' が使用されます。
from
送信元の e-メールアドレス
sendTo
送信先の e-メールアカウント
subject
E-メールの件名
messageAttachmentName
メッセージペイロードを含む添付のファイル名 (オプション)。指定されない場合は、メッセージペイロードがメッセージボディに含まれます。
message
電子メールメッセージを構成する ESB メッセージコンテンツに追加する文字列 (オプション).
ccTo
カンマ区切り一覧形式の電子メールアドレス (オプション)
attachment
送信メールに追加される添付ファイルを含む子要素

例12.23 設定例 - Email Wiretap

<action name="send-email" class="org.jboss.soa.esb.actions.routing.email.EmailWiretap"> 
    <property name="host" value="smtpHost" /> 
    <property name="port" value="25" /> 
    <property name="username" value="smtpUser" /> 
    <property name="password" value="smtpPassword" /> 
    <property name="from" value="jbossesb@xyz.com" /> 
    <property name="sendTo" value="systemX@xyz.com" /> 
    <property name="subject" value="Important message" /> 
</action> 

12.6. Notifier

クラス org.jboss.soa.esb.actions.Notifier
アクションパイプライン処理の結果に基づいて、設定で指定された一連の通知ターゲットに通知を送信します。
アクションパイプラインは、2 つの段階 (通常の処理の後に結果の処理) で機能します。最初の段階では、パイプラインが、パイプラインの最後に達するまで、またはエラーが発生するまで順番に各アクション (デフォルトではプロセスと呼ばれます) のプロセスメソッドを呼び出します。この時点でパイプラインは逆方向に処理され (第 2 段階)、それぞれの前のアクションで結果メソッドを呼び出します (デフォルトは processException or processSuccess).。これは現在のアクション (成功した最後のアクションまたは例外が発生したアクション) で開始され、パイプラインの先頭に達するまで逆方向に移動します。Notifier は第 1 段階でメッセージの処理を行わず (no-op)、第 2 段階で指定された通知を送信するアクションです。
Notifier クラスの設定は NotificationTargets の一覧を指定するために使用できる NotificationList エレメントを定義するために使用されます。タイプ “ok” の NotificationList では、アクションのパイプライン処理が成功したときに通知を受け取るターゲットが指定されます。タイプ “err” の NotificationList では、これまでに説明したアクションパイプライン処理セマンティクスに応じてアクションパイプライン処理で例外が発生したときに通知を受け取るターゲットが指定されます。“err” と“ok”は大文字と小文字を区別します。
NotificationTarget に送信された通知はターゲット固有ですが、実質的にアクションパイプライン処理を行う ESB メッセージのコピーから構成されます。通知ターゲットタイプとそのパラメータの一覧は、このセクションの最後で示されます。
パイプラインを処理するアクションの各ステップで成功または失敗を通知する機能が必要な場合は、Notifier クラスを使用する <action> の代わりに各 <action> エレメントで“okMethod”と“exceptionMethod”属性を使用します。

例12.24 設定例 - Notifier

<action name="notify" class="org.jboss.soa.esb.actions.Notifier"  okMethod="notifyOK">
    <property name="destinations">
        <NotificationList type="OK">
            <target class="NotifyConsole" />
            <target class="NotifyFiles" >
                <file name="@results.dir@/goodresult.log" />
            </target>
        </NotificationList> 
        <NotificationList type="err">
            <target class="NotifyConsole" />
            <target class="NotifyFiles" >
                <file name="@results.dir@/badresult.log" />
            </target>    
        </NotificationList> 
    </property>
</action>
通知はさまざまなタイプのターゲットに送信できます。以下の表は NotificationTarget タイプとそのパラメータを示しています。

12.6.1. NotifyConsole

クラス NotifyConsole
コンソールに ESB メッセージのコンテンツを出力することにより通知を実行します。

例12.25 NotifyConsole

<target class="NotifyConsole" />

12.6.2. NotifyFiles

クラス NotifyFiles
目的 ESB メッセージのコンテンツを指定された一連のファイルに書き込むことによって通知を実行します。
属性 なし
ファイル
子属性
  • append – 値が true の場合は既存のファイルに通知を付け加えます
  • URI – ファイルを指定する任意の有効な URIです

例12.26 NotifyFiles

<target class="NotifyFiles" >
<file append="true" URI="anyValidURI"/>
<file URI="anotherValidURI"/>
</target>

12.6.3. NotifySqlTable

クラス NotifySqlTable
目的 既存のデータベース表に記録を挿入することで通知を行います。 データベースの記録には ESB メッセージのコンテンツと、 オプションでネストされた <column> エレメントを使って指定される他の値が含まれます。
属性
  • driver-class
  • connection-url
  • user-name
  • password
  • table – 通知レコードが保存されるテーブル
  • dataColumn – ESB メッセージコンテンツが保存されるテーブルコラムの名前
子属性
  • name – 追加の値を保存する表のコラム名です
  • value – 保存する値です

例12.27 NotifySqlTable

<target class="NotifySqlTable" driver-class="com.mysql.jdbc.Driver"
connection-url="jdbc:mysql://localhost/db"
user-name="user"
password="password"
table="table"
dataColumn="messageData">
<column name="aColumnlName" value="aColumnValue"/>
</target>

12.6.4. NotifyQueues

クラス NotifyQueues
目的 ESB メッセージ (添付されたプロパティを含む) を JMS メッセージに変換し、JMS メッセージをキューのリストに送信することによって通知を実行します。追加のプロパティは <messageProp> エレメントを使用して添付できます。
属性 なし
queue
子属性
  • jndiName – キューの JNDI 名です。 Required
  • jndi-URL – JNDI プロバイダ URL です Optional
  • jndi-context-factory - JNDI 初期コンテキストファクトリです Optional
  • jndi-pkg-prefix – JNDI パッケージのプレフィックスです Optional
  • connection-factory - JMS 接続ファクトリの JNDI 名 です。 Optional、 デフォルト設定は ConnectionFactory になります。
messageProp
子属性
  • name - 追加される新しいプロパティ名です。
  • value - 新しいプロパティの値です

例12.28 NotifyQueues

<target class="NotifyQueues" >
<messageProp name="aNewProperty" value="theValue"/>
<queue jndiName="queue/quickstarts_notifications_queue" />
</target>

12.6.5. NotifyTopics

クラス NotifyTopics
目的 ESB メッセージ (添付されたプロパティを含む) を JMS メッセージに変換し、JMS メッセージをトピックの一覧に公開することにより通知を実行します。追加のプロパティは <messageProp> エレメントを使用して添付できます。
属性 なし
topic
子属性
  • jndiName – キューの JNDI 名です。 Required
  • jndi-URL – JNDI プロバイダの URL です。 Optional
  • jndi-context-factory - JNDI の初期コンテキストファクトリです。 Optional
  • jndi-pkg-prefix – JNDI のパッケージプレフィックスです。 Optional
  • connection-factory - JMS 接続ファクトリの JNDI 名です。 Optional、 デフォルトの設定は ConnectionFactory になります。
messageProp
子属性
  • name - 追加される新しいプロパティ名です。
  • value - 新しいプロパティの値です

例12.29 NotifyTopics

<target class="NotifyTopics" >
<messageProp name="aNewProperty" value="theValue"/>
<queue jndiName="queue/quickstarts_notifications_topic" />
</target>

12.6.6. NotifyEmail

クラス NotifyEmail
目的 ESB メッセージコンテンツ (オプションで任意の添付ファイルも) を含む電子メールを送信することにより通知を実行します。
属性 なし
topic
子属性
  • from – e-メールアドレス (javax.email.InternetAddress)。必須
  • sendTo – カンマ区切り一覧形式の電子メールアドレス、必須
  • ccTo – カンマ区切り一覧形式の電子メールアドレス (オプション)
  • subject – E-メールの件名 (必須)
  • message – 電子メールメッセージを構成する ESB メッセージコンテンツに追加する文字列 (オプション)
  • host - SMTP サーバーのホスト名。指定されていない場合は、jbossesb-properties.xml のデフォルトプロパティ org.jboss.soa.esb.mail.smtp.host が使用されます (オプション)
  • port - SMTP サーバーのポート。指定されていない場合は、jbossesb-properties.xml のデフォルトプロパティ org.jboss.soa.esb.mail.smtp.port が使用されます (オプション)
  • username - SMTP サーバーのユーザー名。指定されていない場合は、jbossesb-properties.xml のデフォルトプロパティ org.jboss.soa.esb.mail.smtp.user が使用されます (オプション)
  • password - SMTP サーバーのパスワード。指定されていない場合は、jbossesb-properties.xml のデフォルトプロパティ org.jboss.soa.esb.mail.smtp.password が使用されます (オプション)
  • auth - true の場合は、AUTH コマンドを使用してユーザー認証を試行します。指定されていない場合は、jbossesb-properties.xml のデフォルトプロパティ org.jboss.soa.esb.mail.smtp.auth が使用されます (オプション)
  • msgAttachmentName - メッセージペイロードを含む添付のファイル名。指定されない場合は、メッセージペイロードがメッセージボディに含まれます (Optional)。
添付です。 Optional
子テキスト 添付されるファイルの名前

例12.30 NotifyEmail

<target class="NotifyEmail" from="person@somewhere.com"
sendTo="person@elsewhere.com"
subject="theSubject">
<attachment>attachThisFile.txt</attachment>
</target>

12.6.7. NotifyFTP

クラス NotifyFTP
目的 ESB メッセージコンテンツを含むファイルを作成し、FTP を使用してリモートファイルシステムに転送することにより通知を実行します。
属性 なし
ftp
子属性
  • URI – 有効な FTP URL
  • filename – リモートシステムの ESB メッセージコンテンツを含むファイル名です。

例12.31 NotifyFTP

<target class="NotifyFTP" >
    <ftp URL="ftp://username:pwd@server.com/remote/dir" filename="someFile.txt" />
</target>

12.6.8. NotifyFTPList

クラス NotifyFTPList
目的
NotifyFTPList は NotifyFTP を継承し、単一のファイル名を取り、ESB メッセージオブジェクトにあるファイル名を一覧表示する機能を追加します。
メッセージペイロードにあるファイルには、ファイル一覧 (完全パス) が含まれている必要があります。この一覧は反復され、"listFiles" プロパティが false の場合、一覧内のファイルはすべて、設定された 配信先の FTP サーバーディレクトリに送信されます。"listFiles" プロパティが true の場合は、各行には変換予定のファイル名が含まれており、ファイルが一行ごとに読み込まれます。
そのため、以下を提供してください。
  1. 変換したい単一ファイル ( listFiles = false の単一文字列ペイロード)
  2. 変換したいファイル一覧 (listFiles = false の List<String> ペイロード)
  3. 変換したい単一のファイル一覧 (listFiles = true の単一文字列ペイロード)
  4. 変換したい一覧ファイルの一覧 (listFiles = true の List<String> ペイロード)
属性 なし
ftp
子属性
  • URI – 有効な FTP URL
  • filename – リモートシステムの ESB メッセージコンテンツを含むファイル名です。
  • listFiles – メッセージペイロードに名前指定されているファイルが一覧ファイルの場合は true、そうでない場合は false。デフォルトは false
  • deletelistFile – 一覧ファイルが削除される場合は true、されない場合は false。デフォルトは false

例12.32 NotifyFTP

<target class="NotifyFTPList">
    <ftp URL="ftp://username:password@localhost/outputdir"
        filename="{org.jboss.soa.esb.gateway.file}">
        listFiles="true"
        deletelistFile="true"
</target>

12.6.9. NotifyTCP

クラス NotifyTCP
目的
TCP 経由でメッセージ送信。各接続は通知の期間のみ保持されます。
文字列データペイロードの送信のみに対応。暗黙的 (文字列として)、またはバイトアレイとしてエンコード (byte[])
属性 なし
デスティネーション (複数のデスティネーションに対応)
子属性
  • URI – データの書き込み先となる tcp アドレス、デフォルトポートは 9090

例12.33 NotifyFTP

<target class="NotifyTcp" >
  <destination URI="tcp://myhost1.net:8899" />
  <destination URI="tcp://myhost2.net:9988" />
</target>

12.7. Webservices/SOAP

12.7.1. SOAPProcessor

JBoss Webservices SOAP プロセッサー
このアクションは任意の JBossESB ホストリスナーからの JBossWS ホスト Web サービスエンドポイントの起動をサポートします。つまり、ESB は、Web サービスエンドポイントをまだ公開していないサービスに対して Web サービスエンドポイントを公開するために使用できます。これは、ターゲットサービスの呼び出しをラップするシンサービスラッパー Web サービス (JSR 181 実装など) を記述することによって行えます (ESB 上で実行されているエンドポイント (リスナー) を使用してサービスが公開されます)。また、これらのサービスは ESB によってサポートされている任意のトランスポートチャネル (http、ftp、jms など) を介して起動できます。

注記

SOAPProcessor は JBossWS-Native と JBossWS-CXF スタック両方をサポートします。

12.7.1.1. SOAPProcessor アクション設定

SOAPProcessor アクションに対する設定は非常に簡単です。このアクションは 1 つの必須プロパティ値のみを必要とします ("jbossws-endpoint" プロパティ)。このプロパティは SOAPProcessor が公開 (呼び出し) する JBossWS エンドポイントを指定します。
<action name="JBossWSAdapter" class="org.jboss.soa.esb.actions.soap.SOAPProcessor">
    <property name="jbossws-endpoint" value="ABI_OrderManager" />
    <property name="jbossws-context" value="ABIV1OrderManager_war" />
    <property name="rewrite-endpoint-url" value="true" />
</action>
jbossws-endpoint
これは SOAPProcessor を公開する JBossWS エンドポイントです。必須。
jbossws-context
このオプションのプロパティは、Webservice のデプロイメントのコンテキスト名で、JBossWS エンドポイントを一意に特定するために使用することができます。
rewrite-endpoint-url
オプションの "rewrite-endpoint-url" プロパティは HTTP エンドポイントでの負荷分散をサポートします。この場合、Web サービスエンドポイントコンテナーは WSDL の HTTP(S) エンドポイントアドレスをロードバランサーのものに設定するよう構成されます。"rewrite-endpoint-url" プロパティは、このような状況で HTTP エンドポイントアドレスの書き換えを無効にするために使用できます。これは非 HTTP プロトコルには影響しません。デフォルトは true です。

12.7.1.2. 依存関係

  1. JBoss Application Server 4.2.3.GA
  2. soap.esb サービス。これはディストリビューションの lib フォルダーにあります。

12.7.1.3. Web サービスエンドポイントデプロイメント

このアクションを使用して ESB リスナーを使用することにより任意の JBossWS Web サービスエンドポイントを公開できます。これには.esb デプロイメントの内部 (つまり、Web サービス .war は .esb 内部にバンドルされます) と外部 (たとえば、スタンドアロン Web サービス .war デプロイメント、.ear 内部にバンドルされる Web サービス .war デプロイメント) からデプロイされるエンドポイントが含まれます。ただし、これは .esb デプロイメントが JBoss Application Server にインストールされている場合のみこのアクションを使用できることを意味します (つまり JBossESB Server でサポートされません)。
12.7.1.3.1. エンドポイントの公開
管理ガイドの「規定の公開」を参照してください。

12.7.2. SOAPClient

SOAPClient アクションは JAXWS クライアントクラスを生成し、ターゲットサービスを呼び出すために Wise Client Service を使用します。
構成例:
<action name="soap-wise-client-action" class="org.jboss.soa.esb.actions.soap.wise.SOAPClient">
    <property name="wsdl" value="http://host:8080/OrderManagement?wsdl"/>
    <property name="SOAPAction" value="http://host/OrderMgmt/SalesOrder"/>
</action>

表12.29 SOAPClient オプションのプロパティ

プロパティ 説明
wsdl
使用される WSDL
operationName
webservice WSDL で指定したオペレーション名
SOAPAction
エンドポイントオペレーション。OperationName が優先されます。
EndPointName
起動された EndPoint。Web サービスは複数のエンドポイントを持つことができます。指定されない場合は、wsdl で最初に指定されたものが使用されます。
SmooksRequestMapper
要求に定義された java 対 java のマッピングを定義する smooks 設定ファイルを指定します。
SmooksResponseMapper
応答に対して定義された java 対 java のマッピングを定義するために smooks 設定ファイルを指定します。
serviceName
オブジェクト生成をキャッシュしたり、すでに生成されたオブジェクトを使用したりするために wise によって使用されるシンボル的なサービス名。提供されない場合、wise は wsdl のサーブレット名を使用します。
username
Web サービスが BASIC 認証 HTTP によって保護されている場合に使用されるユーザー名。
password
Web サービスが BASIC 認証 HTTP によって保護されている場合に使用されるパスワード。
smooks-handler-config
SOAP 要求または応答 (特にヘッダの) の変換が必要になることがよくあります。これは一部の標準 SOAP ハンドラを追加するだけで行えます。Wise は JAXWS Soap ハンドラ (smooks に基づいたカスタムのハンドラまたは事前定義されたハンドラ) をサポートします。
SOAP 要求の変換 (送信前) は SOAPClient アクションの Smooks 変換設定プロパティを設定することによってサポートされます。
custom-handlers
また、一連のカスタム標準 JAXWS Soap ハンドラを提供することもできます。このパラメータは SoapHandler インターフェースを実装するクラスの一覧を受け取ります。クラスは完全修飾名を提供し、セミコロンによって区切る必要があります。
LoggingMessages
送信された soap メッセージや受信された応答を参照することはデバッグに役立ちます。Wise は System.out. Boolean 値で交換されるすべてのメッセージを出力する JAX-WS ハンドラを使用することによってこの目的を達成します。

重要

SOA の問題および HTTP 500 エラーが呼び出された webservice にある場合、JBoss Enterprise Service Bus SOAP UI は以下を行います。
  1. "WARN [SOAPClient] Received status code '500' on HTTP SOAP (POST) request to ....." を出力します。
  2. 不良を無視して、次のアクションに続くだけです。

12.7.2.1. SOAP 操作パラメーター

SOAP 操作パラメーターは以下の 2 つの方法で提供されます。
  • デフォルトのボディ位置に設定された Map インスタンスとして使用されます (Message.getBody().add(Map))
  • 名前付きボディ位置に設定された Map インスタンスとして使用されます (Message.getBody().add(String, Map))。ここで、ボディ位置の名前は "paramsLocation" アクションプロパティの値として指定されます。
パラメーター Map 自体も以下の 2 つの方法で値を設定できます。
  1. 任意のタイプの一連のオブジェクト。この場合は、Smooks 設定をアクション属性 SmooksRequestMapper で指定する必要があり、Smooks は java 対 java の変換に使用されます。
  2. 一連の文字列ベースのキー値ペア (<String, Object>)。ここでキーはキーの値が入力される wsdls (または生成されたクラス) で指定された SOAP パラメータの名前です。SOAP 応答メッセージ消費Consumption
SOAP 応答オブジェクトインスタンスは、以下のいずれかの方法で ESB メッセージインスタンスに追加できます。
  • デフォルトのボディ位置 (Message.getBody().add(Map))
  • 名前付きボディ位置 (Message.getBody().add(String, Map))。ここで、ボディ位置の名前は "responseLocation" アクションプロパティの値として指定されます。
また、応答オブジェクトインスタンスには、以下のいずれかの方法で (SOAP 応答から) 値を入力できます。
  1. 一連の任意のタイプのオブジェクト。この場合は、smooks 設定をアクション属性 SmooksResponseMapper で指定する必要があり、smooks は java 対 java の変換に使用されます。
  2. 一連の文字列ベースのキー値ペア (<String, Object>)。ここで、キーはキーの値を入力する wsdls (または生成されたクラス) で指定された SOAP 回答の名前です。SOAP 要求/応答に対する JAX-WS ハンドラ
SOAPClient の使用例については、以下のクイックスタートを参照してください。
  • webservice_consumer_wise は基本的な用途を示します。
  • webservice_consumer_wise2 は、'SmooksRequestMapper' と 'SmooksResponseMapper' の使用方法を示します。
  • webservice_consumer_wise3 は 'smooks-handler-config' の使用方法を示します。
  • webservice_consomer_wise4 は 'custom-handlers' の用途を示します。
Wise の詳細については、Web サイト (http://www.javalinuxlabs.org/drupal/) を参照してください。
12.7.2.1.1. JAXB Annotation Introductions
ネイティブ JBossWS SOAP スタックは SOAP に対するバインドに JAXB を使用します。これは、JBossWS エンドポイントを構築するために注釈なしタイプセットを使用できないことを意味します。この問題を解決するために "JAXB Annotation Introductions" と呼ばれる JBossESB と JBossWS の機能が提供されています。これは基本的に JAXB アノテーションに「紹介」する XML 設定を定義できることを意味します。
この XML 設定はエンドポイントデプロイメントの“META-INF”ディレクトリ内の“jaxb-intros.xml”という名前のファイルにパッケージ化する必要があります。

12.7.2.2. クイックスタート

このアクションの使用方法をデモするいくつかのクイックスタートが JBossESB ディストリビューション (サンプル/クイックスタート) で利用できます。"webservice_bpel" のクイックスタートをご覧ください。

12.7.3. SOAPClient

SOAP クライアントアクションプロセッサ
ターゲットサービスに対してメッセージを構築し、値を入力するために soapUI クライアントサービスを使用します。このアクションはサービスにメッセージをルーティングします。http://www.soapui.org/ を参照してください。

12.7.3.1. エンドポイント操作の仕様

エンドポイント操作の指定は簡単にできます。これを行うには以下のように SOAPClient アクションで "wsdl" プロパティと "operation" プロパティを指定します。
<action name="soapui-client-action" class="org.jboss.soa.esb.actions.soap.SOAPClient">
    <property name="wsdl" value="http://localhost:18080/acme/services/RetailerCallback?wsdl"/>
    <property name="operation" value="SendSalesOrderNotification"/>
</action>

12.7.3.2. SOAP 要求メッセージの構築

SOAP 操作パラメーターは以下の 2 つの方法で提供されます。
  1. デフォルトのボディ位置に設定された Map インスタンスとして使用されます (Message.getBody().add(Map))
  2. 名前付きボディ位置の Map インスタンス (Message.getBody().add(String, Map))。ここで、そのボディ位置の名前は "get-payload-location" アクションプロパティの値として指定されます。
パラメーター Map 自体も以下の 2 つの方法で値を設定できます。
  1. OGNL フレームワークを使用してアクセスされる一連のオブジェクト (SOAP メッセージパラメーターに対する)。OGNL の使用の詳細については、以降で説明します。
  2. 文字列ベースのキー値ペア (<String, Object>)。ここで、キーはキーの値が入力される SOAP パラメーターを識別する OGNL 式です。OGNL の詳細については、以降で説明します。
上述したように OGNL は提供されたパラメーター Map から SOAP メッセージに挿入する SOAP パラメーター値を選択するために使用するメカニズムです。SOAP メッセージ内の固有のパラメーターの OGNL 式は、SOAP ボディ内のそのパラメーターの位置に依存します。以下のメッセージでは、customerNumber パラメーターを表現する OGNL 式 は、"customerOrder.header.customerNumber" です。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:cus="http://schemas.acme.com">
    <soapenv:Header/>
    <soapenv:Body>
    
        <cus:customerOrder>
            <cus:header>
                <cus:customerNumber>123456</cus:customerNumber>
            </cus:header>
        </cus:customerOrder>
        
    </soapenv:Body>
</soapenv:Envelope>
パラメータに対して OGNL 式が計算されると、このクラスは完全な OGNL 式でキーとされるオブジェクトに対して提供されたパラメータマップをチェックします (上記のオプション 1)。このようなパラメータオブジェクトがマップに存在しない場合、このクラスは OGNL ツールキットにマップと OGNL 式インスタンスを提供することによってパラメータをロードしようとします (上記のオプション 2)。これによって値が提供されない場合は、SOAP メッセージ内のこのパラメータ位置が空白のままになります。
上記のサンプルメッセージを取得し、"customerNumber" に値を入力するために「オプション 1」の方法を使用するには、キー "customerOrder" 下のパラメータマップにオブジェクトインスタンス ("Order" オブジェクトインスタンスなど) を設定する必要があります。"customerOrder" オブジェクトインスタンスには、"header" プロパティ ("Header" オブジェクトインスタンスなど) を含める必要があります。"header" プロパティの背後のインスタンス ("Header" オブジェクトインスタンスなど) は "customerNumber" プロパティを持つ必要があります。
コレクションに関連付けられた OGNL 式は少し異なる方法で構築されます。これは例を使用して説明するのが最もわかりやすいケースです。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:cus="http://schemas.active-endpoints.com/sample/customerorder/2006/04/CustomerOrder.xsd"
    xmlns:stan="http://schemas.active-endpoints.com/sample/standardtypes/2006/04/StandardTypes.xsd">

    <soapenv:Header/>
    <soapenv:Body>
        <cus:customerOrder>
            <cus:items>
                <cus:item>
                    <cus:partNumber>FLT16100</cus:partNumber>
                    <cus:description>Flat 16 feet 100 count</cus:description>
                    <cus:quantity>50</cus:quantity>
                    <cus:price>490.00</cus:price>
                    <cus:extensionAmount>24500.00</cus:extensionAmount>
                </cus:item>
                <cus:item>
                    <cus:partNumber>RND08065</cus:partNumber>
                    <cus:description>Round 8 feet 65 count</cus:description>
                    <cus:quantity>9</cus:quantity>
                    <cus:price>178.00</cus:price>
                    <cus:extensionAmount>7852.00</cus:extensionAmount>
                </cus:item>
            </cus:items>
        </cus:customerOrder>
    </soapenv:Body>
    
</soapenv:Envelope>
上記のオーダーメッセージにはオーダー「アイテム」のコレクションが含まれます。コレクションの各エントリは "item" エレメントによって表されます。オーダーアイテム "partNumber" に対する OGNL 式は "customerOrder.items[0].partnumber" と "customerOrder.items[1].partnumber" として構築されます。このことからわかるように、コレクションエントリエレメント ("item" エレメント) は OGNL 式に明示的に現われず、インデックス表記で暗黙的に表されます。オブジェクトグラフという意味では (上記のオプション 1)、これは "items" リスト (リストまたはアレイ) を含むオーダーオブジェクトインスタンス (マップでは "customerOrder" がキーとされます) と "OrderItem" インスタンスであるリストエントリ ("partNumber" などのプロパティを含みます) で表すことができます。
オプション 2 (上述) はオブジェクトモデル (オプション 1) を作成せずに SOAP メッセージに値を入力するクイックかつダーティーな方法を提供します。SOAP 操作パラメータに対応する OGNL 式はオプション 1 のものとまったく同じです (ただし、オブジェクトグラフナビゲーションが関係しない点は除く)。OGNL 式は Map へのキーとして使用され、対応するキー値はパラメータです。
構築され、値が入力される SOAP メッセージテンプレートを表示するには、パラメーター Map に“dumpSOAP”パラメーターを追加します。これは、開発者にとって非常に役に立ち、開発で使用すべきです。

12.7.3.3. SOAP 応答メッセージ消費

SOAP 応答オブジェクトインスタンスは以下のいずれかの方法で ESB メッセージインスタンスに添付できます。
  1. デフォルトのボディ位置 (Message.getBody().add(Map))
  2. 名前付きボディ位置 (Message.getBody().add(String, Map))。ここでボディ位置の名前は "set-payload-location" アクションプロパティの値として指定されます。
応答オブジェクトインスタンスには以下の 3 つのいずれかの方法で値を入力できます (SOAP 応答から)。
  1. XStream ツールキットにより作成し、値が入力されるオブジェクトグラフ。また、JAXB と JAXB のアノテーション導入を使用して応答のアンマーシャル化のサポートを追加することも計画されています。
  2. 一連の文字列ベースのキー値ペア (<String, String>)。ここで、キーは SOAP 応答エレメントを識別する OGNL 式であり、値は SOAP メッセージからの値を表す文字列です。
  3. オプション 1 または 2 がアクション設定で指定されていない場合は、ロー SOAP 応答メッセージ (文字列) がメッセージに添付されます。
オブジェクトグラフ (上記のオプション 1) に値を入力するメカニズムとして XStream を使用することは簡単であり、XML と Java オブジェクトモデルがお互いに互換性がある限り問題ありません。
XStream を使用する方法 (オプション 1) は以下のようにアクションで設定されます。
<action name="soapui-client-action"  class="org.jboss.soa.esb.actions.soap.SOAPClient">
    <property name="wsdl"  value="http://localhost:18080/acme/services/RetailerService?wsdl"/>
    <property name="operation" value="GetOrder"/>
    <property name="get-payload-location" value="get-order-params" />
    <property name="set-payload-location" value="get-order-response" />
    <property name="responseXStreamConfig">
        <alias name="customerOrder" class="com.acme.order.Order"         
            namespace="http://schemas.acme.com/services/CustomerOrder.xsd" />
        <alias name="orderheader" class="com.acme.order.Header" 
            namespace="http://schemas.acme.com/services/CustomerOrder.xsd" />
        <alias name="item" class="com.acme.order.OrderItem" 
            namespace="http://schemas.acme.com/services/CustomerOrder.xsd" />
    </property>
</action>
上記の例には、要求パラメータ Map と応答オブジェクトインスタンスのデフォルトでない名前付き位置を指定する方法の例も含まれています。
また、上記の XStream の設定オプション以外にファイル名マッピングと XStream の注釈付きクラスを指定する機能も提供されます。
<property name="responseXStreamConfig">
    <fieldAlias name="header" class="com.acme.order.Order" fieldName="headerFieldName" />
    <annotation class="com.acme.order.Order" />
</property>
エレメントのローカル名が Java クラスのフィールド名に対応しない場合はフィールドマッピングを使用して XML エレメントと Java フィールドをマッピングできます。
SOAP 応答データを OGNL キーマップ (上記のオプション 2) に抽出し、ESB メッセージに添付するには、以下のように "responseXStreamConfig" プロパティを "true" の値を持つ "responseAsOgnlMap" プロパティに置き換えます。
<action name="soapui-client-action" class="org.jboss.soa.esb.actions.soap.SOAPClient">
    <property name="wsdl" value="http://localhost:18080/acme/services/RetailerService?wsdl"/>
    <property name="operation" value="GetOrder"/>
    <property name="get-payload-location" value="get-order-params" />
    <property name="set-payload-location" value="get-order-response" />
    <property name="responseAsOgnlMap" value="true" />
</action>
ロー SOAP メッセージを文字列 (オプション 3) として返すには、"responseXStreamConfig" プロパティと "responseAsOgnlMap" プロパティの両方を省略します。

12.7.3.4. HttpClient 設定

SOAPClient は Apache Commons HttpClient を使用して、SOAP リクエストを実行します。HttpClientFactory を使用して、HttpClient インスタンスを構築、設定します。SOAPClient での HttpClientFactory 設定の指定は非常に簡単です。以下のように "wsdl" プロパティに別のプロパティを追加するだけです。
<property name="wsdl" value="https://localhost:18443/active-bpel/services/RetailerCallback?wsdl">
    <http-client-property name="file" value="/localhost-https-18443.properties" >
    
    </http-client-property>
</property>
"file" のプロパティの値は、ファイルシステム、クラスパス、URI ベースのリソース (この順番) ベースのリソースとして評価されます。このリソースには、標準の java プロパティ形式の HttpClient 設定が含まれています。
これらのプロパティは、以下のようにアクション設定で直接設定することができます。
<property name="http-client-properties"> 
    <http-client-property name="http.proxyHost" value="localhost"/>
    <http-client-property name="http.proxyPort" value="8080"/> 
</property>

12.7.4. SOAPProxy

SOAPProxy は外部の WS エンドポイント (例:.NET、別の外部 Java ベース AS、LAMP でホスト) の消費と、ESB 経由で WS エンドポイントを再度公開することにフォーカスをあてます。ESB は、最終コンシューマー/クライアント (例:.NET WinForm アプリケーション) と最終プロデューサー (例: RoR-hosted WS) の間にあります。この仲介の役目は、以下の問題を解決する抽象層を提供するためです。
  • クライアントとサービス間の疎結合を強化します。クライアントもサービスも相手の存在を認識していません。
  • クライアントは、リモートサービスのホスト名 / IP アドレスへ直接接続できなくなります。
  • クライアントは、インバウンド/アウトバウンドパラメーターを変更する修正済みの WSDL を確認します。少なくとも、クライアントが もとのプロキシ化されたエンドポイントではなく、ESB の公開するエンドポイントを参照するように、WSDL が微調整されます。
  • SOAP エンベロープ/ボディの変換は、インバウンドのリクエストとアウトバウンドのレスポンス両方に対する ESB アクションチェーン経由で開始できます。
  • クライアントが ESB にある 2 つ以上のプロキシエンドポイント (それぞれ、自身の WSDL または変換、ルーティング要件) に接続できるため、サービスのバージョニングが可能です。ESB は適切なメッセージを適切なエンドポイントに送信し、最終レスポンスを提供します。
  • ContentBasedRouter 経由の複雑なコンテキストベースルーティング
これ以外のメカニズムは適切ではありません。
  • SOAPClient を使用して、ミラリングを行うわけではなく、外部の Web サービスを呼びだします。
  • SOAPProducer は、内部デプロイされた JBoss WS サービスのみを実行します。
  • HttpRouter は、簡単な WS プロキシ化には、過剰な手動設定が必要になります。
  • EBWS は、SOAP エンベロープをストリッピングして、ボディにのみ渡します。
SOAPProxy アクション
  • Web サービスのプロデューサーおよびコンシューマーの両方となります。
  • 必要なのは、外部 wsdl を参照するプロパティのみです。
  • wsdl は、オプションの wsdlTransform プロパティを介して自動的に変換されます。
  • SOAP は http とつながっているとされています。wsdl が読み込まれ、http トランスポートが定義されている場合は、それが使用されます。他のトランスポート (jms) についても検討が必要です。
  • http を使用する場合、HttpRouter プロパティのいずれかがオプションでオーバーライドとして適用されます。
wsdl が http トランスポートを指定する場合、HttpRouter プロパティのいずれかを適用可能です。
その他の使用可能な設定プロパティについては、特定の SOAPProxyTransport 実装自体を参照します。

表12.30

プロパティ 説明 必須
wsdlTransform
柔軟な wsdl 変換ができるように <smooks-resource-list> xml 設定ファイル
No
wsdlCharset
UTF-8 でない場合、オリジナルの wsdl (インポートされたリソース) がエンコードされた文字セット。基盤のプラットフォームでサポートされたエンコーディングである場合、UTF-8 に変換されます。
No
endpointUrl
HttpRouter プロパティの例。ドメイン名を一致させることが SSL 証明書にとって重要な場合便利です。
No
file
Apache Commons HTTPClient プロパティファイル。SSL 経由で Web サービスへプロキシ化する場合に便利です。
No
clientCredentialsRequired
Basic 認証の認証情報がエンドクライアントから来る必要があるかどうか、ファイル内で指定された認証情報が代わりに使用されるかどうか。デフォルトは true です。
No
wsdl
WS エンドポイントが再書き込みされ、ESB からの新しい wsdl として公開されるオリジナルの wsdl url。<definitions><service><port><soap:address ロケーション属性のプロトコルにあわせて、プロトコル固有の SOAPProxyTransport 実装を使用しています。
値は、5つの異種スキーマをベースに場所を参照します。
  • http://
    外部の web サーバーから wsdl をプルしたい場合
    例: http://host/foo/HelloWorldWS?wsdl
  • https://
    SSL 経由で外部の web サーバーから wsdl をプルしたい場合
    例: https://host/foo/HelloWorldWS?wsdl
  • file://
    wsdl がディスクに置かれている場合、ESB JVM でアクセス可能
    例: file:///tmp/HelloWorldWS.wsdl
    注記: 上記の例のスラッシュ 3 つ。これがあるため、絶対パスと相対ファイルパスを指定することができます。
  • classpath://
    ESB アーカイブ内で wsdl のパッケージをしたい場合
    例: classpath:///META-INF/HelloWorldWS.wsdl
    注記: 上記の例のスラッシュ 3 つ。これがあるため、絶対パスと相対 classloader リソースパスを指定することができます。
  • internal://
    wsdl が ESB デプロイメントと同じ JVM 内で JBossWS Web サービスにより提供される場合
    例: internal://jboss.ws:context=foo,endpoint=HelloWorldWS
    注記:上記の用途で http または https の代わりに、このスキームを使用すべきです。これは、サーバーの起動時に Tomcat が受信 http/s リクエストをまだ受け入れない可能性があるため、wsdl にサービスを提供できません。
Yes

例12.34 設定例 - 基本的なシナリオ

<action name="proxy" class="org.jboss.soa.esb.actions.soap.proxy.SOAPProxy">
    <property name="wsdl" value="http://host/foo/HelloWorldWS?wsdl"/>
</action>

例12.35 設定例 - Basic 認証および SSL

<action name="proxy" class="org.jboss.soa.esb.actions.soap.proxy.SOAPProxy">
    <property name="wsdl" value="https://host/foo/HelloWorldWS?wsdl"/>
    <property name="endpointUrl" value="https://host/foo/HelloWorldWS"/>
    <property name="file" value="/META-INF/httpclient-8443.properties"/>
    <property name="clientCredentialsRequired" value="true"/>
</action>

12.8. その他

その他のアクションプロセッサ

12.8.1. SystemPrintln

メッセージのコンテンツを出力する単純なアクション (System.out.println)。
メッセージコンテンツを XML としてフォーマットしようとします。
入力タイプ java.lang.String
クラス org.jboss.soa.esb.actions.SystemPrintln
プロパティ
  • message - メッセージのプレフィックス。Required
  • printfull - true の場合は、メッセージ全体が出力されます。その他の場合は、バイトアレイと添付ファイルのみが出力されます。
  • outputstream - true の場合は System.out が使用されます。その他の場合は System.err が使用されます。

例12.36 SystemPrintln

<action name="print-before"  class="org.jboss.soa.esb.actions.SystemPrintln">
    <property name="message" value="Message before action XXX" />
</action>

12.8.2. SchemaValidationAction

これは、スキーマ (XSD や RELAX NG) ベースの XML メッセージの検証を行うための単純なアクションです。
入力タイプ java.lang.String
クラス org.jboss.soa.esb.actions.validation.SchemaValidationAction
プロパティ
  • schema - 検証スキーマファイルのクラスパスのパス (例 .xsd).
  • schemaLanguage - (オプション) スキーマタイプ/言語。 デフォルト: "http://www.w3.org/2001/XMLSchema" (XSD)

例12.37 SystemPrintln

<action name="val"  class="org.jboss.soa.esb.actions.validation.SchemaValidationAction">
    <property name="schema" value="/com/acme/validation/order.xsd"/>
</action>

12.9. HttpClient 設定

HTTPClient 設定は、プロパティ設定を指定することで行います。以下は、Java プロパティファイルとして指定した場合のプロパティ例です。
# Configurators
configurators=HttpProtocol,AuthBASIC

# HttpProtocol config...
protocol-socket-factory=org.apache.commons.httpclient.contrib.ssl.EasySSLProtocolSocketFactory
keystore=/packages/jakarta-tomcat-5.0.28/conf/chap8.keystore
keystore-passw=xxxxxx
https.proxyHost=localhost
https.proxyPort=443

# AuthBASIC config...
auth-username=tomcat
auth-password=tomcat
authscope-host=localhost
authscope-port=18443
authscope-realm=ActiveBPEL security realm

12.9.1. コンフィギュレーター

HttpClientFactory が必要とするプロパティは、configurators プロパティのみで、コンフィギュレーター実装をコンマ区切りで指定します。各コンフィギュレーター実装は HttpClient インスタンスの様々なアスペクトを設定し、org.jboss.soa.esb.http.Configurator クラスの拡張、configure(HttpClient, Properties) メソッドの提供を行います。

表12.31 事前定義されたアクション

コンフィギュレーター 説明 必須
HttpProtocol
ソケットファクトリや SSL キーストア情報などの HttpClient ホスト、ポート、プロトコル情報の設定
Yes
AuthBasic
HttpClient に対する HTTP Basic 認証の設定
No
AuthNTLM
HttpClient に対する NTLM 認証の設定
No
configurators プロパティで指定した一覧にクラス名を追加することで、追加のコンフィギュレーターを作成、設定可能です。

12.9.1.1. HttpProtocol

HTTP トランスポートプロパティの設定

表12.32 プロパティ

プロパティ 説明 必須
HttpProtocol
ソケットファクトリや SSL キーストア情報などの HttpClient ホスト、ポート、プロトコル情報の設定
Yes
target-host-url
http/https エンドポインの対象 URL
Yes
https.proxyHost
https 接続のプロキシホスト
No
https.proxyPort
Https 接続のプロキシポート、デフォルトのポートは 443
No
http.proxyHost
HTTP 接続のプロキシホスト
No
http.proxyPort
Http 接続のプロキシポート、デフォルトのポートは 80
No
protocol-socket-factory
ソケットファクトリのオーバーライド。ProtocolSocketFactory または ProtocolSocketFactoryBuilder インターフェースの実装
http のデフォルト値は、httpclient DefaultProtocolSocketFactory で、https のデフォルト値は、contributed StrictSSLProtocolSocketFactory です。
ESB コードベースで提供されている ProtocolSocketFactoryBuilder の実装は、AuthSSLProtocolSocketFactoryBuilderSelfSignedSSLProtocolSocketFactoryBuilder の 2 つです。それぞれ、AuthSSLProtocolSocketFactory ファクトリの設定と、自己署名の SSLContext を設定します。
No
keystore
キーストアの場所
No
keystore-passw
キーストアのパスワードまたは暗号化ファイル
No
keystore-type
キーストアのタイプ、デフォルトは jks
No
truststore
TrustStore の場所
No
truststore-passw
トラストストアのパスワードまたは暗号化ファイル
No
truststore-type
トラストストアのタイプ、デフォルトは jks
No

12.9.1.2. AuthBASIC

HTTP Basic 認証プロパティの設定

表12.33 プロパティ

プロパティ 説明 必須
auth-username
認証ユーザー名
Yes
auth-password
認証パスワード
Yes
authscope-host
認証スコープホスト
Yes
authscope-port
認証スコープポート
Yes
authscope-domain
認証スコープドメイン
Yes

12.9.1.3. AuthNTLM

HTTP Basic 認証プロパティの設定

表12.34 プロパティ

プロパティ 説明 必須
ntauth-username
認証ユーザー名
Yes
ntauth-password
認証パスワード
Yes
ntauthscope-host
認証スコープホスト
Yes
ntauthscope-port
認証スコープポート
Yes
ntauthscope-domain
認証スコープドメイン
Yes
ntauthscope-realm
認証スコープレルム
No

このページには機械翻訳が使用されている場合があります (詳細はこちら)。