304.5. Operator 지원

파서는 단일 연산자만 지원하도록 제한됩니다.

왼쪽 값을 사용하려면 $\{ }로 묶어야 합니다. 구문은 다음과 같습니다.

${leftValue} OP rightValue

rightValue', null, 상수 값 또는 $\{ }로 묶은 다른 표현식으로 묶은 String 리터럴일 수 있습니다.

중요

Operator 주변에는 공백이 있어야 합니다.

Camel은 rightValue 유형을 자동으로 입력하므로 숫자 값에 대해 > 비교를 사용할 수 있도록 문자열을 숫자로 변환할 수 있습니다.

지원되는 Operator는 다음과 같습니다.

Operator설명

==

equals

=~

Camel 2.16: equals ignore case(문자열 값을 비교할 때 대소문자 무시)

>

보다 큼

>=

크거나 같음

<

보다 작음

작거나 같음

!=

같지 않음

contains

문자열 기반 값에 포함된 경우 테스트의 경우

포함되어 있지 않음

문자열 기반 값에 포함되지 않은 경우 테스트의 경우

~~

문자열 기반 값의 대/소문자 민감도를 무시하여 포함된 테스트의 경우

regex

문자열 값으로 정의된 지정된 정규식 패턴에 대한 일치의 경우

정규 표현식이 아님

문자열 값으로 정의된 지정된 정규식 패턴과 일치하지 않는 경우For not matching against a given regular expression pattern defined as a String value

in

값 집합에서 일치하는 경우 각 요소는 쉼표로 구분해야 합니다.For matching if in a set of values, each element must be separated by comma. 빈 값을 포함하려는 경우 빈 값이 있는 4개의 값 세트이고 세 개의 값 집합인 ',bronze,silver,gold'를 사용하여 정의해야 합니다.

제공되지 않음

값 집합에 없는 경우 일치하는 요소는 쉼표로 구분해야 합니다.For matching if not in a set of values, each element must be separated by comma. 빈 값을 포함하려는 경우 빈 값이 있는 4개의 값 세트이고 세 개의 값 집합인 ',bronze,silver,gold'를 사용하여 정의해야 합니다.

is

왼쪽 쪽 유형이 value인 경우 일치할 수 있습니다.For matching if the left hand side type is an instance of the value.

없습니다.

왼쪽 쪽 유형이 값의 인스턴스가 아닌 경우 일치할 수 있습니다.For matching if the left hand side type is not an instance of the value.

범위

왼쪽이 숫자로 정의된 값 범위 내에 있는 경우 일치하는 경우: from.to. Camel 2.9 이후부터는 범위 값을 작은따옴표로 묶어야 합니다.

범위가 아님

왼쪽이 숫자로 정의된 값 범위 내에 있지 않은 경우 일치하는 경우 from..to. Camel 2.9 이후부터는 범위 값을 작은따옴표로 묶어야 합니다.

시작 날짜

Camel 2.17.1, 2.18: 왼쪽 측면 문자열이 올바른 핸드 문자열로 시작되는 경우 테스트의 경우.

종료일:

Camel 2.17.1, 2.18: 왼쪽 측면 문자열이 올바른 핸드 문자열로 끝나는 경우 테스트의 경우.

다음과 같은 단항 연산자를 사용할 수 있습니다.

Operator설명

++

Camel 2.9: 숫자를 하나씩 늘리려면 다음을 수행하십시오. 왼쪽은 함수여야 하며 그렇지 않으면 리터럴로 구문 분석해야 합니다.

 — 

Camel 2.9: 숫자를 하나씩 줄입니다. 왼쪽은 함수여야 하며 그렇지 않으면 리터럴로 구문 분석해야 합니다.

\

Camel 2.9.3 ~ 2.10.x - 값을 이스케이프하려면 (예: \$) $ 기호를 나타냅니다. special: \n을 새 줄에 사용하고, 탭(탭)에 \r을 사용하고, 캐리지 리턴에는 \r를 사용합니다. 참고 : 파일 언어 를 사용하여 에스컬레이션은 지원되지 않습니다. 참고 : Camel 2.11부터 이스케이프 문자는 더 이상 지원되지 않지만 다음 세 가지 특수 이스케이프로 대체됩니다.

\n

Camel 2.11: 줄 바꿈 문자를 사용합니다.

\t

Camel 2.11: 탭 문자를 사용합니다.

\r

Camel 2.11: 캐리지 리턴 문자를 사용합니다.

\}

Camel 2.18: } 문자를 텍스트로 사용하려면

