304.4. OGNL 표현식 지원
Camel 2.3부터 사용 가능
INFO:Camel의 OGNL 지원은 메서드 호출을 위한 것입니다. 필드에 액세스할 수 없습니다. Camel 2.11.1 이후부터는 Java 배열의 길이 필드에 액세스하기 위한 특별한 지원이 추가되었습니다.
Simple 및 Cryo stat 언어는 이제 이와 같은 체인에서 빈 을 호출하기 위한 Camel OGNL 표기법을 지원합니다. Message IN 본문에 getAddress() 메서드가 있는 Cryostat가 포함되어 있다고 가정합니다.
그런 다음 Camel OGNL 표기법을 사용하여 address 오브젝트에 액세스할 수 있습니다.
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 안전 연산자(?.)를 사용할 수도 있습니다.
simple("${body?.address?.street}")
또한 Map 또는 List 유형에서 인덱스를 사용할 수 있으므로 다음을 수행할 수 있습니다.
simple("${body[foo].name}")
본문이 Map 기반이라고 가정하고 foo 를 키로 사용하여 값을 조회하고 해당 값에 getName 메서드를 호출합니다.
키에 공백이 있는 경우 따옴표로 키를 묶어야 합니다 (예: 'foo bar').
simple("${body['foo bar'].name}")
지도 또는 목록 오브젝트는 키 이름( dot 포함 또는 포함)을 사용하여 직접 액세스할 수 있습니다.
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]}")
그리고 마지막 3rd는 물론:
simple("${body.address.lines[last-2]}")
그리고 목록에서 크기 메서드를 호출할 수 있습니다.
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")
그리고 예, 다음과 같이 Operator 지원과 결합할 수 있습니다.
simple("${body.address.zip} > 1000")