73.3. 例


from("queue:foo")
  .filter().xquery("//foo")
  .to("queue:bar")
Copy to Clipboard Toggle word wrap

クエリー内で関数を使用することもできますが、その場合は明示的な型変換が必要で、そうしないと org.w3c.dom.DOMException が発生します。hierarchy_request_err) が発生します。関数の期待される出力型を渡す必要があります。例えば、concat 関数は String を 返すが、これは次のように行われる。

from("direct:start")
  .recipientList().xquery("concat('mock:foo.', /person/@city)", String.class);
Copy to Clipboard Toggle word wrap

そして XML DSL では:

<route>
  <from uri="direct:start"/>
  <recipientList>
    <xquery type="java.lang.String">concat('mock:foo.', /person/@city</xquery>
  </recipientList>
</route>
Copy to Clipboard Toggle word wrap

73.3.1. ネームスペースの利用

使用したい標準的な名前空間のセットがあり、それを多くの XQuery 式で共有したい場合は、図のように、Java DSL を使用する際に org.apache.camel.support.builder.Namespaces を使用できます。

Namespaces ns = new Namespaces("c", "http://acme.com/cheese");

from("direct:start")
  .filter().xquery("/c:person[@name='James']", ns)
  .to("mock:result");
Copy to Clipboard Toggle word wrap

2 番目のパラメーターとして渡される ns 変数で、名前空間が xquery に 提供されていることに注目してください。

各名前空間はキー=値のペアで、接頭辞がキーとなります。XQuery 式では、名前空間はその接頭辞で使用されます (例)。

/c:person[@name='James']
Copy to Clipboard Toggle word wrap

名前空間ビルダーは、図のように複数の名前空間の追加をサポートしています。

Namespaces ns = new Namespaces("c", "http://acme.com/cheese")
                     .add("w", "http://acme.com/wine")
                     .add("b", "http://acme.com/beer");
Copy to Clipboard Toggle word wrap

XML DSL で名前空間を使用する場合は、XML ルートタグ (または camelContextroutesroute タグの 1 つ) で名前空間を設定するため、それとは異なります。

以下の XML の例では、Spring XML を使用しています。名前空間はルートタグの bean でxmlns:foo="http://example.com/person " の行で宣言されています。

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:foo="http://example.com/person"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

  <camelContext id="camel" xmlns="http://activemq.apache.org/camel/schema/spring">
    <route>
      <from uri="activemq:MyQueue"/>
      <filter>
        <xquery>/foo:person[@name='James']</xquery>
        <to uri="mqseries:SomeOtherQueue"/>
      </filter>
    </route>
  </camelContext>
</beans>
Copy to Clipboard Toggle word wrap

この名前空間は接頭辞として foo を 使用するので、&lt;xquery&gt; 式ではこの名前空間を使用するために /foo: を使用します。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat