32.8. 변수 및 함수 사용
32.8.1. 경로에서 변수 평가
경로 내에서 Cryostat 표현식을 평가할 때 Cryostat 변수를 사용하여 현재 교환 내용과 O/S 환경 변수 및 Java 시스템 속성에 액세스할 수 있습니다. 변수 값에 액세스하는 구문은 XML 네임스페이스를 통해 변수에 액세스하는 경우 $VarName
또는 $Prefix: VarName
입니다.
예를 들어 In 메시지의 본문에 $in:body
로 액세스하고 In 메시지의 헤더 값은 $in:HeaderName
으로 액세스할 수 있습니다. O/S 환경 변수는 $env:EnvVar
로 액세스할 수 있으며 Java 시스템 속성은 $system:SysVar
로 액세스할 수 있습니다.
다음 예에서 첫 번째 경로는 / person/city
요소의 값을 추출하여 city
헤더에 삽입합니다. 두 번째 경로 필터는 $in:city = 'London'
을 사용하여 교환합니다. 여기서 $in:city
변수가 city
헤더 값으로 교체됩니다.
from("file:src/data?noop=true") .setHeader("city").xpath("/person/city/text()") .to("direct:tie"); from("direct:tie") .filter().xpath("$in:city = 'London'").to("file:target/messages/uk");
32.8.2. 경로에서 함수 평가
표준 Cryostat 함수 외에도 Cryostat 언어는 추가 함수를 정의합니다. 이러한 추가 기능( 표 32.4. “Cryostat 사용자 정의 기능”에 나열된)은 기본 교환에 액세스하거나, 간단한 표현식을 평가하거나, Apache Camel 속성 자리 표시자 구성 요소에서 속성을 검색하는 데 사용할 수 있습니다.
예를 들어 다음 예제에서는 in:header()
함수와 in:body()
함수를 사용하여 기본 교환에서 헤드와 본문에 액세스합니다.
from("direct:start").choice() .when().xpath("in:header('foo') = 'bar'").to("mock:x") .when().xpath("in:body() = '<two/>'").to("mock:y") .otherwise().to("mock:z");
이러한 함수와 해당 in:HeaderName
또는 in:body
변수 간의 유사성을 확인합니다. 함수에는 in:body
가 아니라 in:header('HeaderName')
대신 in:header( 'HeaderName
' ) 및 in:body()
의 구문이 약간 다릅니다.
32.8.3. CryostatBuilder에서 변수 평가
Cryostat Builder
클래스를 사용하여 평가되는 표현식에서 변수를 사용할 수도 있습니다. 이 경우 평가할 교환 개체가 없기 때문에 $in:body
또는 $in:HeaderName
과 같은 변수를 사용할 수 없습니다. 그러나 변수 (이름,값) fluent 빌더 방법을 사용하여 인라인으로 정의된 변수
를 사용할 수 있습니다.
예를 들어 다음 CryostatBuilder 구성은 $test
변수를 평가하며, 이 변수는ournon : 값을 갖도록 정의됩니다.
String var = XPathBuilder.xpath("$test") .variable("test", "London") .evaluate(getContext(), "<name>foo</name>");
이 방식으로 정의된 변수는 글로벌 네임스페이스에 자동으로 입력됩니다(예: 변수 $test
에서는 접두사를 사용하지 않음).