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.21.0.fuse-770013-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를 사용할 때 액세스할 수 있는 변수를 나열합니다.
Variable | 유형 | 현재의 |
---|---|---|
|
| 현재 교환 |
|
| IN 메시지 |
|
| OUT 메시지 |
22.4. 옵션
표 22.2. “JXPath 옵션” JXPath 옵션에 대해 설명합니다.
옵션 | 유형 | 설명 |
---|---|---|
|
| 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")