31장. SpEL

31.1. 개요

Spring Expression Language (SpEL) 는 Spring 3과 함께 제공되는 오브젝트 그래프 탐색 언어이며, 경로에 서술자 및 표현식을 구성하는 데 사용할 수 있습니다. SpEL의 주목할 만한 기능은 레지스트리에서 빈에 쉽게 액세스할 수 있는 기능입니다.

31.2. 구문

SpEL 표현식은 일반 텍스트 문자열에 포함될 수 있도록 자리 표시자 구문 #{SpelExpression} 을 사용해야 합니다(즉, SpEL에는 표현식 템플릿 표시가 활성화되어 있습니다).

SPEL은 @ CryostatID 구문을 사용하여 레지스트리에서 빈 을 검색할 수도 있습니다(일반적으로 Spring 레지스트리). 예를 들어 ID, headerUtils, 메서드, count() (현재 메시지의 헤더 수를 계산하는) count()가 있는 8080이 있는 경우 다음과 같이 SpEL 서술자에서 headerUtils Cryostat를 사용할 수 있습니다.

#{@headerUtils.count > 4}

31.3. SpEL 패키지 추가

경로에서 SpEL을 사용하려면 예 31.1. “camel-spring 종속성 추가” 과 같이 카멜 자에 대한 종속성 을 프로젝트에 추가해야 합니다.

예 31.1. camel-spring 종속성 추가

<!-- Maven POM File -->
<properties>
  <camel-version>2.23.2.fuse-790054-redhat-00001</camel-version>
  ...
</properties>

<dependencies>
  ...
  <dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-spring</artifactId>
    <version>${camel-version}</version>
  </dependency>
  ...
</dependencies>

31.4. 변수

표 31.1. “SPEL 변수” SpEL을 사용할 때 액세스할 수 있는 변수를 나열합니다.

표 31.1. SPEL 변수

Variable유형설명

교환

현재 교환은 루트 오브젝트입니다.

exchange

교환

현재 교환입니다.

exchangeId

문자열

현재 교환의 ID입니다.

예외

Throwable

교환 예외(있는 경우)입니다.

fault

메시지

오류 메시지(있는 경우).

request

메시지

교환의 메시지입니다.

응답

메시지

교환의 아웃 메시지(있는 경우)입니다.

속성

map

교환 속성입니다.

속성(이름)

개체

이름으로 키가 지정된 교환 속성입니다.

속성(이름,유형)

유형

이름으로 키 지정된 교환 속성의 유형으로 변환됩니다. Type.

31.5. XML 예

예를 들어, 헤더의 값이 USA 메시지만 선택하려면 다음 SpEL 표현식을 사용할 수 있습니다.

<route>
  <from uri="SourceURL"/>
  <filter>
    <spel>#{request.headers['Country'] == 'USA'}}</spel>
    <to uri="TargetURL"/>
  </filter>
</route>

31.6. Java 예

다음과 같이 Java DSL에서 동일한 경로를 정의할 수 있습니다.

from("SourceURL")
  .filter().spel("#{request.headers['Country'] == 'USA'}")
  .to("TargetURL");

다음 예제에서는 일반 텍스트 문자열에 SpEL 표현식을 포함하는 방법을 보여줍니다.

from("SourceURL")
  .setBody(spel("Hello #{request.body}! What a beautiful #{request.headers['dayOrNight']}"))
  .to("TargetURL");