64장. CSimple
CSimple 언어는 Simple Language로 컴파일 됩니다.
64.1. CSimple과 Simple의 차이점은 무엇입니까?
간단한 언어는 런타임이 Camel Expressions 또는 Predicates 세트로 구문 분석되는 동적 표현식 언어입니다.
csimple 언어는 일반 Java 소스 코드로 구문 분석되고 다른 모든 소스 코드와 함께 컴파일되거나 camel-csimple-joor
모듈을 통해 부트스트랩 중에 한 번 컴파일됩니다.
간단한 언어는 일반적으로 매우 가볍고 빠르지만 OGNL 경로를 통한 동적 메서드 호출을 사용하는 경우 간단한 언어는 런타임 인트로스펙션 및 리플렉션 호출을 수행합니다. 이는 성능에 대한 오버헤드가 있으며 csimple이 생성된 이유 중 하나입니다.
csimple 언어는 형식이 안전해야 하며 OGNL 경로를 통해 메서드 호출은 구문 분석 중에 유형을 알아야 합니다. 즉, 스크립트에 클래스 유형을 제공해야 하는 csimple languages의 경우 런타임 시 이를 간단하게 인트로스펙션합니다.
즉 간단한 언어는 duck 입력 을 사용하고 있습니다 (duck과 같은 quacks와 같은 경우, 그것은 duck)이고 csimple은 Java 유형 (type safety)을 사용하고 있습니다. 유형 오류가 있는 경우 simple는 런타임 시 이 문제를 보고할 것이며 csimple에는 Java 컴파일 오류가 발생합니다.
64.1.1. 추가 CSimple 함수
csimple 언어에는 Collection
,Map
또는 array 유형으로 작업하는 일반적인 사용 사례를 지원하는 몇 가지 추가 함수가 포함되어 있습니다. 다음 함수 bodyAsIndex,headerAsIndex, exchangePropertyAsIndex 는 입력 시 이러한 사용 사례에 사용됩니다.
함수 | 유형 | 설명 |
---|---|---|
bodyAsIndex(type, index) | 유형 |
기존 |
mandatoryBodyAsIndex(type, index) | 유형 |
기존 |
headerAsIndex(key, type, index) | 유형 |
기존 |
mandatoryHeaderAsIndex(key, type, index) | 유형 |
기존 |
exchangePropertyAsIndex(key, type, index) | 유형 |
기존 |
mandatoryExchangePropertyAsIndex(key, type, index) | 유형 |
기존 |
예를 들어 다음과 같은 간단한 표현식이 제공됩니다.
Hello $\{body[0].name}
이 스크립트에는 유형 정보가 없으며 런타임 시 메시지 본문을 검사하고 컬렉션 기반 컬렉션인 경우 리플렉션을 통해 getName
이라는 메서드를 호출하여 이를 해결할 수 있습니다.
csimple (컴파일)에서는 이 값을 미리 컴파일하려고 하므로 최종 사용자는 bodyAsIndex 함수와 함께 형식 정보를 제공해야 합니다.
Hello $\{bodyAsIndex(com.foo.MyUser, 0).name}