10.6. Transformer

Transformer는 경로 정의에서 선언된 Input Type 및/또는 Output Type 에 따라 메시지의 선언적 변환을 수행합니다. 기본 camel 메시지는 DataType 으로 표시되는 메시지 유형을 보유하는 DataTypeAware 를 구현합니다.

10.6.1. 변환기는 어떻게 작동합니까?

경로 정의는 입력 유형 및/또는 출력 유형을 선언합니다. 입력 유형 및/또는 출력 유형이 런타임 시 메시지 유형 과 다른 경우 camel 내부 프로세서는 Transformer를 찾습니다. Transformer는 현재 메시지 유형을 예상 메시지 유형으로 변환합니다. 메시지가 성공적으로 변환되거나 메시지가 이미 예상된 유형인 경우 메시지 데이터 유형이 업데이트됩니다.

10.6.1.1. 데이터 유형 형식

데이터 유형의 형식은 scheme:name 입니다. 여기서 schemejava,xml 또는 json 과 같은 데이터 모델의 유형입니다. name 은 데이터 형식 이름입니다.

참고

scheme 만 지정하는 경우 해당 스키마와 모든 데이터 형식과 일치합니다.

10.6.1.2. 지원되는 변환

Transformer설명

데이터 형식 변환기

데이터 형식을 사용하여 변환

끝점 변환기

Endpoint를 사용하여 변환

사용자 정의 변환기

사용자 지정 transformer 클래스를 사용하여 변환합니다.

10.6.1.3. 공통 옵션

모든 변환기에는 다음과 같은 일반적인 옵션이 있어 변환자에 의해 지원되는 데이터 유형을 지정합니다.

중요

scheme 또는 fromTypetoType 둘 다 지정해야 합니다.

이름설명

스키마

xml 또는 json 과 같은 데이터 모델의 유형입니다. 예를 들어 xml 가 지정되면 변환기가 모든 java -> xml 및 xml -> java 변환에 적용됩니다.

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>