13.4. XML メッセージのフィルタリング
AMQ Broker には、XPath を使用して XML ボディーを含むテキストメッセージをフィルタリングする方法があります。XPath (XML Path Language) は、XML ドキュメントからノードを選択するためのクエリー言語です。
テキストベースのメッセージのみがサポートされています。大きなメッセージのフィルタリングはサポートされていません。
テキストベースのメッセージをフィルタリングするには、XPATH '<xpath-expression> という形式のメッセージセレクターを作成する必要があります。
メッセージボディーの例
<root>
<a key='first' num='1'/>
<b key='second' num='2'>b</b>
</root>
XPath クエリーに基づくフィルター
XPATH 'root/a'
XPath はメッセージのボディーに適用され、XML の解析を必要とするため、フィルタリングは通常のフィルターよりも大幅に遅くなります。
XPath フィルターは、次のプロトコルを使用することにより、プロデューサーとコンシューマーの間でサポートされています。
- OpenWire JMS
- Core (および Core JMS)
- STOMP
- AMQP
XML Parser の設定
デフォルトでは、ブローカーによって使用される XML Parser は、JDK によって使用されるプラットフォームのデフォルトの DocumentBuilderFactory インスタンスです。
XPath デフォルト設定に使用される XML パーサーには、以下の設定が含まれます。
ただし、実装固有の問題に対処するために、artemis.profile 設定ファイルでシステムプロパティーを設定することで、機能をカスタマイズできます。
org.apache.activemq.documentBuilderFactory.feature:prefix
機能設定の例
-Dorg.apache.activemq.documentBuilderFactory.feature:http://xml.org/sax/features/external-general-entities=true