10.4. 클레임 확인 EIP

10.4.1. 클레임 확인 EIP

그림 10.4. “클레임 검사 패턴” 에 표시된 클레임 검사 EIP 패턴을 사용하면 메시지 콘텐츠를 클레임 검사(별도 키)로 교체할 수 있습니다. 클레임 검사 EIP 패턴을 사용하여 나중에 메시지 콘텐츠를 검색합니다. 메시지 콘텐츠를 데이터베이스 또는 파일 시스템과 같은 영구 저장소에 일시적으로 저장할 수 있습니다. 이 패턴은 메시지 콘텐츠가 매우 크며 모든 구성 요소에 모든 정보가 필요한 것은 아닙니다.

외부 당사자와의 정보를 신뢰할 수 없는 경우에도 유용할 수 있습니다. 이 경우 클레임 검사를 사용하여 데이터의 중요한 부분을 숨깁니다.

EIP 패턴의 Camel 구현은 메시지 콘텐츠를 내부 메모리 저장소에 일시적으로 저장합니다.

그림 10.4. 클레임 검사 패턴

라이브러리에 저장

10.4.1. 클레임 검사 EIP 옵션

클레임 검사 EIP는 다음 표에 나열된 옵션을 지원합니다.

이름

설명

Default

유형

작업

클레임 검사 작업을 사용해야 합니다. 다음 작업을 지원합니다.

get - 지정된 키에 의한 클레임 검사를(제거하지 않음) 가져옵니다.

GetAndRemove - 지정된 키에 의해 클레임 검사를 가져오고 제거합니다.

* set - 지정된 키를 사용하여 새 클레임 검사를 설정합니다. 키가 이미 있으면 재정의됩니다.

* push - 스택에 새 클레임 검사를 설정합니다(키를 사용하지 않음).

* pop - 스택에서 최신 클레임 검사를 가져옵니다(키를 사용하지 않음).

Get , Get AndRemove 또는 Set 작업을 사용하는 경우 키를 지정해야 합니다. 그런 다음 이러한 작업은 키를 사용하여 데이터를 저장하고 검색합니다. 이러한 작업을 사용하여 여러 데이터를 다른 키에 저장합니다. 그러나 푸시팝업 작업에서는 키를 사용하지 않고 스택 구조에 데이터를 저장합니다.

 

ClaimCheckOperation

key

클레임 확인에 특정 키를 사용하려면 다음을 수행합니다.

 

문자열

filter

클레임 검사 리포지토리에서 다시 병합할 데이터를 제어하는 필터를 지정합니다.

 

문자열

strategyRef

기본 구현 대신 사용자 정의 집계Strategy 를 사용하려면 다음을 수행합니다. 사용자 정의 집계 전략을 모두 사용하고 동시에 데이터를 구성할 수 없습니다.

 

문자열

10.4.2. 필터 옵션

Filter 옵션을 사용하여 Get 또는 Pop 작업을 사용할 때 병합할 데이터를 정의합니다. AggregationStrategy 를 사용하여 데이터를 다시 병합합니다. 기본 전략에서는 filter 옵션을 사용하여 병합할 데이터를 쉽게 지정합니다.

filter 옵션은 다음 구문으로 String 값을 사용합니다.

  • body: 메시지 본문을 집계하려면
  • attachments: 모든 메시지 첨부 파일을 집계하려면
  • headers: 모든 메시지 헤더를 집계하기 위해
  • header:pattern: 패턴과 일치하는 모든 메시지 헤더를 집계합니다.

패턴 규칙은 와일드카드 및 정규식을 지원합니다.

  • 와일드카드 일치(패턴은 * 로 끝나고 이름은 패턴으로 시작)
  • 정규 표현식 일치

여러 규칙을 지정하려면 쉼표 (,)로 구분합니다.

다음은 foo 로 시작하는 메시지 본문 및 모든 헤더를 포함하는 기본 필터 예제입니다.

body, header:foo*
  • 메시지 본문만 병합하려면 body
  • 메시지 첨부 파일만 병합하려면 다음을 수행합니다.
  • 헤더만 병합하려면 헤더만 병합
  • 헤더 이름 foo only: header:foo를 병합하려면 다음을 수행합니다.

필터 규칙을 비어 있거나 와일드카드로 지정하는 경우 모든 항목을 병합할 수 있습니다. 자세한 내용은 병합할 데이터 필터링을 참조하십시오.

참고

데이터를 다시 병합하면 시스템은 기존 데이터를 덮어씁니다. 또한 기존 데이터를 저장합니다.

