En el ejemplo siguiente se muestra cómo crear un enlace personalizado para un mensaje MapMessage de JMS.
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; } }
<?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>