33장. XQuery

33.1. 개요

XQuery는 원래 XML 형식으로 데이터베이스에 저장된 데이터의 쿼리 언어로 고안되었습니다. XQuery 언어를 사용하면 메시지가 XML 형식일 때 현재 메시지의 일부를 선택할 수 있습니다. XQuery는 Cryostat 언어의 상위 집합이므로 유효한 모든 Cryostat 표현식도 유효한 XQuery 표현식입니다.

33.2. Java 구문

XQuery 표현식을 여러 가지 방법으로 xquery() 에 전달할 수 있습니다. 간단한 표현식의 경우 XQuery 표현식을 문자열(java.lang.String)으로 전달할 수 있습니다. 더 긴 XQuery 표현식의 경우 식을 파일에 저장하는 것을 선호할 수 있습니다. 이 표현식은 java.io.File 인수 또는 java.net.URL 인수를 오버로드된 xquery() 메서드에 전달하여 참조할 수 있습니다. XQuery 표현식은 메시지 콘텐츠에 암시적으로 작동하고 그 결과로 노드 세트를 반환합니다. 컨텍스트에 따라 반환 값은 서술자(빈 노드 세트가 false로 해석되는 경우) 또는 표현식으로 해석됩니다.

33.3. 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>

33.4. Camel on EAP 배포

camel-saxon 구성 요소는 Red Hat JBoss EAP(JBoss Enterprise Application Platform) 컨테이너에 간단한 배포 모델을 제공하는 EAP의 Camel(Wildfly Camel) 프레임워크에서 지원합니다.

33.5. 정적 가져오기

애플리케이션 코드에서 xquery() 정적 메서드를 사용하려면 Java 소스 파일에 다음 import 문을 포함합니다.

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

33.6. 변수

표 33.1. “XQuery 변수” XQuery를 사용할 때 액세스할 수 있는 변수를 나열합니다.

표 33.1. XQuery 변수

Variable유형설명

exchange

교환

현재 교환

in.body

개체

IN 메시지의 본문

out.body

개체

OUT 메시지의 본문

in.headers.key

개체

키가 key인 IN 메시지 헤더

out.headers.key

개체

키가 key인 OUT 메시지 헤더

key

개체

키가 인 교환 속성

33.7. 예제

예 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>