다음과 같은 논리 연산자를 사용하여 식을 그룹화할 수 있습니다.And the following logical operators can be used to group expressions:

Operator설명

대신 사용되지 않는 사용 && 논리 및 연산자는 두 식을 그룹화하는 데 사용됩니다.

또는

더 이상 사용되지 않는 사용 || 논리 또는 연산자는 두 식을 그룹화하는 데 사용됩니다.

&&

Camel 2.9: 논리 및 연산자는 두 식을 그룹화하는 데 사용됩니다.

||

Camel 2.9: 논리 또는 연산자는 두 식을 그룹화하는 데 사용됩니다.

중요

또는 Operator In Camel 2.4 사용 또는 이전 버전 은 간단한 언어 표현식에서 한 번 만 사용할 수 있습니다. Camel 2.5 이상에서는 이러한 연산자를 여러 번 사용할 수 있습니다.

및 의 구문은 다음과 같습니다.

${leftValue} OP rightValue and ${leftValue} OP rightValue

OR의 구문은 다음과 같습니다.

${leftValue} OP rightValue or ${leftValue} OP rightValue

일부 예:

// exact equals match
simple("${in.header.foo} == 'foo'")

// ignore case when comparing, so if the header has value FOO this will match
simple("${in.header.foo} =~ 'foo'")

// here Camel will type convert '100' into the type of in.header.bar and if it is an Integer '100' will also be converter to an Integer
simple("${in.header.bar} == '100'")

simple("${in.header.bar} == 100")

// 100 will be converter to the type of in.header.bar so we can do > comparison
simple("${in.header.bar} > 100")

304.5.1. 다른 유형과 비교

String 및 int와 같은 다양한 유형과 비교할 때 약간의 주의가 필요합니다. Camel은 왼쪽의 유형을 1차 우선 순위로 사용합니다. 두 값을 해당 형식에 따라 두 값을 비교할 수 없는 경우 오른쪽 쪽 형식으로 대체할 수 있습니다.And fallback to the right hand side type if both values could not be compared based on that type.
즉, 값을 대체하여 특정 형식을 적용할 수 있습니다. 위의 bar 값이 문자열이라고 가정합니다. 그러면 방정식을 퍼뜨릴 수 있습니다:

simple("100 < ${in.header.bar}")

그러면 int 유형이 1st 우선 순위로 사용됩니다.

Camel 팀이 문자열 기반보다 숫자 유형을 선호하도록 바이너리 비교 작업을 개선하면 향후 변경될 수 있습니다. 숫자와 비교할 때 문제가 발생하는 String 유형이 가장 많습니다.

// testing for null
simple("${in.header.baz} == null")

// testing for not null
simple("${in.header.baz} != null")

그리고 오른쪽 값이 또 다른 표현식인 더 많은 고급 예

simple("${in.header.date} == ${date:now:yyyyMMdd}")

simple("${in.header.type} == ${bean:orderService?method=getOrderType}")

또한 포함된 예제로 제목에 Camel이라는 단어가 포함되어 있는지 테스트합니다.

simple("${in.header.title} contains 'Camel'")

또한 regex를 사용한 예제는 숫자 헤더가 4자리 값인지 테스트합니다.

simple("${in.header.number} regex '\\d{4}'")

마지막으로 헤더가 목록의 값 중 하나와 같은 경우입니다. 각 요소는 쉼표로 구분되어야 하며, 공백은 없어야 합니다.
Camel은 각 요소를 왼쪽 변의 유형으로 변환할 것이기 때문에 숫자 등에 대해서도 작동합니다.

simple("${in.header.type} in 'gold,silver'")

그리고 마지막 3을 위해, 우리는 또한 다음을 사용하지 않는 negate 테스트를 지원합니다.

simple("${in.header.type} not in 'gold,silver'")

그리고 유형이 특정 인스턴스인지 테스트할 수 있습니다(예: 문자열).

simple("${in.header.type} is 'java.lang.String'")

모든 Java .lang 유형에 대한 단점을 추가하여 다음과 같이 작성할 수 있습니다.

simple("${in.header.type} is 'String'")

또한 범위가 지원됩니다. 범위 간격에는 번호가 필요하며, 둘 다 및 끝에서 포함됩니다. 예를 들어 값이 100~199 사이의지 여부를 테스트할 수 있습니다.For instance to test whether a value is between 100 and 199:

simple("${in.header.number} range 100..199")

공백이 없는 범위에서 .. 를 사용합니다. 이는 Groovy와 동일한 구문을 기반으로 합니다.

Camel 2.9 부터 범위 값이 작은따옴표여야 합니다.

simple("${in.header.number} range '100..199'")