10.4.2. 포함 및 제외 패턴을 사용하여 필터 옵션

다음은 include,exclude 또는 remove 옵션을 지정하는 데 사용할 수 있는 접두사를 지원하는 구문입니다.

  • + : 포함하기 (기본 모드임)
  • - : 제외하려면 (포함하는 것보다 우선합니다)
  • -- : 제거(제거)

예를 들면 다음과 같습니다.

  • 메시지 본문을 건너뛰고 다른 모든 것을 병합하려면 -body를 사용합니다.
  • 메시지 헤더 foo 를 건너뛰고 다른 모든 것을 병합하려면 -header:foo를 사용합니다.

데이터를 병합할 때 헤더를 제거하도록 시스템에 지시할 수도 있습니다. 예를 들어 bar로 시작하는 모든 헤더를 제거하려면 --headers:bar* 를 사용합니다.

참고

include(+)와 exclude(-) header:pattern 을 동시에 사용하지 마십시오.

10.4.3. Java 예

다음 예제에서는 PushPop 작업 작동을 보여 줍니다.The following example shows the Push and pop operations in action:

from("direct:start")
    .to("mock:a")
    .claimCheck(ClaimCheckOperation.Push)
    .transform().constant("Bye World")
    .to("mock:b")
    .claimCheck(ClaimCheckOperation.Pop)
    .to("mock:c");

다음은 GetSet 작업을 사용하는 예입니다. 예에서는 foo 키를 사용합니다.

from("direct:start")
    .to("mock:a")
    .claimCheck(ClaimCheckOperation.Set, "foo")
    .transform().constant("Bye World")
    .to("mock:b")
    .claimCheck(ClaimCheckOperation.Get, "foo")
    .to("mock:c")
    .transform().constant("Hi World")
    .to("mock:d")
    .claimCheck(ClaimCheckOperation.Get, "foo")
    .to("mock:e");
참고

데이터를 제거하지 않기 때문에 Get 작업을 사용하여 동일한 데이터를 두 번 가져올 수 있습니다. 그러나 데이터를 한 번만 가져오려면 GetAndRemove 작업을 사용합니다.

다음 예제에서는 foo 또는 bar 로 헤더만 반환하려는 filter 옵션을 사용하는 방법을 보여줍니다.

from("direct:start")
    .to("mock:a")
    .claimCheck(ClaimCheckOperation.Push)
    .transform().constant("Bye World")
    .setHeader("foo", constant(456))
    .removeHeader("bar")
    .to("mock:b")
    // only merge in the message headers foo or bar
    .claimCheck(ClaimCheckOperation.Pop, null, "header:(foo|bar)")
    .to("mock:c");

10.4.4. XML 예

다음 예제에서는 푸시팝업 작업을 보여줍니다.

<route>
  <from uri="direct:start"/>
  <to uri="mock:a"/>
  <claimCheck operation="Push"/>
  <transform>
    <constant>Bye World</constant>
  </transform>
  <to uri="mock:b"/>
  <claimCheck operation="Pop"/>
  <to uri="mock:c"/>
</route>

다음은 GetSet 작업을 사용하는 예입니다. 예에서는 foo 키를 사용합니다.

<route>
  <from uri="direct:start"/>
  <to uri="mock:a"/>
  <claimCheck operation="Set" key="foo"/>
  <transform>
    <constant>Bye World</constant>
  </transform>
  <to uri="mock:b"/>
  <claimCheck operation="Get" key="foo"/>
  <to uri="mock:c"/>
  <transform>
    <constant>Hi World</constant>
  </transform>
  <to uri="mock:d"/>
  <claimCheck operation="Get" key="foo"/>
  <to uri="mock:e"/>
</route>
참고

데이터를 제거하지 않기 때문에 Get 작업을 사용하여 동일한 데이터를 두 번 가져올 수 있습니다. 그러나 데이터를 한 번 가져오려면 GetAndRemove 작업을 사용할 수 있습니다.

다음 예제에서는 filter 옵션을 사용하여 헤더를 foo 또는 bar 로 가져오는 방법을 보여줍니다.

<route>
  <from uri="direct:start"/>
  <to uri="mock:a"/>
  <claimCheck operation="Push"/>
  <transform>
    <constant>Bye World</constant>
  </transform>
  <setHeader headerName="foo">
    <constant>456</constant>
  </setHeader>
  <removeHeader headerName="bar"/>
  <to uri="mock:b"/>
  <!-- only merge in the message headers foo or bar -->
  <claimCheck operation="Pop" filter="header:(foo|bar)"/>
  <to uri="mock:c"/>
</route>