메시지 형식 간 트랜스코딩
중개는 메시지의 시맨틱 의미를 변경하지 않고 하나의 형식에서 다른 형식으로 메시지를 변환할 수 있습니다. 이 조작은 메시지를 트랜스코딩하는 것으로 간주됩니다.
다음 코드는 트랜스코딩할 수 있는 메시지를 제공하여 메시지를
새로운 메시지 형식으로 트랜스코딩하는 중개 핸들러의 예입니다.
private static final String NEW_FORMAT = "JMS:text";
public boolean(MessageContext context) throws MessageContextException
{
try
{
SIMessageContext msgCtx = (SIMessageContext)context;
SIMessage msg = msgCtx.getMessage();
DataGraph newDg = msg.getNewDataGraph(NEW_FORMAT);
msg.setDataGraph(newDg,NEW_FORMAT);
return true;
}
catch (Exception e)
{
// Reroute the original message to the exception destination
MessageContextException mce =
new MessageContextException("Unable to transcode to "+NEW_FORMAT",e);
throw mce;
}
}
다음 테이블은 트랜스코딩할 수 있는 메시지를 설명하고
각 형식 쌍에 결과를 제공합니다. 약어 DG는
"데이터 그래프"를 나타냅니다. 테이블에 있는 대괄호 안의 숫자는 다음과 같이 설명됩니다.
- (1) JMS 형식의 메시지: 페이로드를 가질 수 없습니다. 이 메시지에는 메시지 특성이 아닌 다른 메시지 데이터가 없습니다. 중개가 JMS 형식으로 메시지에서 getDataGraph()를 호출하는 경우, 널이 항상 리턴됩니다. 기타 모든 메시지 형식에는 메시지 페이로드가 있어야 합니다. 이는 JMS 형식을 가지는 메시지가 다른 형식으로 트랜스코딩될 수 없다는 것을 의미합니다. 중개가 JMS 형식을 가지는 메시지를 기타 형식을 가지는 메시지로 변경해야 하는 경우, 중개는 메시지 컨텐츠를 변경하기 위해 SIMessage 오브젝트에서 메소드 SIDataGraphFactory.getInstance().createDataGraph(newFormat) 및 setDataGraph를 호출해야 합니다.
- (2) 널은 형식 JMS를 가지는 메시지에서 중개가 getDataGraph()를 호출하는 경우 항상 리턴됩니다.
- (3) 메시지와 동일한 형식을 가지는 사본 데이터 그래프를 리턴하기 위해 중개는 메시지에서 메소드 getNewDataGraph()를 호출할 수 있습니다. 사본은 원본 메시지 변경 없이 편집할 수 있습니다. SOAP 및 Bean의 경우 형식 문자열을 편집하여 ":" 뒤에 오는 값을 변경함으로써 메시지 모델을 변경할 수 있습니다.
JMS에: | JMS:text에 | JMS:bytes에 | JMS:stream에 | JMS:object에 | SOAP에: | Bean에: | |
---|---|---|---|---|---|---|---|
JMS:로부터 | DG=null (1) | DG=null (1) | DG=null (1) | DG=null (1) | DG=null (1) | DG=null (1) | DG=null (1) |
JMS:text로부터 | DG=null (2) | 예(3) | 예, 바이트에 UTF-8 포함 | 예, 텍스트에 올바른 스키마를 준수하는 XML이 포함된 경우 | 아니오 | 예, 메시지 컨텐츠가 유효한 SOAP인 경우 | 예, 메시지 컨텐츠가 유효한 SOAP인 경우 |
JMS:bytes로부터 | DG=null (2) | 예, 그러나 바이트를 UTF-8 문자열로 올바르게 해석할 수 있는 경우에만 | 예(3) | 예, 바이트에 올바른 스키마를 준수하는 XML이 포함된 경우 | 예, 바이트가 일련화된 오브젝트라 가정 | 예, 메시지 컨텐츠가 유효한 SOAP인 경우 | 예, 메시지 컨텐츠가 유효한 SOAP인 경우 |
JMS:stream로부터 | DG=null (2) | 예, 텍스트는 XML 트랜스코딩입니다. | 예, 바이트는 XML 트랜스코딩을 포함합니다. | 예(3) | 아니오 | 아니오 | 아니오 |
JMS:object로부터 | DG=null (2) | 아니오 | 예, 바이트는 오브젝트 직렬화를 포함합니다. | 아니오 | 예(3) | 아니오 | 아니오 |
SOAP:로부터 | DG=null (2) | 예 | 예 | 아니오 | 아니오 | 예(3) - 메시지 컨텐츠가 새 WSDL과 일치합니다. | 예 |
Bean:로부터 | DG=null (2) | 예 | 예 | 아니오 | 아니오 | 예 | 예(3) - 메시지 컨텐츠가 새 WSDL과 일치합니다. |