58.2. 메시지 처리


58.2.1. 개요

일반적인 메시지 처리에서는 인터셉터의 handleMessage() 메서드가 호출됩니다. 메시지 데이터를 Message 오브젝트로 수신합니다. Message 개체는 메시지의 실제 내용과 함께 메시지 또는 메시지 처리 상태와 관련된 여러 속성을 포함할 수 있습니다. Message 오브젝트의 정확한 내용은 체인의 현재 인터셉터 앞의 인터셉터에 따라 달라집니다.

58.2.2. 메시지 콘텐츠 가져오기

Message 인터페이스는 메시지 내용을 추출하는 데 사용할 수 있는 두 가지 메서드를 제공합니다.

  • public <T> TgetContentjava.lang.Class<T > 형식 getContent() 메서드는 지정된 클래스의 오브젝트에 있는 메시지의 내용을 반환합니다. 콘텐츠를 지정된 클래스의 인스턴스로 사용할 수 없는 경우 null이 반환됩니다. 사용 가능한 콘텐츠 유형 목록은 인터셉터 체인의 인터셉터 위치와 인터셉터 체인의 방향에 따라 결정됩니다.
  • publicCollection<Attachment> getAttachments () 메서드는 메시지와 연결된 바이너리 첨부 파일이 포함된 Java Collection 오브젝트를 반환합니다. 첨부 파일은 org.apache.cxf.message.Attachment 오브젝트에 저장됩니다. attachment 오브젝트는 바이너리 데이터를 관리하는 방법을 제공합니다.

    중요

    첨부 파일은 첨부 처리 인터셉터가 실행된 후에만 사용할 수 있습니다.

58.2.3. 메시지의 방향 확인

메시지 교환을 쿼리하여 메시지 방향을 결정할 수 있습니다. 메시지 교환은 인바운드 메시지와 아웃바운드 메시지를 별도의 속성에 저장합니다.[3]

메시지와 연결된 메시지 교환은 메시지의 getExchange() 메서드를 사용하여 검색됩니다. 예 58.1. “메시지 교환 가져오기” 에 표시된 대로 getExchange() 는 매개변수를 사용하지 않고 메시지 교환을 org.apache.cxf.message.Exchange 오브젝트로 반환합니다.

예 58.1. 메시지 교환 가져오기

ExchangegetExchange

교환 오브젝트에는 교환과 관련된 메시지를 받기 위해 예 58.2. “메시지 교환에서 메시지 가져오기” 에 표시된 네 가지 방법이 있습니다. 각 메서드는 메시지를 org.apache.cxf.Message 오브젝트로 반환하거나 메시지가 없는 경우 null을 반환합니다.

예 58.2. 메시지 교환에서 메시지 가져오기

messagegetInMessageMessagegetInFaultMessageMessagegetOutMessageMessagegetOutFaultMessage

예 58.3. “메시지 체인의 방향 확인” 현재 메시지가 아웃바운드인지 확인하기 위한 코드를 표시합니다. 이 메서드는 메시지 교환을 가져오고 현재 메시지가 교환의 아웃 바운드 메시지와 동일한지 확인합니다. 또한 아웃바운드 오류 오류 메시지를 아웃바운드 오류 가로채기 체인의 오류 메시지에 대해 현재 메시지를 확인합니다.

예 58.3. 메시지 체인의 방향 확인

public static boolean isOutbound()
{
   Exchange exchange = message.getExchange();
        return message != null
               && exchange != null
               && (message == exchange.getOutMessage()
                   || message == exchange.getOutFaultMessage());
}

58.2.4. 예

예 58.4. “메시지 처리 방법 예” zip 압축 메시지를 처리하는 인터셉터의 코드를 표시합니다. 메시지 방향을 확인한 다음 적절한 작업을 수행합니다.

예 58.4. 메시지 처리 방법 예

import java.io.IOException;
import java.io.InputStream;
import java.util.zip.GZIPInputStream;

import org.apache.cxf.message.Message;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;

public class StreamInterceptor extends AbstractPhaseInterceptor<Message>
{

  ...

  public void handleMessage(Message message)
  {

        boolean isOutbound = false;
        isOutbound = message == message.getExchange().getOutMessage()
               || message == message.getExchange().getOutFaultMessage();

        if (!isOutbound)
        {
          try
          {
             InputStream is = message.getContent(InputStream.class);
             GZIPInputStream zipInput = new GZIPInputStream(is);
             message.setContent(InputStream.class, zipInput);
          }
          catch (IOException ioe)
          {
             ioe.printStackTrace();
           }
        }
         else
        {
         // zip the outbound message
        }
    }
  ...
}


[3] 또한 인바운드 및 아웃바운드 결함을 별도로 저장합니다.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.