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}"));
validator()
.type("csv:CSVOrder")
.withExpression(bodyAs(String.class).contains("{name:XOrder}"));
XML DSL:
<predicateValidator Type="csv:CSVOrder">
<simple>${body} contains 'name:XOrder'</simple>
</predicateValidator>
<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");
validator()
.type("xml")
.withUri("validator:xsd/schema.xsd");
XML DSL에서 끝점 ref를 지정하는 예제:
<validators> <endpointValidator uri="validator:xsd/schema.xsd" type="xml"/> </validators>
<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);
validator()
.type("json")
.withJava(com.example.MyCustomValidator.class);
XML DSL:
<validators> <customValidator className="com.example.MyCustomValidator" type="json"/> </validators>
<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");
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>
<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}");
from("direct:abc")
.inputTypeWithValidate("xml:ABCOrder")
.log("${body}");
XML DSL: