30.4. 표현식
30.4.1. 개요
간단한 언어는 메시지 교환의 다른 부분을 반환하는 다양한 기본 표현식을 제공합니다. 예를 들어 simple("$header.timeOfDay}")
표현식은 수신 메시지에서 timeOfDay
라는 헤더의 내용을 반환합니다.
Apache Camel 2.9부터 변수 값을 반환하려면 항상 자리 표시자 구문 ${Expression}
을 사용해야 합니다. enclosing 토큰(${
및 }
)을 생략하는 것은 허용되지 않습니다.
30.4.2. 단일 변수의 콘텐츠
간단한 언어를 사용하여 제공된 변수에 따라 문자열 표현식을 정의할 수 있습니다. 예를 들어 양식의 변수를 사용하여 다음과 같이 HeaderName 헤더의 값을 가져올 수 있습니다.
simple("${in.header.foo}")
30.4.3. 문자열에 포함된 변수
예를 들어, string expression 전환에 간단한 변수를 포함할 수 있습니다.
simple("Received a message from ${in.header.user} on ${date:in.header.date:yyyyMMdd}.")
30.4.4. 날짜 및 Cryostat 변수
교환의 모든 부분에 액세스하는 변수( 표 30.1. “간단한 언어의 변수”참조)를 제공하는 것뿐만 아니라 간단한 언어에서는 형식 지정 날짜, date
pattern, meaning() 메서드 호출에 대한 특수 변수도 제공합니다. :
예를 들어 다음과 같이 date 및 metrics 변수를 사용할 수 있습니다.
simple("Todays date is ${date:now:yyyyMMdd}") simple("The order type is ${bean:orderService?method=getOrderType}")
30.4.5. 결과 유형 지정
표현식의 결과 유형을 명시적으로 지정할 수 있습니다. 이는 주로 결과 유형을 부울 또는 숫자 유형으로 변환하는 데 유용합니다.
Java DSL에서 결과 유형을 simple()
에 대한 추가 인수로 지정합니다. 예를 들어 정수 결과를 반환하려면 다음과 같이 간단한 표현식을 평가할 수 있습니다.
...
.setHeader("five", simple("5", Integer.class))
XML DSL에서 resultType
특성을 사용하여 결과 유형을 지정합니다. 예를 들면 다음과 같습니다.
<setHeader headerName="five">
<!-- use resultType to indicate that the type should be a java.lang.Integer -->
<simple resultType="java.lang.Integer">5</simple>
</setHeader>
30.4.6. 동적 헤더 키
Camel 2.17에서 setHeader
및 setExchange
속성을 사용하면 키 이름이 단순 언어 표현식인 경우 Simple 언어를 사용하여 동적 헤더 키를 사용할 수 있습니다.
<camelContext xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:start"/> <setHeader headerName="$simple{type:org.apache.camel.spring.processor.SpringSetPropertyNameDynamicTest$TestConstans.EXCHANGE_PROP_TX_FAILED}"> <simple>${type:java.lang.Boolean.TRUE}</simple> </setHeader> <to uri="mock:end"/> </route> </camelContext>
30.4.7. 중첩된 표현식
단순 표현식은 nested Cryostat- Cryostat일 수 있습니다. 예를 들면 다음과 같습니다.
simple("${header.${bean:headerChooser?method=whichHeader}}")
30.4.8. 상수 또는 열거 액세스
다음 구문을 사용하여 Quarkus의 상수 또는 enum 필드에 액세스할 수 있습니다.
type:ClassName.Field
예를 들어 다음 Java enum
유형을 고려하십시오.
package org.apache.camel.processor; ... public enum Customer { GOLD, SILVER, BRONZE }
다음과 같이 Customer
enum 필드에 액세스할 수 있습니다.
from("direct:start") .choice() .when().simple("${header.customer} == ${type:org.apache.camel.processor.Customer.GOLD}") .to("mock:gold") .when().simple("${header.customer} == ${type:org.apache.camel.processor.Customer.SILVER}") .to("mock:silver") .otherwise() .to("mock:other");
30.4.9. OGNL 표현식
OGNL(오브젝트 그래프 탐색 언어)은 chain-like fashion으로 빈 메서드를 호출하기 위한 표기법입니다. 메시지 본문에 Java 8080이 포함된 경우 OGNL 표기법을 사용하여 빈 속성에 쉽게 액세스할 수 있습니다. 예를 들어 메시지 본문이 getAddress()
접근자가 있는 Java 개체인 경우 Address 개체 및
오브젝트의 속성에 다음과 같이 액세스할 수 있습니다.
Address
simple("${body.address}") simple("${body.address.street}") simple("${body.address.zip}") simple("${body.address.city}")
여기서 표기법 ${body.address.street}
는 ${body.getAddress.getStreet}
.의 약어입니다.
30.4.10. OGNL null-safe operator
null 안전 연산자( ?
)를 사용하여 본문에 주소가 없는 경우 null 포인터 예외가 발생하지 않도록 할 수 있습니다. 예를 들면 다음과 같습니다.
simple("${body?.address?.street}")
본문이 java.util.Map
유형인 경우 다음 표기법을 사용하여 맵에서 키 foo
를 사용하여 값을 조회할 수 있습니다.
simple("${body[foo]?.name}")
30.4.11. OGNL 목록 요소 액세스
또한 대괄호 표기법을 사용하여 목록의 요소에 액세스할 수도 있습니다. 예를 들면 다음과 같습니다.
simple("${body.address.lines[0]}") simple("${body.address.lines[1]}") simple("${body.address.lines[2]}")
last
키워드는 목록의 마지막 요소의 인덱스를 반환합니다. 예를 들어 다음과 같이 목록의 두 번째 마지막 요소에 액세스할 수 있습니다.
simple("${body.address.lines[last-1]}")
size
방법을 사용하여 다음과 같이 목록 크기를 쿼리할 수 있습니다.
simple("${body.address.lines.size}")
30.4.12. OGNL 배열 길이 액세스
다음과 같이 길이 방법을 통해 Java 배열의 길이에 액세스할 수 있습니다.
String[] lines = new String[]{"foo", "bar", "cat"}; exchange.getIn().setBody(lines); simple("There are ${body.length} lines")