22장. JXPath

22.1. 개요

JXPath 언어를 사용하면 Apache Commons JXPath 언어를 사용하여 Java 빈을 호출할 수 있습니다. JXPath 언어의 구문은 Cryostat와 유사하지만 XML 문서에서 요소 또는 특성 노드를 선택하는 대신 Java 빈 개체 그래프에서 메서드를 호출합니다. 빈 속성 중 하나가 XML 문서(^1/JDOM 인스턴스)를 반환하는 경우 경로의 나머지 부분은 Cryostat 표현식으로 해석되고 문서에서 XML 노드를 추출하는 데 사용됩니다. 즉, JXPath 언어는 개체 그래프 탐색 및 XML 노드 선택의 하이브리드를 제공합니다.

22.2. JXPath 패키지 추가

경로에서 JXPath를 사용하려면 예 22.1. “camel-jxpath 종속성 추가” 에 표시된 것처럼 camel-jxpath 에 대한 종속성을 프로젝트에 추가해야 합니다.

예 22.1. camel-jxpath 종속성 추가

<!-- Maven POM File -->
<properties>
  <camel-version>2.23.2.fuse-790054-redhat-00001</camel-version>
  ...
</properties>

<dependencies>
  ...
  <dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-jxpath</artifactId>
    <version>${camel-version}</version>
  </dependency>
  ...
</dependencies>

22.3. 변수

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

표 22.1. JXPath 변수

Variable유형현재의

org.apache.camel.Exchange

현재 교환

in

org.apache.camel.Message

IN 메시지

out

org.apache.camel.Message

OUT 메시지

22.4. 옵션

표 22.2. “JXPath 옵션” JXPath 옵션에 대해 설명합니다.

표 22.2. JXPath 옵션

옵션유형설명

lenient

boolean

Camel 2.11/2.10.5: JXPathContext를 설정할 수 있습니다. 이 옵션을 사용하면 JXPath 표현식이 잘못된 데이터 또는 누락될 수 있는 표현식 및 메시지 본문에 대해 평가할 수 있습니다. 자세한 내용은 JXPath 문서를 참조하십시오. 이 옵션은 기본적으로 false입니다.

22.5. 예

다음 예제 경로는 JXPath를 사용합니다.

<camelContext>
  <route>
    <from uri="activemq:MyQueue"/>
    <filter>
      <jxpath>in/body/name = 'James'</xpath>
      <to uri="mqseries:SomeOtherQueue"/>
    </filter>
  </route>
</camelContext>

다음 간단한 예제에서는 JXPath 표현식을 메시지 필터에서 서술자로 사용합니다.

from("direct:start").
    filter().jxpath("in/body/name='James'").
    to("mock:result");

22.6. JXPath 삽입

Cryostat 통합을 사용하여 8080에서 메서드를 호출하고 JXPath와 같은 다양한 언어를 사용하여 메시지에서 값을 추출하고 메서드 매개 변수에 바인딩할 수 있습니다.

예를 들면 다음과 같습니다.

public class Foo {
     @MessageDriven(uri = "activemq:my.queue")
     public void doSomething(@JXPath("in/body/foo") String correlationID, @Body String body)
     { // process the inbound message here }
   }

22.7. 외부 리소스에서 스크립트 로드

Camel 2.11로 사용 가능

스크립트를 외부화하고 Camel이 "classpath:", "file:" 또는 "http:" 와 같은 리소스에서 로드하도록 할 수 있습니다. 다음 구문을 사용합니다.

"resource:scheme:location"

예를 들어 classpath에서 파일을 참조하려면 다음을 수행합니다.

.setHeader("myHeader").jxpath("resource:classpath:myjxpath.txt")