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 유형 변환기 메커니즘은 컨트롤러/작업자 패턴을 따릅니다. 각각 제한된 수의 유형 변환과 작업자 가 수행하는 유형 변환을 집계하는 단일 컨트롤러 유형 변환기를 수행할 수 있는 작업자 유형 변환기가 많이 있습니다. 컨트롤러 유형 변환기는 작업자 유형 변환기의 프런트 엔드 역할을 합니다. 컨트롤러에서 형식 변환을 수행하도록 요청하면 적절한 작업자를 선택하고 변환 작업을 해당 작업자에 위임합니다.

형식 변환 메커니즘의 사용자에 대해 컨트롤러 유형 변환기는 변환 메커니즘에 액세스하기 위한 진입점을 제공하므로 가장 중요합니다. 시작하는 동안 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 오브젝트에는 컨트롤러 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 이 반환됩니다.