第33章 XQuery

概要

XQuery は当初、データベース内の XML フォームに保存されているデータのクエリー言語として開発されました。XQuery 言語を使用すると、メッセージが XML 形式の場合に、現在のメッセージの一部を選択できます。XQuery は、XPath 言語のスーパーセットです。したがって、有効なすべての XPath 式は有効な XQuery 式でもあります。

Java 構文

XQuery 式を xquery() に渡すには、いくつかの方法があります。単純な式の場合は、XQuery の式を文字列として渡すことができます (java.lang.String)。XQuery 式が長い場合は、ファイルに式を保存することが推奨されます。このファイルは、オーバーロードされた xquery() メソッドに java.io.File 引数または java.net.URL 引数を渡すことで参照できます。XQuery 式は、メッセージの内容に対して暗黙的に作用し、結果としてノードセットを返します。コンテキストに応じて、戻り値は述語 (空のノードセットは false として解釈されます) または式として解釈されます。

Saxon モジュールの追加

XQuery をルートで使用するには、例33.1「camel-saxon 依存関係の追加」 で示されたように、camel-saxon の依存関係をプロジェクトに追加する必要があります。

例33.1 camel-saxon 依存関係の追加

<!-- Maven POM File -->
...
<dependencies>
  ...
  <dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-saxon</artifactId>
    <version>${camel-version}</version>
  </dependency>
  ...
</dependencies>

Camel on EAP デプロイメント

camel-saxon コンポーネントは、Camel on EAP (Wildfly Camel) フレームワークによってサポートされており、Red Hat JBoss Enterprise Application Platform (JBoss EAP) コンテナー上でシンプルなデプロイモデルを提供します。

静的インポート

アプリケーションコードで xquery() static メソッドを使用するには、以下の import ステートメントを Java ソースファイルに追加します。

import static org.apache.camel.component.xquery.XQueryBuilder.xquery;

変数

表33.1「XQuery 変数」 に、XQuery を使用する際にアクセス可能な変数の一覧を示します。

表33.1 XQuery 変数

変数説明

exchange

エクスチェンジ

現在のエクスチェンジ

in.body

オブジェクト

IN メッセージのボディー

out.body

オブジェクト

OUT メッセージのボディー

in.headers.key

オブジェクト

キーが key である IN メッセージヘッダー

out.headers.key

オブジェクト

キーが key である OUT メッセージヘッダー

key

オブジェクト

キーが key であるエクスチェンジプロパティー

例33.2「XQuery を使用するルート」 は、XQuery を使用するルートを示しています。

例33.2 XQuery を使用するルート

<camelContext>
  <route>
    <from uri="activemq:MyQueue"/>
    <filter>
      <language langauge="xquery">/foo:person[@name='James']</language>
      <to uri="mqseries:SomeOtherQueue"/>
    </filter>
  </route>
</camelContext>