Definición de direcciones de direccionamiento en una cabecera de mensaje
Puede añadir funciones a un manejador de mediaciones preexistentes para establecer las direcciones de direccionamiento en la cabecera de mensaje.
Antes de empezar
Acerca de esta tarea
Para trabajar con las direcciones de direccionamiento, utilice las API SIDestinationAddress y SIDestinationAddressFactory. SIDestinationAddress es la interfaz pública que representa un bus de integración de servicios y proporciona a la mediación acceso al nombre del destino y del nombre de bus. SIDestinationAddressFactory le permite crear una nueva SIDestinationAddress para representar un destino de bus de integración de servicios. Para obtener información de referencia acerca de estas API, consulte SIDestinationAddress y SIDestinationAddressFactory.
Procedimiento
Ejemplo
/* Una mediación de ejemplo que clona un mensaje
* y envía el clon a otro destino */
public class RoutingMediationHandler implements MediationHandler {
public String remoteDestinationName="newdest";
public boolean handle(MessageContext context) throws MessageContextException {
SIMessage clonedMessage = null;
SIMessageContext mediationContext = (SIMessageContext) context;
SIMessage message = mediationContext.getSIMessage();
SIMediationSession mediationSession = mediationContext.getSession();
// Crear una vía de acceso de direccionamiento de reenvío que se establecerá en el mensaje clonado
Vector forwardRoutingPath = new Vector();
SIDestinationAddressFactory destFactory =
SIDestinationAddressFactory.getInstance();
SIDestinationAddress dest =
destFactory.createSIDestinationAddress(remoteDestinationName,false);
forwardRoutingPath.add(dest);
try {
// Clonar el mensaje
clonedMessage = (SIMessage) message.clone();
// Modificar la ruta de direccionamiento de reenvío para el clon
clonedMessage.setForwardRoutingPath(forwardRoutingPath); // Enviar el mensaje al siguiente destino del frp
mediationSession.send(clonedMessage, false); } catch (SIMediationRoutingException e1) {
e1.printStackTrace();
} catch (SIDestinationNotFoundException e1) {
e1.printStackTrace();
} catch (SINotAuthorizedException e1) {
e1.printStackTrace();
} catch (CloneNotSupportedException e) {
// El clon de SIMessage debe ser correcto y no es necesario especificar este bloque
e.printStackTrace();
}
// permitir que el mensaje original continúe en su vía de acceso
return true;
}