메시지 페이로드에 대한 작업

기존 메시지 핸들러에서 메시지 페이로드에 대해 작업하며 메시지 페이로드를 한 메시지 형식에서 다른 메시지 형식으로 코드 변환할 수 있습니다.

시작하기 전에

EJB 프로젝트의 중개 핸들러를 작성하거나 여십시오. 자세한 정보는 중재 핸들러 작성의 내용을 참조하십시오. 중개 프로그래밍을 위한 코드 작성 팁 주제에서 중개의 프로그래밍에 대한 팁도 읽어야 합니다.

이 태스크 정보

이 태스크를 사용하여 메시지 페이로드에서 다음 조치 중 일부 또는 전부를 완료할 수 있습니다.
  • 메시지 페이로드 내에서 데이터 오브젝트 찾기
  • 페이로드를 다른 형식으로 변환
  • 예를 들어, 중개가 메시지를 로그하도록 하려면 페이로드를 바이트 배열로 변환하십시오.
메시지의 컨텐츠에 대해 작업하려면 SIMessage 및 SIMessageContext API를 사용하십시오. 추가로 SIMediationSession을 사용하여 서비스 통합 버스에 대한 액세스를 중개에 제공하고 메시지를 전송하고 수신하십시오. 자세한 정보는 다음을 참조하십시오.

메시지 내의 특정 필드에 대해 작업하려면 SDO(Service Data Objects) 버전 1 데이터 그래프를 사용하십시오. 자세한 정보는 SDO 데이터 그래프의 내용을 참조하십시오. 지원되는 메시지 유형의 형식 및 이에 대한 작업 방법의 예제에 대한 자세한 정보는 웹 서비스 메시지의 SDO 데이터 그래프 맵핑 내용을 참조하십시오.

메시지 페이로드에 대해 작업하려면 다음 단계를 수행하십시오.

프로시저

  1. handle (MessageContext context) 메소드에서, 중개 핸들러에서 기능 중개 코드를 삽입하는 위치를 찾으십시오. 인터페이스는 MessageContext이며, MessageContext에서 제공하는 메소드에 대해서만 작업하지 않는 경우에는 이를 SIMessageContext에 캐스트해야 합니다.
  2. 다음과 같이 메시지 페이로드의 데이터 그래프를 검색하십시오.
    1. MessageContext 오브젝트에서 SIMessage를 가져오십시오. 예를 들어, 다음과 같습니다.
      SIMessage message = ((SIMessageContext)context).getSIMessage();
    2. 메시지 유형을 판별하기 위해 메시지 형식 문자열을 가져오십시오. 예를 들어, 다음과 같습니다.
      String messageFormat = message.getFormat();
    3. 메시지에서 DataGraph 오브젝트를 검색하십시오. 예를 들어, 다음과 같습니다.
      DataGraph dataGraph = message.getDataGraph();
      자세한 정보는 SDO 데이터 그래프의 내용을 참조하십시오.
  3. 옵션: 페이로드 내에서 데이터 오브젝트를 찾으십시오.
    1. 이름 지정된 DataObject를 그래프 내에서 탐색하십시오. 예를 들어, DataObject의 이름이 "data"인 경우:
      DataObject dataObject = dataGraph.getRootObject().getDataObject("data");
    2. 데이터 오브젝트에 들어있는 정보를 검색하십시오. 예를 들어, 메시지가 텍스트 메시지인 경우:
      String textInfo = dataObject.getString("value");
  4. 메시지 내의 필드에 대해 작업하십시오. 이를 수행하는 방법에 대한 예제는 메시지 필드에 대한 예제 코드를 참조하십시오.
  5. 옵션: 페이로드를 다른 형식으로 코드 변환하십시오.
    1. 페이로드의 코드 변환의 의미에 대해 파악하려면 메시지 형식 간 트랜스코딩 주제를 검토하십시오.
    2. 매개변수로서 새 형식을 전달하여 메소드 getNewDataGraph를 호출하면 새 형식으로 페이로드의 사본이 리턴됩니다. 예를 들어, 다음과 같습니다.
      DataGraph newDataGraph = message.getNewDataGraph(newFormat);
    3. setDataGraph 메소드를 사용하여 메시지로 다시 새 형식의 데이터 그래프를 작성하십시오. 예를 들어, 다음과 같습니다.
      message.setDataGraph(newDataGraph, newFormat);
  6. 옵션: 페이로드를 바이트 스트림으로 변환하십시오.
    1. 메시지 페이로드를 바이트 배열 트랜스코딩메시지 페이로드로 바이트 배열 트랜스코딩 주제를 검토하여 메시지 형식 및 바이트 스트림 간의 변환 및 역변환에 대한 의미를 이해하십시오.
    2. getDataGraphAsBytes 메소드를 호출하십시오. 페이로드의 사본이 바이트 스트림으로 리턴됩니다. 예를 들어, 다음과 같습니다.
      byte[] newByteArray = message.getDataGraphAsBytes();
    3. 메소드에 전달된 형식에 따라 바이트를 구문 분석하여 데이터 그래프를 새로 작성하는 SIDataGraphFactory API에 의해 제공된 createDataGraph 메소드를 호출하십시오. 예를 들어, 다음과 같습니다.
      DataGraph newDataGraph = SIDataGraphFactory.getInstance().createDataGraph( byteArray, format);
    4. 바이트 스트림으로 메시지에 대해 작업하십시오. 이를 수행하는 방법에 대한 예제는 메시지 필드에 대한 예제 코드를 참조하십시오.
  7. MessageContext가 핸들러 목록의 다음 중개 핸들러로 전달되도록 중개 코드에서 True를 리턴하십시오. 리턴값이 False이면 MessageContext가 버려지며 대상에 도달되지 않습니다.
    참고: 중개 핸들러가 핸들러 목록에서 마지막 핸들러이며 전달 라우팅 경로가 비어 있으면, 해당 대상의 처리 애플리케이션이 메시지를 사용할 수 있습니다. 전달 라우팅 경로가 비어 있지 않으면 해당 대상의 처리자가 메시지를 사용할 수 없습니다. 대신에 메시지가 라우팅 경로의 다음 대상으로 전달됩니다.

