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 종속성 추가
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를 사용합니다.
다음 간단한 예제에서는 JXPath 표현식을 메시지 필터에서 서술자로 사용합니다.
{snippet:id=example|lang=java|url=camel/trunk/components/camel-jxpath/src/test/java/org/apache/camel/language/jxpath/JXPathFilterTest.java}
{snippet:id=example|lang=java|url=camel/trunk/components/camel-jxpath/src/test/java/org/apache/camel/language/jxpath/JXPathFilterTest.java}
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 } }
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"
"resource:scheme:location"
예를 들어 classpath에서 파일을 참조하려면 다음을 수행합니다.
.setHeader("myHeader").jxpath("resource:classpath:myjxpath.txt")
.setHeader("myHeader").jxpath("resource:classpath:myjxpath.txt")