在訊息格式之間轉碼

調解可以將訊息從一種格式轉換成另一種格式,而不需要變更訊息的語意意義。 此作業稱為轉碼訊息。

下列程式碼是調解處理程式範例,它會將訊息轉碼成新的訊息格式,但前提是訊息可以轉碼:

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() : ,null一律會傳回。 所有其他訊息格式必須具有訊息有效負載。 這表示 JMS: 格式的訊息無法轉碼成另一個格式。 如果調解需要將 JMS 格式的訊息變更為任何其他格式的訊息,調解需要呼叫 SIMessage 物件上的 SIDataGraphFactory.getInstance().createDataGraph(newFormat)setDataGraph 方法來變更訊息內容。
  • (2)null如果調解在 JMS 格式的訊息上呼叫 getDataGraph() ,則一律會傳回:
  • (3) 調解可以對訊息呼叫 getNewDataGraph() 方法,以傳回與訊息格式相同的複製資料圖。 可以編輯副本,保留原始訊息不變。 如果是 SOAP 和 Bean ,您可以編輯格式字串來變更訊息模型,以變更 ":" 後面的值。
表 1. 訊息轉碼 表格包含可用來將訊息從一種格式轉換為另一種格式的不同格式。 此表格顯示不同格式之間可能的轉碼選項,並提供轉換對訊息的影響。
  至 JMS: 至 JMS: 文字 至 JMS: 位元組 至 JMS: 串流 至 JMS: 物件 至 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: 文字 DG=null (2) 是 (3) 是,位元組包含 UTF-8 是,如果文字包含符合正確綱目的 XML。 是,如果訊息內容是有效的 SOAP。 是,如果訊息內容是有效的 SOAP。
來源 JMS: 位元組 DG=null (2) 是,但只有在位元組可以正確解譯為 UTF-8 字串時。 是 (3) 是,如果位元組包含符合正確綱目的 XML。 是,假設位元組是序列化物件。 是,如果訊息內容是有效的 SOAP。 是,如果訊息內容是有效的 SOAP。
從 JMS: 串流 DG=null (2) 是,文字是 XML 轉碼。 是,位元組包含 XML 轉碼。 是 (3)
來源 JMS: 物件 DG=null (2) 是,位元組包含物件序列化。 是 (3)
從 SOAP: DG=null (2) 是(Y) 是(Y) 是 (3)-如果訊息內容符合新的 WSDL。 是(Y)
從 Bean: DG=null (2) 是(Y) 是(Y) 是(Y) 是 (3)-如果訊息內容符合新的 WSDL。