303.4. OGNL 표현식 지원
Camel 2.3 사용
INFO:Camel의 OGNL 지원은 메서드를 호출하는 데만 사용됩니다. 필드에는 액세스할 수 없습니다. Camel 2.11.1 부터 Java 배열의 길이 필드에 액세스하기 위한 특수 지원을 추가했습니다.
Simple 및 Bean 언어는 이제처럼 체인에서 빈을 호출하는 Camel OGNL 표기법을 지원합니다. Message IN 본문에 getAddress() 메서드가 있는 POJO가 포함되어 있다고 가정합니다.
그런 다음 Camel OGNL 표기법을 사용하여 주소 오브젝트에 액세스할 수 있습니다.
simple("${body.address}")
simple("${body.address.street}")
simple("${body.address.zip}")Camel은 getter의 단축 이름을 이해하지만 다음과 같은 실제 이름을 호출하거나 실제 이름을 사용할 수 있습니다.
simple("${body.address}")
simple("${body.getAddress.getStreet}")
simple("${body.address.getZip}")
simple("${body.doSomething}")
또한 본문에 주소가 없는 경우 NPE를 피하기 위해 null safe 연산자 (?.?)를 사용할 수도 있습니다.
simple("${body?.address?.street}")
맵 또는 목록 유형에서 인덱스를 작성할 수도 있으므로 다음을 수행할 수 있습니다.
simple("${body[foo].name}")
본문이 Map 기반 것으로 가정하고 foo 를 키로 조회하고 해당 값에서 getName 메서드를 호출합니다.
키에 공백이 있는 경우 따옴표로 키를 묶 어야 합니다 (예: 'foo bar').
simple("${body['foo bar'].name}")
Map 또는 List 개체에 직접 액세스 할 수 있습니다 키 이름 (with 또는 without dots) :
simple("${body[foo]}")
simple("${body[this.is.foo]}")
foo 키가 있는 값이 없다고 가정하면 다음과 같이 null safe 연산자를 사용하여 NPE를 피할 수 있습니다.
simple("${body[foo]?.name}")
예를 들어 수행할 수 있는 주소에서 행을 가져오려면 목록 유형에 액세스할 수도 있습니다.
simple("${body.address.lines[0]}")
simple("${body.address.lines[1]}")
simple("${body.address.lines[2]}")
목록에서 마지막 값을 가져오는 데 사용할 수 있는 특수 last 키워드가 있습니다.
simple("${body.address.lines[last]}")
그리고 두 번째 마지막을 얻으려면 숫자를 뺄 수 있으므로 last-1 을 사용하여 다음을 나타낼 수 있습니다.
simple("${body.address.lines[last-1]}")그리고 세 번째 마지막은 다음과 같습니다.
simple("${body.address.lines[last-2]}")그리고 목록의 크기 메서드를 호출할 수 있습니다.And you can call the size method on the list.
simple("${body.address.lines.size}")Camel 2.11.1 부터 Java 배열의 길이 필드에 대한 지원도 추가되었습니다.
String[] lines = new String[]{"foo", "bar", "cat"};
exchange.getIn().setBody(lines);
simple("There are ${body.length} lines")그리고 예, 다음과 같이 연산자 지원과 결합할 수 있습니다.
simple("${body.address.zip} > 1000")