Routing-Adressen in einem Nachrichtenheader definieren
Sie können einem bereits vorhandenen Mediationshandler Funktionen hinzufügen, die die Routing-Adressen im Nachrichtenheader setzen.
Vorbereitende Schritte
Informationen zu diesem Vorgang
Für die Bearbeitung von Routing-Adressen verwenden Sie die APIs SIDestinationAddress und SIDestinationAddressFactory. SIDestinationAddress ist die allgemein zugängliche Schnittstelle, die einen Service Integration Bus darstellt, und Ihrer Mediation den Zugriff auf den Namen des Ziels und den Namen des Busses ermöglicht. Mit SIDestinationAddressFactory können Sie eine neue SIDestinationAddress für ein SIB-Ziel erstellen. Referenzinformationen zu diesen APIs finden Sie in den Artikeln SIDestinationAddress und SIDestinationAddressFactory.
Vorgehensweise
Beispiel
/* Eine Beispielmediation, die eine Nachricht klont
* und den Klon an ein anderes Ziel weitersendet */
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();
// Erstellen Sie einen Routing-Pfad, der in der geklonten Nachricht gesetzt wird
Vector forwardRoutingPath = new Vector();
SIDestinationAddressFactory destFactory =
SIDestinationAddressFactory.getInstance();
SIDestinationAddress dest =
destFactory.createSIDestinationAddress(remoteDestinationName,false);
forwardRoutingPath.add(dest);
try {
// Nachricht klonen
clonedMessage = (SIMessage) message.clone();
// Routing-Pfad für den Klon ändern
clonedMessage.setForwardRoutingPath(forwardRoutingPath);
// Nachricht an das nächste Ziel im Routing-Pfad senden
mediationSession.send(clonedMessage, false);
} catch (SIMediationRoutingException e1) {
e1.printStackTrace();
} catch (SIDestinationNotFoundException e1) {
e1.printStackTrace();
} catch (SINotAuthorizedException e1) {
e1.printStackTrace();
} catch (CloneNotSupportedException e) {
// Das Klonen von SIMessage sollte OK sein, deshalb muss dieser Block eigentlich nicht eingefügt werden
e.printStackTrace();
}
// Weiterleitung der ursprünglichen Nachricht über ihren Pfad zulassen
return true;
}