WebSphere WebSphere Enterprise Service Bus, Version 6.0.1 Sistemas operativos: AIX, HP-UX, Linux, Solaris, Windows

Ejemplo de enlace personalizado para un mensaje MapMessage de JMS

En el ejemplo siguiente se muestra cómo crear un enlace personalizado para un mensaje MapMessage de JMS.

Código Java de ejemplo

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;

/*
 * Formato de MapMessage:
 * 	Symbol (serie)
 *  CompanyName (serie)
 *  StockValue (doble)
 * 
 */

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;

/*
 * Almacenar el objeto DataObject pasado y recuperar los valores
 * para utilizarlos al crear el mensaje.
 */
public void setDataObject(DataObject jmsMapData) throws DataBindingException {
	jmsData = jmsMapData;
	symbol =  (String)  jmsData.get("Symbol");
	companyName =  (String)  jmsData.get("CompanyName");
	stockValue =  jmsData.getDouble("StockValue");
}
/*
 * Construir un mensaje a partir de los valores definidos anteriormente.
 */
  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;
}

/*
 * El método se llamará al recibir el mensaje, y debe convertirse
 * en un DataObject. Se llamará al método getDataObject al recuperar
 * el objeto empresarial.
 */
public void read(javax.jms.Message message) throws javax.jms.JMSException {
	//Gestionar la excepción empresarial
	if(message.propertyExists("IsBusinessException")){
		businessException = message.getBooleanProperty("IsBusinessException");
		//Si se trata de una excepción empresarial, la carga parecida fallará.
		//Cargar los datos de error del mensaje, definidos en jmsData y regresar
	}
	symbol = ((MapMessage) message).getString("Symbol");
	companyName = ((MapMessage) message).getString("CompanyName");
	stockValue = ((MapMessage) message).getDouble("StockValue");
	/*
	 * Crear el objeto de datos desde DataFactory. El objeto empresarial puede
	 * determinarse a partir de la vista de detalles de exportación. La
  * exportación especifica la interfaz y la operación, y a partir
  * de la definición de la operación, puede verse el tipo de entrada/salida
  * esperado.
	 * 
	 * El primer parámetro es el espacio de nombres del tipo de entrada de la
	 * operación y el segundo parámetro es el nombre del tipo.
	 */
	jmsData = DataFactory.INSTANCE.create("http://TradingDeskLibrary","TradingDeskBO");
	/* 
	 * El objeto DataObject en este caso se ha definido con dos campos de serie y
	 * un campo doble.
	 * 
	 * Estos campos ahora pueden cumplimentarse utilizando los métodos set.
	 */
	if (jmsData != null) {
		jmsData.set("Symbol",symbol);
		jmsData.set("CompanyName",companyName);
		jmsData.setDouble("StockValue",stockValue);
	}
}

 public int getMessageType() {
 	/*
 	 * Uno de los siguientes:
 	 * 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 de ejemplo

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

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

Condiciones de uso | Evalúe esta página

Icono de fecha y horaÚltima actualización: 1 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. Reservados todos los derechos.
Este centro de información está basado en tecnología Eclipse. (http://www.eclipse.org)