303.4. OGNL 표현식 지원

Camel 2.3 사용

INFO:Camel의 OGNL 지원은 메서드를 호출하는 데만 사용됩니다. 필드에는 액세스할 수 없습니다. Camel 2.11.1 부터 Java 배열의 길이 필드에 액세스하기 위한 특수 지원을 추가했습니다.

SimpleBean 언어는 이제처럼 체인에서 빈을 호출하는 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")