303.5. Operator 지원
구문 분석기는 단일 연산자만 지원하도록 제한됩니다.
이를 활성화하려면 왼쪽 값을 $\{ }로 묶어야 합니다. 구문은 다음과 같습니다.
${leftValue} OP rightValue
rightValue 는 ', null, 상수 값 또는 $\{ }로 묶은 다른 표현식으로 묶은 문자열 리터럴일 수 있습니다.
Operator 옆에 공백이 있어야 합니다.
Camel은 자동으로 rightValue 유형을 leftValue 유형으로 변환합니다. 예를 들어, 숫자 값에 대한 > 비교를 사용할 수 있도록 문자열을 숫자로 변환할 수 있습니다.
다음 Operator가 지원됩니다.
| Operator | 설명 |
|---|---|
| == | Equals |
| =~ | Camel 2.16: 무시 대소문자 (문자열 값을 비교할 때 대/소문자를 무시함) |
| > | 보다 큼 |
| >= | 크거나 같음 |
| < | 보다 작음 |
| ⇐ | 작거나 같음 |
| != | 같지 않음 |
| contains | 문자열 기반 값에 포함될 경우 테스트의 경우 |
| 포함되지 않음 | 문자열 기반 값에 포함되지 않은 경우 테스트의 경우 |
| ~~ | 문자열 기반 값에서 대/소문자 구분을 무시하여 테스트의 경우 |
| regex | 문자열 값으로 정의된 지정된 정규식 패턴과 일치하는 경우 |
| not regex | 문자열 값으로 정의된 지정된 정규식 패턴과 일치하지 않는 경우 |
| in | 값 집합에서 일치시키려면 각 요소를 쉼표로 구분해야 합니다. 빈 값을 포함하려면 빈 값이 있는 네 값 세트이고 세 개의 메달이 있는 이중 쉼표(예: ',bronze,silver,gold')를 사용하여 정의해야 합니다. |
| 에 없음 | 값 집합에 없는 경우 각 요소를 쉼표로 구분해야 합니다. 빈 값을 포함하려면 빈 값이 있는 네 값 세트이고 세 개의 메달이 있는 이중 쉼표(예: ',bronze,silver,gold')를 사용하여 정의해야 합니다. |
| is | 왼쪽 측면 유형이 값의 인스턴스인 경우 일치시킵니다. |
| Not | 왼쪽 측면 유형이 값의 인스턴스가 아닌 경우 일치시킵니다. |
| 범위 |
왼쪽이 숫자 범위 내에 있는 경우 일치시키려면 |
| 범위가 아님 |
왼쪽이 숫자(... |
| 다음으로 시작 | Camel 2.17.1, 2.18: 왼쪽 핸드 문자열이 오른쪽 문자열로 시작하는 경우 테스트합니다. |
| 종료일 | Camel 2.17.1, 2.18: 왼쪽 핸드 문자열이 오른쪽 문자열로 종료되는지 테스트하는 경우 |
다음 단항 연산자를 사용할 수 있습니다.
| Operator | 설명 |
|---|---|
| ++ | Camel 2.9: 1씩 늘립니다. 왼쪽은 함수여야 하며, 그렇지 않으면 리터럴로 구문 분석됩니다. |
| — | Camel 2.9: 숫자를 1로 감소합니다. 왼쪽은 함수여야 하며, 그렇지 않으면 리터럴로 구문 분석됩니다. |
| \ | Camel 2.9.3 ~ 2.10.x 는 $ 기호를 나타내기 위해 값(예: \$)을 이스케이프합니다. 특수: 새 줄에는 \n, tab은 \t, 캐리지 반환에는 \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: 논리 또는 연산자를 사용하여 두 개의 표현식을 그룹화합니다. |
또는 운영자 Camel 2.4 이상에서는 및 또는 이전 버전의 및 또는 간단한 언어 표현식에서 한 번만 사용할 수 있습니다. Camel 2.5 이상에서는 이러한 Operator를 여러 번 사용할 수 있습니다.
AND 구문은 다음과 같습니다.
${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")
303.5.1. 다른 유형과 비교 링크 복사링크가 클립보드에 복사되었습니다!
String 및 int와 같은 다른 유형과 비교할 때 약간의 주의가 필요합니다. Camel은 왼쪽의 유형을 첫 번째 우선 순위로 사용합니다. 두 값을 해당 유형에 따라 비교할 수 없는 경우 오른쪽 유형으로 대체됩니다.
즉, 특정 유형을 적용하기 위해 값을 사용할 수 있습니다. 위의 bar 값이 String이라고 가정합니다. 그런 다음 다음 식을 풀 수 있습니다.
simple("100 < ${in.header.bar}")
그런 다음 int 유형이 첫 번째 우선 순위로 사용되는지 확인하는 것은 무엇입니까.
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'")
그리고 유형이 특정 인스턴스인지 테스트할 수 있습니다(예: 인스턴스의 경우 String).
simple("${in.header.type} is 'java.lang.String'")
모든 java.lang 유형에 대한 단축을 추가하여 다음과 같이 작성할 수 있습니다.
simple("${in.header.type} is 'String'")
범위도 지원됩니다. 범위 간격에는 숫자와 종료 및 종료가 모두 포함됩니다. 예를 들어 값이 100에서 199 사이인지 테스트하려면 다음을 수행합니다.
simple("${in.header.number} range 100..199")
공백 없이 범위에서 .. 를 사용합니다. Groovy와 동일한 구문을 기반으로 합니다.
Camel 2.9 이후의 범위 값은 작은 따옴표로 묶어야 합니다.
simple("${in.header.number} range '100..199'")
303.5.2. Spring XML 사용 링크 복사링크가 클립보드에 복사되었습니다!
Spring XML에는 모든 다양한 빌더 방법이 있는 Java DSL로 모든 기능이 없으므로 간단한 연산자를 사용하여 테스트에 다른 언어를 사용해야 합니다. 이제 간단한 언어로 이 작업을 수행할 수 있습니다. 아래 샘플에서 헤더가 위젯 순서인지 테스트하려고 합니다.
<from uri="seda:orders">
<filter>
<simple>${in.header.type} == 'widget'</simple>
<to uri="bean:orderService?method=handleWidget"/>
</filter>
</from>