36장. 유형 전환

초록

Apache Camel에는 메시지 본문 및 메시지 헤더를 다른 유형으로 변환하는 데 사용되는 기본 제공 유형 변환 메커니즘이 있습니다. 이 장에서는 고유한 사용자 지정 변환기 방법을 추가하여 형식 변환 메커니즘을 확장하는 방법을 설명합니다.

36.1. 유형: 아키텍처

36.1.1. 개요

이 섹션에서는 사용자 지정 형식 변환기를 작성하려는 경우 이해해야 하는 형식 변환기 메커니즘의 전반적인 아키텍처에 대해 설명합니다.This section describes the overall architecture of the type converter mechanism, which you must understand, if you want to write custom type converters. 기본 제공 유형 변환기만 사용해야 하는 경우 34장. 메시지 형식 이해 을 참조하십시오.

36.1.2. 유형 변환기 인터페이스

예 36.1. “TypeConverter 인터페이스” 모든 유형 변환기가 구현해야하는 org.apache.camel.TypeConverter 인터페이스의 정의를 보여줍니다.

예 36.1. TypeConverter 인터페이스

package org.apache.camel;

public interface TypeConverter {
    <T> T convertTo(Class<T> type, Object value);
}

36.1.3. 마스터 유형 변환기

Apache Camel 유형 변환기 메커니즘은 마스터/슬레이브 패턴을 따릅니다. 여러 슬레이브 유형 변환기가 있습니다. 각각 제한된 수의 유형 변환과 슬레이브에서 수행하는 유형 변환을 집계하는 단일 마스터 유형 변환기를 수행할 수 있습니다. 마스터 유형 변환기는 슬레이브 유형 변환기의 프런트 엔드 역할을 합니다. 마스터에서 형식 변환을 수행하도록 요청하면 적절한 슬레이브를 선택하고 변환 작업을 해당 슬레이브에 위임합니다.

형식 변환 메커니즘의 사용자의 경우 변환 메커니즘에 액세스하기 위한 진입점을 제공하므로 마스터 형식 변환기가 가장 중요합니다.For users of the type conversion mechanism, the master type converter is the most important because it provides the entry point for accessing the conversion mechanism. 시작하는 동안 Apache Camel은 마스터 유형 변환기 인스턴스를 CamelContext 오브젝트에 자동으로 연결합니다. 마스터 유형 변환기에 대한 참조를 얻으려면 CamelContext.getTypeConverter() 메서드를 호출합니다. 예를 들어 교환 오브젝트인 exchange 가 있는 경우 예 36.2. “마스터 유형 얻기” 에 표시된 대로 마스터 유형 변환기에 대한 참조를 얻을 수 있습니다.

예 36.2. 마스터 유형 얻기

org.apache.camel.TypeConverter tc = exchange.getContext().getTypeConverter();

36.1.4. 유형 변환기 로더

마스터 유형 변환기는 유형 변환기 로더 를 사용하여 슬레이브 유형 변환기의 레지스트리를 채웁니다. 형식 변환기 로더는 TypeConverterLoader 인터페이스를 구현하는 모든 클래스입니다. Apache Camel은 현재 하나의 종류의 컨버터 로더로 주석 유형 변환기 로더 ( AnnotationTypeConverterLoader type)를 사용합니다.

36.1.5. 유형 변환 프로세스

그림 36.1. “유형 변환 프로세스” 지정된 데이터 값, 값 , 지정된 형식으로 변환에 관련된 단계를 표시 하는 형식 변환 프로세스에 대 한 개요를 제공 합니다.Give an overview of the type conversion process, showing the steps involved in converting a given data value, value , to a specified type, toType.

그림 36.1. 유형 변환 프로세스

유형 변환 프로세스

유형 변환 메커니즘은 다음과 같이 진행됩니다.

  1. CamelContext 오브젝트에는 master TypeConverter 인스턴스에 대한 참조가 있습니다. 변환 프로세스의 첫 번째 단계는 CamelContext.getTypeConverter() 를 호출하여 마스터 유형 변환기를 검색하는 것입니다.
  2. 형식 변환은 마스터 유형 변환기에서 convertTo() 메서드를 호출하여 시작됩니다. 이 메서드는 형식 변환기에 데이터 개체 값에서 원래 형식에서 toType 인수에 의해 지정된 형식으로 변환하도록 지시합니다.This method instructs the type converter to convert the data object, value, from its original type to the type specified by the toType argument.
  3. 마스터 유형 변환기는 많은 다른 슬레이브 유형 변환기의 프런트 엔드이기 때문에 유형 매핑의 레지스트리를 확인하여 적절한 슬레이브 유형 변환기를 조회합니다. 유형 변환기의 레지스트리는 유형 매핑 쌍 (toType,fromType) 에 의해 키가 지정됩니다. 적절한 유형 변환기가 레지스트리에 있는 경우 마스터 유형 변환기는 슬레이브의 convertTo() 메서드를 호출하고 결과를 반환합니다.
  4. 레지스트리에서 적합한 유형 변환기를 찾을 수 없는 경우 마스터 유형 변환기는 형식 변환기 로더를 사용하여 새 형식 변환기를 로드합니다.
  5. 유형 변환기 로더는 classpath에서 사용 가능한 JAR 라이브러리를 검색하여 적합한 유형 변환기를 찾습니다. 현재 사용되는 로더 전략은 org.apache.camel.Converter 주석에서 주석이 달린 클래스를 로드하려고 하는 주석 유형 변환기 로더에 의해 구현됩니다. “TypeConverter 파일 만들기”을 참조하십시오.
  6. 유형 변환기 로더가 성공하면 새 슬레이브 유형 변환기가 로드되고 유형 변환기 레지스트리에 입력됩니다. 그런 다음 이 형식 변환기를 사용하여 value 인수를 toType 형식으로 변환합니다.
  7. 데이터가 성공적으로 변환되면 변환된 데이터 값이 반환됩니다. 변환이 성공하지 않으면 null 이 반환됩니다.