下列範例顯示如何建立 JMS MapMessage 的自訂連結。
import javax.jms.MapMessage; import com.ibm.websphere.sca.jms.data.JMSDataBinding; import com.ibm.websphere.sca.sdo.DataFactory; import commonj.connector.runtime.DataBindingException; import commonj.sdo.DataObject; /* * MapMessage 格式: * Symbol (string) * CompanyName (string) * StockValue (double) * */ public class CustomMapMsgBindingImpl implements JMSDataBinding { private String symbol = null; private String companyName = null; private double stockValue = 0; private boolean businessException = false; private DataObject jmsData = null; /* * 儲存傳入的 DataObject,並擷取要用於建立訊息的值。 */ public void setDataObject(DataObject jmsMapData) throws DataBindingException { jmsData = jmsMapData; symbol = (String) jmsData.get("Symbol"); companyName = (String) jmsData.get("CompanyName"); stockValue = jmsData.getDouble("StockValue"); } /* * 從先前設定的值建構一則訊息。 */ public void write(javax.jms.Message message) throws javax.jms.JMSException { MapMessage mm = (MapMessage) message; mm.setString("Symbol", symbol); mm.setString("CompanyName", companyName); mm.setDouble("StockValue",stockValue); mm.setBooleanProperty("IsBusinessException",businessException); } public DataObject getDataObject() throws DataBindingException { return jmsData; } /* * 收到訊息時會呼叫該方法,且需要 * 轉換成 DataObject。會呼叫 getDataObject 方法來擷取 * 商業物件。 */ public void read(javax.jms.Message message) throws javax.jms.JMSException { //處理商業異常狀況 if(message.propertyExists("IsBusinessException")){ businessException = message.getBooleanProperty("IsBusinessException"); //如果這是商業異常狀況,則有效負載可能會發生錯誤。 //從訊息載入錯誤資料,在 jmsData 中設定並傳回 } symbol = ((MapMessage) message).getString("Symbol"); companyName = ((MapMessage) message).getString("CompanyName"); stockValue = ((MapMessage) message).getDouble("StockValue"); /* * 從 DataFactory 建立資料物件。「商業物件」可以 * 從「匯出詳細資料」視圖中判定。這項匯出會指定介面 * 和作業,且可以從作業的定義看到預期的輸入/輸出 * 類型。 * * 第一個參數是作業輸入類型的名稱空間, * 第二個參數則是類型的名稱。 */ jmsData = DataFactory.INSTANCE.create("http://TradingDeskLibrary","TradingDeskBO"); /* * 本例中的 DataObject 定義了兩個 string 欄位和一個 double * 欄位。 * * 現在,這些欄位可以使用 set 方法來移入。 */ if (jmsData != null) { jmsData.set("Symbol",symbol); jmsData.set("CompanyName",companyName); jmsData.setDouble("StockValue",stockValue); } } public int getMessageType() { /* * 其中之一: * JMSDataBinding.BYTES_MESSAGE * JMSDataBinding.MAP_MESSAGE * JMSDataBinding.OBJECT_MESSAGE * JMSDataBinding.STREAM_MESSAGE * JMSDataBinding.TEXT_MESSAGE */ return JMSDataBinding.MAP_MESSAGE; } public boolean isBusinessException() { return businessException; } public void setBusinessException(boolean isBusinessException) { this.businessException = isBusinessException; } }
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://TradingDeskLibrary"> <xsd:complexType name="TradingDeskBO"> <xsd:sequence> <xsd:element minOccurs="0" name="Symbol" type="xsd:string"/> <xsd:element minOccurs="0" name="CompanyName" type="xsd:string"/> <xsd:element minOccurs="0" name="StockValue" type="xsd:double"/> </xsd:sequence> </xsd:complexType> </xsd:schema>
<?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions xmlns:bons1="http://TradingDeskLibrary" xmlns:tns="http://TradingDeskLibrary/TradingDeskInterface" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="TradingDeskInterface" targetNamespace="http://TradingDeskLibrary/TradingDeskInterface"> <wsdl:types> <xsd:schema targetNamespace="http://TradingDeskLibrary/TradingDeskInterface" xmlns:bons1="http://TradingDeskLibrary" xmlns:tns="http://TradingDeskLibrary/TradingDeskInterface" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:import namespace="http://TradingDeskLibrary" schemaLocation="TradingDeskBO.xsd"/> <xsd:element name="TradingDeskOperation"> <xsd:complexType> <xsd:sequence> <xsd:element name="input1" nillable="true" type="bons1:TradingDeskBO"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> </wsdl:types> <wsdl:message name="TradingDeskOperationRequestMsg"> <wsdl:part element="tns:TradingDeskOperation" name="TradingDeskOperationParameters"/> </wsdl:message> <wsdl:portType name="TradingDeskInterface"> <wsdl:operation name="TradingDeskOperation"> <wsdl:input message="tns:TradingDeskOperationRequestMsg" name="TradingDeskOperationRequest"/> </wsdl:operation> </wsdl:portType> </wsdl:definitions>