43.5. Cryostat 처리기에서 메시지 처리


43.5.1. 개요

일반적인 메시지 처리는 handleMessage() 메서드에서 처리합니다.

handleMessage() 메서드는 메시지 본문에 대한 액세스를 제공하고 message와 연결된 Cryostat 헤더로 message 본문에 대한 액세스를 제공하는 Cryostat Message Context 오브젝트를 수신합니다. 또한 컨텍스트는 메시지 컨텍스트에 저장된 속성에 대한 액세스를 제공합니다.In addition, the context provides access to any properties stored in the message context.

handleMessage() 메서드는 메시지 처리를 계속 수행하는 방법에 따라 true 또는 false를 반환합니다. 또한 예외를 throw할 수도 있습니다.

43.5.2. 메시지 본문으로 작업

Cryostat 메시지 컨텍스트의 getMessage() 메서드를 사용하여 Cryostat 메시지를 가져올 수 있습니다. 메시지를 라이브 Cryostat Message 오브젝트로 반환합니다. 처리기의 메시지에 대한 모든 변경 사항은 컨텍스트에 저장된 메시지에 자동으로 반영됩니다.

기존 메시지를 새 메시지로 교체하려면 컨텍스트의 setMessage() 메서드를 사용할 수 있습니다. setMessage() 메서드는 Cryostat Message 오브젝트 를 사용합니다.

43.5.3. Cryostat 헤더 가져오기

Cryostat Message 개체의 getHeader() 메서드를 사용하여 Cryostat 메시지 의 헤더에 액세스할 수 있습니다. 이렇게 하면 처리하려는 헤더 요소를 찾기 위해 검사해야 하는 Cryostat Header 개체로 header 헤더가 반환됩니다.

Cryostat 메시지 컨텍스트는 예 43.10. “Cryo statMessageContext.getHeaders() 메서드” 에 표시된 getHeaders() 메서드를 제공하여 지정된 Cryostat 헤더에 대해 CryostatB 개체가 포함된 배열을 반환합니다.

예 43.10. Cryo statMessageContext.getHeaders() 메서드

Ojbect[]getHeadersQName헤더>.<BContext컨텍스트부울allRoles

해당 요소의 QName을 사용하여 헤더를 지정합니다. allRoles 매개변수를 false로 설정하여 반환된 헤더를 추가로 제한할 수 있습니다. 이는 활성 Cryostat 역할에 적용할 수 있는 Cryostat 헤더만 반환하도록 런타임에 지시합니다.

헤더가 없는 경우 메서드는 빈 배열을 반환합니다.

Cryostat BContext 오브젝트 인스턴스화에 대한 자세한 내용은 39장. A Cryo statBContext 오브젝트 사용 에서 참조하십시오.

43.5.4. 컨텍스트 속성 작업

논리 처리기에 전달된 Cryostat 메시지 컨텍스트는 애플리케이션 메시지 컨텍스트의 인스턴스이며 이 컨텍스트에 저장된 모든 속성에 액세스할 수 있습니다. 처리기는 APPLICATION 범위와 Handler 범위 모두에서 속성에 액세스할 수 있습니다.

애플리케이션의 메시지 컨텍스트와 마찬가지로 Cryostat 메시지 컨텍스트는 Java 맵의 하위 클래스입니다. 컨텍스트에 저장된 속성에 액세스하려면 Map 인터페이스에서 상속된 get() 메서드 및 put() 메서드를 사용합니다.

기본적으로 논리 처리기 내에서 컨텍스트에서 설정한 모든 속성에는 HANDLER의 범위가 할당됩니다.By default, any properties you set in the context from inside a logical handler will be assigned a scope of HANDLER. 애플리케이션 코드가 속성에 액세스하려면 컨텍스트의 setScope() 메서드를 사용하여 속성 범위를 명시적으로 APPLICATION으로 설정해야 합니다.

메시지 컨텍스트에서 속성 사용에 대한 자세한 내용은 42.1절. “컨텍스트 이해” 을 참조하십시오.

43.5.5. 메시지의 방향 확인Determining the direction of the message

메시지가 처리기 체인을 통과하는 방향을 아는 것이 종종 중요합니다. 예를 들어 발신 메시지에 헤더를 추가하고 들어오는 메시지에서 헤더를 제거하려고 합니다.

메시지의 방향은 메시지 컨텍스트의 아웃바운드 메시지 속성에 저장됩니다. 예 43.11. “ESP 메시지 컨텍스트에서 메시지 방향 가져오기” 에 표시된 대로 MessageContext.MESSAGE_OUTBOUND_PROPERTY 키를 사용하여 메시지 컨텍스트에서 아웃바운드 메시지 속성을 검색합니다.

예 43.11. ESP 메시지 컨텍스트에서 메시지 방향 가져오기

Boolean outbound;
outbound = (Boolean)smc.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);

