10.7. 검증기
유효성 검사기에서는 예상되는 메시지 유형을 선언하는 경로 정의에서 선언된 Input Type
및/또는 출력
유형에 따라 메시지의 선언적 유효성 검사를 수행합니다.
검증은 형식 선언의 validate
속성이 true인 경우에만 수행됩니다.
Input Type
및/또는 Output Type
선언에서 validate
속성이 true이면 내부 프로세서에서 해당 Validator를 찾습니다.
10.7.1. 데이터 유형 형식
데이터 유형의 형식은 scheme: name
입니다. 여기서 scheme 는 java
,xml
또는 json
과 같은 데이터 모델의 유형입니다.
10.7.2. 지원되는 유효성 검사기
검증기 | 설명 |
---|---|
서술자 유효성 검사기 | Expression 또는 Predicate를 사용하여 검증 |
엔드포인트 유효성 검사기 | 유효성 검사 구성 요소 또는 Cryostat 유효성 검사 구성 요소와 같은 유효성 검사 구성 요소와 함께 사용할 끝점으로 전달하여 검증합니다. |
사용자 정의 유효성 검사기 |
사용자 정의 검증기 클래스를 사용하여 검증합니다. 검증자는 |
10.7.3. 공통 옵션
모든 검증기에는 유효성을 검사할 Data 유형을 지정하는 type 옵션이 포함되어야 합니다.
10.7.4. 서술자 유효성 검사 옵션
이름 | 설명 |
---|---|
expression | 유효성 검사에 사용할 표현식 또는 서술자입니다. |
검증 서술자를 지정하는 예제:
Java DSL:
validator() .type("csv:CSVOrder") .withExpression(bodyAs(String.class).contains("{name:XOrder}"));
XML DSL:
<predicateValidator Type="csv:CSVOrder"> <simple>${body} contains 'name:XOrder'</simple> </predicateValidator>
10.7.5. 엔드포인트 유효성 검사 옵션
이름 | 설명 |
---|---|
ref | 엔드 포인트 ID에 대한 참조입니다. |
URI | 엔드포인트 URI. |
Java DSL에서 끝점 URI를 지정하는 예제:
validator() .type("xml") .withUri("validator:xsd/schema.xsd");
XML DSL에서 끝점 ref를 지정하는 예제:
<validators> <endpointValidator uri="validator:xsd/schema.xsd" type="xml"/> </validators>
Endpoint Validator는 메시지를 지정된 엔드포인트로 전달합니다. 위의 예에서 camel은 유효성 검사 구성 요소인 끝점에 메시지를 전달합니다
. Cryostat 유효성 검사 구성 요소와 같은 다른 검증 구성 요소를 사용할 수도 있습니다.
10.7.6. 사용자 정의 검증 옵션
검증자는 org.apache.camel.spi.Validator
의 하위 클래스여야 합니다.
이름 | 설명 |
---|---|
ref | 사용자 정의 Validator pin ID에 대한 참조입니다. |
className | 사용자 정의 Validator 클래스의 정규화된 클래스 이름입니다. |
사용자 정의 Validator 클래스를 지정하는 예입니다.
Java DSL:
validator() .type("json") .withJava(com.example.MyCustomValidator.class);
XML DSL:
<validators> <customValidator className="com.example.MyCustomValidator" type="json"/> </validators>
10.7.7. 검증기 예
이 예제는 두 부분으로, 첫 번째 부분은 메시지의 유효성을 검사하는 Endpoint Validator를 선언합니다. 두 번째 부분은 검증기가 경로에 적용되는 방법을 보여줍니다.
10.7.7.1. 부분 I
유효성 검사기 구성 요소를 사용하여 xml:ABCOrder
에서 유효성을 검사하는 Endpoint Validator를 선언합니다.
Java DSL:
validator() .type("xml:ABCOrder") .withUri("validator:xsd/schema.xsd");
XML DSL:
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <validators> <endpointValidator uri="validator:xsd/schema.xsd" type="xml:ABCOrder"/> </validators> </camelContext>
10.7.7.2. Part II
위의 검증자는 direct:abc
엔드포인트가 메시지를 수신할 때 다음 경로 정의에 적용됩니다.
inputTypeWithValidate
는 Java DSL에서 inputType
대신 사용되며 inputType 선언의 validate
속성은 XML DSL에서 true
로 설정됩니다.
Java DSL:
from("direct:abc") .inputTypeWithValidate("xml:ABCOrder") .log("${body}");
XML DSL:
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:abc"/> <inputType urn="xml:ABCOrder" validate="true"/> <log message="${body}"/> </route> </camelContext>