303.7. 샘플
아래 Spring XML 샘플에서는 헤더 값을 기반으로 필터링합니다.
Message Filter 패턴에서 위의 서술자 테스트에 대해 Simple 언어를 사용할 수 있습니다. 여기서 in 메시지에 foo
헤더가 있는지 테스트합니다(키 foo
가 있는 헤더가 있음). 표현식이 true 로 평가되면 메시지가 mock:fooOrders
끝점으로 라우팅됩니다. 그렇지 않으면 메시지가 삭제됩니다.
Java DSL의 예는 다음과 같습니다.
from("seda:orders") .filter().simple("${in.header.foo}") .to("seda:fooOrders");
from("seda:orders")
.filter().simple("${in.header.foo}")
.to("seda:fooOrders");
다음과 같은 간단한 텍스트 연결을 위해 간단한 언어를 사용할 수도 있습니다.
from("direct:hello") .transform().simple("Hello ${in.header.user} how are you?") .to("mock:reply");
from("direct:hello")
.transform().simple("Hello ${in.header.user} how are you?")
.to("mock:reply");
Camel이 올바르게 구문 분석할 수 있도록 표현식에서 $\{ } 자리 표시자를 사용해야 합니다.
이 샘플에서는 date 명령을 사용하여 현재 날짜를 출력합니다.
from("direct:hello") .transform().simple("The today is ${date:now:yyyyMMdd} and it is a great day.") .to("mock:reply");
from("direct:hello")
.transform().simple("The today is ${date:now:yyyyMMdd} and it is a great day.")
.to("mock:reply");
아래 샘플에서는 empty 언어를 호출하여 반환된 문자열에 포함하기 위해 flavor에서 메서드를 호출합니다.
from("direct:order") .transform().simple("OrderId: ${bean:orderIdGenerator}") .to("mock:reply");
from("direct:order")
.transform().simple("OrderId: ${bean:orderIdGenerator}")
.to("mock:reply");
여기서 orderIdGenerator
는 레지스트리에 등록된Bean의 ID입니다. Spring을 사용하는 경우 SpringBean ID입니다.
주문 ID 생성기Bean에서 호출할 메서드를 선언하려면 generateId
메서드를 호출하는 아래와 같은 .method 이름을
앞에 추가해야 합니다.
from("direct:order") .transform().simple("OrderId: ${bean:orderIdGenerator.generateId}") .to("mock:reply");
from("direct:order")
.transform().simple("OrderId: ${bean:orderIdGenerator.generateId}")
.to("mock:reply");
Bean 구성 요소 자체에 익숙한 ?method=methodname
옵션을 사용할 수 있습니다.
from("direct:order") .transform().simple("OrderId: ${bean:orderIdGenerator?method=generateId}") .to("mock:reply");
from("direct:order")
.transform().simple("OrderId: ${bean:orderIdGenerator?method=generateId}")
.to("mock:reply");
또한 Camel 2.3 이후에서는 본문을 지정된 유형으로 변환하여 수행할 수 있는 문자열임을 확인할 수도 있습니다.
<transform> <simple>Hello ${bodyAs(String)} how are you?</simple> </transform>
<transform>
<simple>Hello ${bodyAs(String)} how are you?</simple>
</transform>
단축 표기법이 몇 가지 유형이 있으므로 java.lang.
String
대신 String을 사용할 수 있습니다. 다음은 byte[], String, Integer, Long
입니다. 다른 모든 유형은 해당 FQN 이름(예: org.w3c.dom.Document
)을 사용해야 합니다.
Camel 2.3 이후의 헤더 맵
의 값을 조회할 수도 있습니다.
<transform> <simple>The gold value is ${header.type[gold]}</simple> </transform>
<transform>
<simple>The gold value is ${header.type[gold]}</simple>
</transform>
위의 코드에서 이름 유형으로
헤더를 조회하고 java.util.Map
로 관련한 다음 키 골드
로 조회하고 값을 반환합니다. 헤더가 맵으로 변환되지 않으면 예외가 발생합니다. name 유형의
헤더가 존재하지 않는 경우 null
이 반환됩니다.
Camel 2.9 이후에서는 다음과 같은 기능을 중첩할 수 있습니다.
<setHeader headerName="myHeader"> <simple>${properties:${header.someKey}}</simple> </setHeader>
<setHeader headerName="myHeader">
<simple>${properties:${header.someKey}}</simple>
</setHeader>