속성은 부울 오브젝트로 저장됩니다. 개체의 booleanValue() 메서드를 사용하여 속성의 값을 확인할 수 있습니다. 속성이 true로 설정되면 메시지는 아웃바운드입니다. 속성이 false로 설정된 경우 메시지는 인바운드입니다.

43.5.6. 반환 값 확인

handleMessage() 메서드가 메시지 처리를 완료하는 방법은 메시지 처리가 진행되는 방식에 직접적인 영향을 미칩니다. 다음 작업 중 하나를 수행하여 완료할 수 있습니다.

  1. 메시지 처리가 정상적으로 진행되어야 하는 Apache CXF 런타임으로 true- returnsing true 신호를 반환합니다. 다음 처리기(있는 경우)에 해당 handleMessage() 가 호출됩니다.
  2. 일반적인 메시지 처리가 중지되는 Apache CXF 런타임으로 false-반복 신호를 반환합니다. 런타임이 진행되는 방법은 현재 메시지에 사용되는 메시지 교환 패턴에 따라 달라집니다.

    요청-응답 메시지 교환의 경우 다음과 같은 일이 발생합니다.

    1. 메시지 처리 방향이 취소됩니다.

      예를 들어 서비스 공급자가 요청을 처리하는 경우 메시지는 서비스의 구현 오브젝트에 대한 진행을 중지합니다. 대신 요청을 시작한 소비자로의 반환을 위해 바인딩으로 다시 전송됩니다.

    2. 처리기 체인에 상주하는 모든 메시지 처리기는 체인에 상주하는 순서대로 호출되는 handleMessage() 메서드가 있습니다.
    3. 메시지가 처리기 체인의 끝에 도달하면 디스패치됩니다.

      단방향 메시지 교환의 경우 다음과 같은 일이 발생합니다.

    4. 메시지 처리가 중지됩니다.
    5. 이전에 호출한 모든 메시지 처리기에는 Close() 메서드가 호출됩니다.
    6. 메시지가 발송됩니다.
  3. ProtocolException 예외를 throw - ProtocolException 예외 또는 이 예외의 하위 클래스를 발생시켜 메시지 처리를 중단하는 Apache CXF 런타임을 시작하라는 신호를 보냅니다. 런타임이 진행되는 방법은 현재 메시지에 사용되는 메시지 교환 패턴에 따라 달라집니다.

    요청-응답 메시지 교환의 경우 다음과 같은 일이 발생합니다.

    1. 처리기에서 fault 메시지를 아직 생성하지 않은 경우 런타임은 메시지를 fault 메시지로 래핑합니다.
    2. 메시지 처리 방향이 취소됩니다.

      예를 들어 서비스 공급자가 요청을 처리하는 경우 메시지는 서비스의 구현 오브젝트에 대한 진행을 중지합니다. 요청을 시작한 소비자로의 반환에 대한 바인딩으로 다시 전송됩니다.

    3. 처리기 체인에 새 처리 방향에 상주하는 모든 메시지 처리기는 체인에 상주하는 순서대로 호출되는 handleFault() 메서드가 있습니다.
    4. 오류 메시지가 처리기 체인의 끝에 도달하면 디스패치됩니다.

      단방향 메시지 교환의 경우 다음과 같은 일이 발생합니다.

    5. 처리기에서 fault 메시지를 아직 생성하지 않은 경우 런타임은 메시지를 fault 메시지로 래핑합니다.
    6. 메시지 처리가 중지됩니다.
    7. 이전에 호출한 모든 메시지 처리기에는 Close() 메서드가 호출됩니다.
    8. 오류 메시지가 발송됩니다.
  4. 다른 런타임 예외를 발생 - ProtocolException 예외 이외의 런타임 예외를 검색하면 메시지 처리가 중지되는 Apache CXF 런타임이 신호를 보냅니다. 이전에 호출한 모든 메시지 처리기에는 Close() 메서드가 호출되고 예외가 디스패치됩니다. 메시지가 요청-응답 메시지 교환의 일부인 경우 예외가 디스패치되어 요청을 시작한 소비자로 반환됩니다.

43.5.7. 예

예 43.12. “Cryostat 처리기에서 메시지 처리” shows a handleMessage() implementation that print the message to the screen.

예 43.12. Cryostat 처리기에서 메시지 처리

public boolean handleMessage(SOAPMessageContext smc)
{
  PrintStream out;

  Boolean outbound = (Boolean)smc.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);

  if (outbound.booleanValue())
  {
    out.println("\nOutbound message:");
  }
  else
  {
    out.println("\nInbound message:");
  }

  SOAPMessage message = smc.getMessage();

  message.writeTo(out);
  out.println();

  return true;
}

예 43.12. “Cryostat 처리기에서 메시지 처리” 의 코드는 다음을 수행합니다.

메시지 컨텍스트에서 아웃바운드 속성을 검색합니다.

메시지 방향을 테스트하고 적절한 메시지를 출력합니다.

컨텍스트에서 Cryostat 메시지를 검색합니다.

메시지를 콘솔에 출력합니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.