Categories: Camel프레임워크

[Camel in Action] 4-3. Camel Bean 파라미터 바인딩과 어노테이션

파라미터 바인딩이란?

Camel이 Bean 메서드를 호출할 때, Exchange에서 필요한 데이터를 꺼내 메서드 파라미터에 자동으로 바인딩합니다. 이를 파라미터 바인딩(Parameter Binding)이라 합니다.

기본 타입 바인딩

// Camel이 자동으로 처리하는 기본 타입들
public class OrderProcessor {
    // Exchange 전체
    public void process(Exchange exchange) { ... }

    // Message 객체
    public void process(Message message) { ... }

    // 본문 직접 (타입 변환 포함)
    public void process(Order order) { ... }
    public void process(String text) { ... }

    // 여러 파라미터 - Camel이 자동 매핑
    public void process(Order order, Exchange exchange) { ... }
}

Camel 어노테이션으로 정밀 바인딩

import org.apache.camel.Body;
import org.apache.camel.Header;
import org.apache.camel.Headers;
import org.apache.camel.ExchangeProperty;

@Component
public class AnnotatedOrderService {

    // @Body: 메시지 본문 바인딩
    public Order processOrder(@Body Order order) {
        return doProcess(order);
    }

    // @Header: 특정 헤더 바인딩
    public String generateConfirmation(
            @Body Order order,
            @Header("customerId") String customerId,
            @Header(value = "region", defaultValue = "DOMESTIC") String region) {
        return customerId + "-" + order.getId() + "-" + region;
    }

    // @Headers: 전체 헤더 Map 바인딩
    public void logHeaders(@Headers Map<String, Object> headers) {
        headers.forEach((k, v) -> System.out.println(k + " = " + v));
    }

    // @ExchangeProperty: Exchange 프로퍼티 바인딩
    public void process(@Body Order order,
                        @ExchangeProperty("correlationId") String corrId) {
        System.out.println("상관관계 ID: " + corrId);
    }
}

언어 어노테이션

import org.apache.camel.language.Simple;
import org.apache.camel.language.XPath;
import org.apache.camel.language.JsonPath;

@Component
public class ExpressionBean {

    // @Simple: Simple 표현식으로 값 가져오기
    public void process(@Body Order order,
                        @Simple("${date:now:yyyy-MM-dd}") String today) {
        System.out.println("오늘 날짜: " + today);
    }

    // @XPath: XML 메시지에서 XPath로 값 추출
    public void processXml(@XPath("//order/@id") String orderId,
                           @XPath("//order/amount/text()") double amount) {
        System.out.printf("주문 %s: %.2f원%n", orderId, amount);
    }

    // @JsonPath: JSON 메시지에서 JsonPath로 값 추출
    public void processJson(@JsonPath("$.orderId") String orderId,
                            @JsonPath("$.customer.name") String name) {
        System.out.println(orderId + " - " + name);
    }
}

@BeanInject로 의존성 주입

// 라우트 빌더 내에서 Bean 주입
public class MyRoute extends RouteBuilder {
    @BeanInject
    private OrderService orderService;

    @Override
    public void configure() {
        from("direct:start")
            .bean(orderService);
    }
}

Optional 파라미터

// 헤더가 없을 때 null 허용
public void process(@Body Order order,
                    @Header(value="priority", required=false) Integer priority) {
    int p = priority != null ? priority : 0;
    // ...
}

반환값 처리

// void: 본문 변경 없음
public void log(@Body Order order) {
    System.out.println(order);
}

// 값 반환: 반환값이 새로운 메시지 본문이 됨
public Order transform(@Body String json) {
    return parseOrder(json);
}

// null 반환: 본문이 null로 설정됨 (주의)
public Order conditionalTransform(@Body String json) {
    if (!isValid(json)) return null;  // 주의: null로 설정됨
    return parseOrder(json);
}

zerg96

Share
Published by
zerg96

Recent Posts

[Apache Camel] 2025년 최신 트렌드 – AI 통합과 서버리스 Camel의 미래

2025년 Apache Camel의 최신 트렌드를 분석합니다. AI/LLM 통합 컴포넌트, 서버리스 배포, Camel K 진화, WebAssembly…

8시간 ago

[Camel in Action] 완결편 – Apache Camel 전체 여정 회고와 다음 단계

Camel in Action을 완독한 후 Apache Camel의 전체 그림을 다시 정리합니다. 핵심 철학, 학습 경로,…

8시간 ago

[Camel in Action] 실전편 – Camel 마이그레이션 가이드 2.x에서 4.x까지

Apache Camel 2.x에서 3.x, 4.x로 마이그레이션하는 단계별 가이드입니다. 주요 API 변경사항, 제거된 컴포넌트, 자동화 도구…

8시간 ago

[Camel in Action] 실전편 – Camel 라우트 디버깅 기법과 문제 해결 가이드

Apache Camel 라우트에서 발생하는 문제를 디버깅하고 해결하는 실전 기법을 설명합니다. 로그 분석, breakpoint 디버깅, Tracer,…

8시간 ago

[Camel in Action] 실전편 – Camel 도입 전 반드시 알아야 할 것들

Apache Camel을 프로젝트에 도입하기 전 알아야 할 핵심 사항을 정리합니다. 학습 곡선, 도입 비용, 적합한…

8시간 ago

[Camel in Action] 실전편 – Enterprise Integration Patterns 20가지 핵심 정리

엔터프라이즈 통합 패턴(EIP) 20가지를 Apache Camel 코드와 함께 한 번에 정리합니다. 메시징 채널, 메시지 라우팅,…

8시간 ago