WebSphere WebSphere Enterprise Service Bus, Version 6.0.1 作業系統: AIX, HP-UX, Linux, Solaris, Windows

JMS MapMessage 自訂連結的範例

下列範例顯示如何建立 JMS MapMessage 的自訂連結。

範例 Java 程式碼

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;
 } 
    
}

範例 XSD

<?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>

範例 WSDL

<?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>

Reference topic

使用條款 | 此頁的評等

時間戳記前次更新: 5 Mar 2006
http://publib.boulder.ibm.com/infocenter/dmndhelp/v6rxmx/index.jsp?topic=/com.ibm.websphere.wesb.doc.nl1_6.0.1\ref\rwesb_jmscustombindings.html

(C) Copyright IBM Corporation 2005. All Rights Reserved.
本資訊中心採用 Eclipse 技術。(http://www.eclipse.org)