메시지 필드에 대한 예제 코드

public boolean handle(MessageContext context) throws MessageContextException {
	
	/* Get the SIMessage from the MessageContext object */
	SIMessage message = ((SIMessageContext)context).getSIMessage(); 
	
	/* Get the message format string */
	String messageFormat = message.getFormat(); 
	
	/* If you have a JMS TextMessage then extract the text contained in the message.	*/
	if(messageFormat.equals("JMS:text"))
	{
		/* Retrieve the DataGraph object from the message */
		DataGraph dataGraph = message.getDataGraph();
		
		/* Navigate down the DataGraph to the DataObject named 'data'. */
		DataObject dataObject = dataGraph.getRootObject().getDataObject("data");
		
		/* Retrieve the text information contained in the DataObject. */
		String textInfo = dataObject.get("value");
		
		/* Use the text information retrieved */
		System.out.println(textInfo);
	}
	
	
	/* Return true so the MessageContext is passed to any other mediation handlers
	* in the handler list	*/
	return true;
	
	}
바이트 스트림으로서 메시지 페이로드에 대한 작업을 위한 전체 중개 기능 코드는 다음 예제와 유사합니다.
  public boolean handle(MessageContext context)throws MessageContextException {
  
		/* Get the SIMessage from the MessageContext object */
		SIMessage message = ((SIMessageContext)context).getSIMessage(); 
    
    if (!SIApiConstants.JMS_FORMAT_MAP.equals(msg.getFormat()))
    {
      try 
      {
        dumpBytes(msg.getDataGraphAsBytes());
      }
      catch (Exception e)
      {
        System.out.println("The message contents could not be retrieved due to a "+e);
      }
    }
    else
    {
      System.out.println("The bytes for a JMS:map format message cannot be shown.");
    }
    
    return true;
  }
  
  private static void dumpBytes(byte[] bytes)
  {
    // Subroutine to dump the bytes in a readable form to System.out
  }
}

주제 유형을 표시하는 아이콘 태스크 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tjy1501
파일 이름:tjy1501.html