67장. CSimple
C Simple 언어는 간단한 언어로 컴파일됩니다.
67.1. CSimple과 Simple의 차이가 있습니다. 링크 복사링크가 클립보드에 복사되었습니다!
간단한 언어는 Camel Expressions 또는 Predicates 세트로 런타임 구문 분석되는 동적 표현식 언어입니다.
csimple 언어는 일반 Java 소스 코드로 구문 분석되고 다른 모든 소스 코드와 함께 컴파일되거나 camel-csimple-joor
모듈을 통해 부트스트랩 중에 한 번 컴파일됩니다.
간단한 언어는 일반적으로 매우 가볍고 빠르지만 OGNL 경로를 통해 동적 메서드 호출을 사용하는 일부 사용 사례의 경우 간단한 언어에서는 런타임 인트로스펙션 및 리버전션 호출을 수행합니다. 이는 성능에 대한 오버헤드가 있으며 csimple가 생성된 이유 중 하나였습니다.
csimple 언어는 OGNL 경로를 통해 typesafe이고 메서드 호출을 위해서는 구문 분석 중에 유형을 알아야 합니다. 즉, csimple 언어 표현식에 대해서는 스크립트에 클래스 유형을 제공해야 하는 반면 런타임 시 이를 간단하게 검사해야 합니다.
즉, 간단한 언어는 duck typing 을 사용하고 있습니다 (duck, 및 quacks 처럼 보이는 경우 duck, then it is a duck) 및 csimple는 Java 유형 (typesafety)을 사용합니다. 유형 오류가 있으면 런타임에 이를 보고하며 csimple를 사용하면 Java 컴파일 오류가 발생합니다.
67.1.1. 추가 CSimple 함수 링크 복사링크가 클립보드에 복사되었습니다!
csimple 언어에는 컬렉션
,맵
또는 배열 유형에서 작업하는 일반적인 사용 사례를 지원하는 몇 가지 추가 기능이 포함되어 있습니다. 다음 함수 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}
Hello $\{body[0].name}
이 스크립트는 유형 정보가 없으며 간단한 언어는 메시지 본문을 인트로스펙션하여 런타임 시 이를 해결한 다음, 컬렉션을 기반으로 첫 번째 요소를 조회한 다음 리플렉션을 통해 getName
메서드를 호출합니다.
csimple(ECDHE)에서 이 작업을 미리 컴파일해야 하므로 최종 사용자가 bodyAsIndex 함수와 함께 형식 정보를 제공해야 합니다.
Hello $\{bodyAsIndex(com.foo.MyUser, 0).name}
Hello $\{bodyAsIndex(com.foo.MyUser, 0).name}