10.6. Transformer
Transformer는 경로 정의에서 선언된 Input Type
및/또는 Output Type
에 따라 메시지의 선언적 변환을 수행합니다. 기본 camel 메시지는 DataType
으로 표시되는 메시지 유형을 보유하는 DataTypeAware
를 구현합니다.
10.6.1. 변환기는 어떻게 작동합니까?
경로 정의는 입력 유형
및/또는 출력 유형을
선언합니다. 입력 유형
및/또는 출력 유형이 런타임 시 메시지 유형
과 다른 경우 camel 내부 프로세서는 Transformer를 찾습니다. Transformer는 현재 메시지 유형을 예상 메시지 유형으로 변환합니다. 메시지가 성공적으로 변환되거나 메시지가 이미 예상된 유형인 경우 메시지 데이터 유형이 업데이트됩니다.
10.6.1.1. 데이터 유형 형식
데이터 유형의 형식은 scheme:name
입니다. 여기서 scheme 는 java
,xml
또는 json
과 같은 데이터 모델의 유형입니다. name 은 데이터 형식 이름입니다.
scheme 만 지정하는 경우 해당 스키마와 모든 데이터 형식과 일치합니다.
10.6.1.2. 지원되는 변환
Transformer | 설명 |
---|---|
데이터 형식 변환기 | 데이터 형식을 사용하여 변환 |
끝점 변환기 | Endpoint를 사용하여 변환 |
사용자 정의 변환기 | 사용자 지정 transformer 클래스를 사용하여 변환합니다. |
10.6.1.3. 공통 옵션
모든 변환기에는 다음과 같은 일반적인 옵션이 있어 변환자에 의해 지원되는 데이터 유형을 지정합니다.
scheme
또는 fromType
및 toType
둘 다 지정해야 합니다.
이름 | 설명 |
---|---|
스키마 |
|
fromType | 변환하기 위한 데이터 유형입니다. |
toType | 변환할 데이터 유형입니다. |
10.6.1.4. DataFormat Transformer 옵션
이름 | 설명 |
---|---|
type | 데이터 형식 유형 |
ref | 데이터 형식 ID 참조 |
bindy
DataFormat 유형을 지정하는 예입니다.
Java DSL:
BindyDataFormat bindy = new BindyDataFormat(); bindy.setType(BindyType.Csv); bindy.setClassType(com.example.Order.class); transformer() .fromType(com.example.Order.class) .toType("csv:CSVOrder") .withDataFormat(bindy);
XML DSL:
<dataFormatTransformer fromType="java:com.example.Order" toType="csv:CSVOrder"> <bindy id="csvdf" type="Csv" classType="com.example.Order"/> </dataFormatTransformer>
10.6.2. 끝점 변환 옵션
이름 | 설명 |
---|---|
ref | 끝점 ID 참조 |
URI | 엔드포인트 URI |
Java DSL에서 끝점 URI를 지정하는 예는 다음과 같습니다.
transformer() .fromType("xml") .toType("json") .withUri("dozer:myDozer?mappingFile=myMapping.xml...");
XML DSL에서 끝점 ref를 지정하는 예:
<transformers> <endpointTransformer ref="myDozerEndpoint" fromType="xml" toType="json"/> </transformers>
10.6.3. 사용자 정의 변환 옵션
Transformer는 org.apache.camel.spi.Transformer
의 하위 클래스여야 합니다.
이름 | 설명 |
---|---|
ref | 사용자 정의 Transformer metrics ID 참조 |
className | 사용자 정의 Transformer 클래스의 정규화된 클래스 이름입니다. |
사용자 정의 Transformer 클래스를 지정하는 예입니다.
Java DSL:
transformer() .fromType("xml") .toType("json") .withJava(com.example.MyCustomTransformer.class);
XML DSL:
<transformers> <customTransformer className="com.example.MyCustomTransformer" fromType="xml" toType="json"/> </transformers>
10.6.4. Transformer 예
이 예제는 두 부분으로, 첫 번째 부분은 메시지를 변환하는 Endpoint Transformer를 선언합니다. 두 번째 부분은 변환기가 경로에 적용되는 방법을 보여줍니다.
10.6.4.1. 부분 I
xslt 구성 요소를 사용하여 xml:ABCOrder
에서 xml:XYZOrder
로 변환하는 Endpoint Transformer를 선언합니다.
Java DSL:
transformer() .fromType("xml:ABCOrder") .toType("xml:XYZOrder") .withUri("xslt:transform.xsl");
XML DSL:
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <transformers> <endpointTransformer uri="xslt:transform.xsl" fromType="xml:ABCOrder" toType="xml:XYZOrder"/> </transformers> .... </camelContext>
10.6.4.2. Part II
직접:abc 끝점이
로 메시지를 보낼 때 위의 변환기가 다음 경로 정의에 적용됩니다.
직접:
xyz
Java DSL:
from("direct:abc") .inputType("xml:ABCOrder") .to("direct:xyz"); from("direct:xyz") .inputType("xml:XYZOrder") .to("somewhere:else");
XML DSL:
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:abc"/> <inputType urn="xml:ABCOrder"/> <to uri="direct:xyz"/> </route> <route> <from uri="direct:xyz"/> <inputType urn="xml:XYZOrder"/> <to uri="somewhere:else"/> </route> </camelContext>