WebSphere MQ 構成でデプロイされたアセットは、MQMD characterSet、messageId、および correlationId を着信リクエストの MQ メッセージから送信レスポンスの MQ メッセージにデフォルトでコピーします。これはデフォルトの応答条件メカニズムです。
着信リクエストの messageId を送信レスポンスの correlationId にコピーする仮想アセットを作成するなど、異なる応答条件メカニズムが必要な場合、メッセージ レスポンダーのレベルで構成できます。次の操作を行います。
- Header Data Bank ツールをレスポンダーの着信ヘッダー リクエストへ連結し、messageId (または任意の MQMD フィールド) の値を抽出します (「Header Data Bank」を参照してください)。
- メッセージ レスポンダーのトランスポート ヘッダー オプションの MQ エリア (「[ トランスポートヘッダー] タブ」を参照してください) で messageId (または任意の MQMD フィールド名) を追加し、その値をリクエストの messageId またはデータ バンクが提供するフィールドでパラメータライズします。 MQMD MQMessage フィールドに対してこのアプローチを使用できます。
- Virtualize が認識し、処理する MQ メッセージの MQMD フィールド名の一覧は、MQMD のドキュメントを参照してください。
データ バンクおよびトラフィック ビューで値が読めるように、Virtualize は 16 進数でエンコードされた byte 配列フィールドを表示することに注意してください。しかしながら、正確なバイト コンテンツは、元のバイト コンテンツを維持しながら、リクエストからレスポンス メッセージに転送されます。
カスタム メッセージ形式の MQ メッセージの RFH2 ヘッダーを使用した応答条件
カスタム メッセージ形式を使用する MQ メッセージでは、明示的にカスタム メッセージ コンバーターに保持されていない限り、XML メッセージの RFH2 ヘッダーにアクセスできず、レスポンダー応答条件に使用できません。レスポンダー応答条件に RFH2 ヘッダーが必要な場合、カスタム スクリプトから XML フォーマットのメッセージ文字列の一部としてアクセスできます。
次の Jython スクリプトは、RFH2 ヘッダーにアクセスするためのサンプルです。リクエストのメッセージ ドメインが sampleDomain
に設定されており、sampleKey
のアプリケーション定義プロパティが sampleValue
に設定されているかどうかを確認します。
from com.parasoft.api import CorrelationScriptingHookConstants from com.parasoft.xml import XMLUtil from org.w3c.dom import * from javax.xml.xpath import * from java.lang import * def match(context): msg = context.get(CorrelationScriptingHookConstants.MESSAGE_STR) if msg != None: xmlDocument = XMLUtil.buildDocumentFromString(msg) cond1 = matchRFH2Header(xmlDocument, "mcd/Msd", "sampleDomain") cond2 = matchRFH2Header(xmlDocument, "usr/sampleKey", "sampleValue") return cond1 and cond2 return false def matchRFH2Header(xmlDocument, path, val): xPathFactory = XPathFactory.newInstance(); xpath = xPathFactory.newXPath() expression = xpath.compile("/RFH2Message/RFH2Headers/" + path + "/text()") elementValue = expression.evaluate(xmlDocument) return String(elementValue).equals(val)
以下のパスを使用してさまざまな RFH2 エリアの値にアクセスできます。
メッセージ コンテンツ記述子
- "mcd/Msd" - Message Domain
- "mcd/Set" - Message Set
- "mcd/Type" - Message Type
- "mcd/Fmt" - Output Format
パブリッシュ/サブスクライブコマンド
- "psc/Command"
- "psc/Topic"
- "psc/SubIdentity"
- "psc/QName"
- "psc/QMgrName"
- "psc/SubPoint"
- "psc/Filter"
- "psc/SubName"
- "psc/SubUserData"
- "psc/RegOpt"
アプリケーション定義プロパティ
- "usr/*"
Java Messaging Service
- "jms/Dst" - Destination
- "jms/Rto" - Reply To
- "jms/Tms" - Timestamp
- "jms/Exp" - Expiration
- "jms/Cid" - Correlation Id
- "jms/Pri" - Priority
- "jms/Dlv" - Delivery Mode
スクリプトを使用して定義された応答条件の詳細については「カスタム応答条件」を参照してください。
トラブルシューティング
メッセージが適切に対応していない場合、エラー メッセージを出している場合、またはメッセージに応答していない場合、ヘッダーに表示されたエンコーディングと、メッセージ ボディで実際に使用されているエンコーディングが一致しているかを確認します。一致していない場合、 JRE システム プロパティを使用して期待されるメッセージ形式を上書きする必要があります。
たとえば、メッセージ ヘッダーに characterSet=37 と表示されているが、実際のメッセージはUTF-8 でエンコードされている場合、次の JRE システム プロパティを使用します。
mq.force.utf8.encoding=true
-J-D
の後にプロパティ名を付けてVirtualize を起動します。例:
virtualize.exe -J-Dmq.force.utf8.encoding=true
関連するプロパティ mq.force.custom.encoding=UTF-8
は、MQ 記録ウィザードがカスタム メッセージ形式を参照または使用するとき (ネイティブ MQ メッセージ コンテンツと XML の変換時) に適用されます。