2015-03-17 9 views
6

In IBM MQ habe ich eine Anforderung, wo ich viele Arten von XML aus der Warteschlange abrufen kann. Die XML-Nachrichten werden an die bereits angegebene xsd angepasst (es gibt 5 xsd - was bedeutet, dass ich 5 verschiedene xml-Dateien erhalten kann). Wenn ich die Nachricht aus der Warteschlange bekomme, möchte ich den Typ von xml wissen (wenn sein xsd1 oder xsd2 oder so weiter)Um die xsd von XML-Nachricht zu identifizieren, die von MQ empfangen wird

Der Grund, warum ich wissen möchte, ist, verwende ich eine JaxB-Schnittstelle mit SAX-Implementierung , für die ich das Java-Objekt geben muss, das der xml als Parameter entspricht. Also muss ich wissen, welche xsd der Eingang ist und ist und den Parameter entsprechend zuweisen.

Die Optionen, die ich habe, ist, eine Eigenschaft in der Kopfzeile der Nachricht festzulegen, aber die Partei, die die Nachricht in MQ löscht, ist nicht bereit.

Welche anderen Optionen habe ich? Kann ich den Dateinamen (von XML) aus dem MQ abrufen und das Xsd basierend auf dem Name der Datei finden? Oder muss ich Sax Parsing und identifizieren Sie das Root-Tag und Ableitung der Xsd-Typ? Gibt es eine andere bessere Option, an die jemand denkt?

Antwort

1

Ich glaube, Sie tun können:

Ist die eingehende Nachricht am Anfang des Nachrichtentexts die Dateinamen hat? In diesem Fall kann Ihre Anwendung nach Erhalt der Nachricht die ersten paar Bytes lesen, um den Dateinamen zu erhalten. Basierend auf dem Dateinamen kann die Anwendung das entsprechende Xsd verwenden und den gesamten Nachrichtentext übergeben.

2

Denken Sie an MQ wie die Post. Wenn Sie einen Brief bekommen, macht das Postamt nichts mit dem Inneren (der Payload) durch, und wenn es das Äußere ändert, ändert es nur die Routing-Information. Wenn Sie eingehende E-Mails an verschiedene Empfänger sortieren möchten, müssen diejenigen, die sie senden, die Daten angeben, auf die die Sortierkriterien außerhalb des Umschlags angewendet werden. Wenn dies nicht funktioniert, müssen Sie den Umschlag öffnen und nach dem Namen, der Abteilung oder dem Namen des Empfängers auf den Papieren suchen.

Ihre MQ-Nachricht ist dieser Umschlag. Die Sortierkriterien können unterschiedliche Warteschlangennamen, eine Eigenschaft der Nachricht, eine Eigenschaft des Nachrichtenheaders oder etwas in der Nutzlast sein. Wenn jedoch der Absender den Namen der Zielwarteschlange nicht explizit anhand der Auswahlkriterien festlegt oder die Nachrichten- oder Header-Eigenschaft festlegt, besteht die einzige Möglichkeit darin, die Nutzdaten zu prüfen und herauszufinden.

Wenn Sie die Nutzlast überprüfen müssen, ist dies ein perfektes Szenario für IBM Integration Broker. Sie können jedoch auch eine Anwendung schreiben, um diese Funktion auszuführen. Sehr oft wird dies von einer Dispatch-App ausgeführt, die die Nachricht erhält, herausfindet, wo sie hingeht, und sie dann in eine andere Warteschlange einfügt und COMMIT s die GET und PUT Operationen. Wenn die Dispatch-App jedoch den XML-Code analysieren muss, um die richtige Warteschlange zu ermitteln, muss die Nachricht zweimal analysiert werden - einmal vom Dispatcher, einmal von der empfangenden App.

Verwandte Themen