WebSphere Message Broker Version 8.0.0.5 Betriebssysteme: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Sehen Sie sich die Informationen zur aktuellen Produktversion im IBM Integration Bus Version 9.0 an.

Nachrichteninhalt mithilfe von JAXB-Java-Objektklassen verarbeiten

Verwenden Sie die JAXB-Objektklassen, die von einem JAXB-Compiler (JAXB = Java™ Architecture for XML Binding) unter Verwendung der JAXB-Klassenschablone generiert wurden.

Bevor Sie beginnen:
Sie können Java Architecture for XML Binding (JAXB) mit einem JavaCompute-Knoten zur Verarbeitung Ihrer Nachrichten verwenden, indem Sie auf die aus Ihren Nachrichtenmodellschemadateien generierten JAXB-Java-Objektklassen zugreifen, diese erstellen und bearbeiten.

Bei JAXB-Java-Objektklassen handelt es sich um die Darstellung eines Java-Objekts Ihrer Nachricht, die mit der Java-Codevervollständigung verwendet werden können. Die Schablone Process via JAXB class (Verarbeitung über JAXB-Klasse) im Assistent Neue Java-Rechenknotenklasse generiert einen Vorlagencode zur Verarbeitung Ihrer Nachrichten mithilfe von JAXB-Java-Objektklassen. Wenn Sie auch den Assistenten Neue Java-Rechenknotenklasse verwendet haben, um entweder Ihre JAXB-Java-Objektklassen zu generieren oder Ihre vorhandenen JAXB-Java-Objektklassen zu referenzieren, ist Schritt 1 möglicherweise für Sie abgeschlossen.

Weitere Informationen zur Verwendung von JAXB in Messaging-Lösungen finden Sie im JavaCompute Node JAXB Transformation-Beispiel.

Informationen zu Beispielen können nur bei Verwendung des in das WebSphere Message Broker Toolkit integrierten bzw. online verfügbaren Information Center angezeigt werden. Muster können nur ausgeführt werden, wenn das im WebSphere Message Broker Toolkit integrierte Information Center verwendet wird.

Gehen Sie zur Verarbeitung von Nachrichteninhalten mithilfe von JAXB-Java-Objektklassen folgendermaßen vor:

  1. Optional: Ändern Sie die Methode onInitialize () für den Verweis auf ein oder mehrere Pakete mit Ihren Java-Objektbindungsklassen.
    	public void onInitialize() throws MbException {
    		try {
    			//  TODO Kontextpfad "com.example.jaxb" so aktualisieren, dass es
    			//  sich dabei um das Paket der Java-Objektklassen handelt, die von einem
    			//  JAXB-Bindungscompiler generiert wurden.
    						jxbcntxt = JAXBContext.newInstance("com.example.jaxb");

    Ersetzen Sie com.example.jaxb durch Ihr Paket mit den JAXB-Java-Objektbindungsklassen.

    Anmerkung: Wenn Sie Ihren Nachrichtenfluss implementieren oder erneut starten, wird die Methode onInitialize () nur einmal aufgerufen und initialisiert JAXB-Kontext für alle Verarbeitungsthreads.

    Wenn durch die Generierung des JAXB-Kontexts ein Fehler ausgelöst wird, gibt der in der Vorlage "Process via JAXB class" (Verarbeitung über JAXB-Klasse) bereitgestellte Code die Ausnahmebedingung MbUserException aus und die Implementierung schlägt fehl. Stellen Sie beim Fehlschlagen der Implementierung anhand der im Ereignisprotokoll des Hostsystems gemeldeten Fehlernachricht die Fehlerursache fest. Höchstwahrscheinlich kann mindestens ein Paketname nicht aufgelöst werden oder ein oder mehrere von Ihnen angegebene Pakete enthalten nicht die erforderlichen Eigenschaften für die JAXB-Objektfactory bzw. die erforderlichen Bindungseigenschaften.

  2. Ändern Sie die Methode evaluate(), um jede in einem MbMessageAssembly-Objekt übergebene Nachricht zu verarbeiten. Das MbMessageAssembly-Objekt ist in der benutzerdefinierten Java-Knoten-API definiert.
    1. Im ersten Abschnitt der Methode evaluate() werden die Nachrichtendaten aus der Assembly extrahiert, es wird eine Ausgabe-Assembly erstellt und Nachrichtenheader werden kopiert. Weitere Informationen finden Sie im Abschnitt Nachrichtenverarbeitungs- oder Sendeknoten in Java erstellen.
      public void onInitialize() throws MbException {
      try {
      //  TODO Kontextpfad "com.example.jaxb" so aktualisieren, dass es
      			//  sich dabei um das Paket der Java-Objektklassen handelt, die von einem
      			//  JAXB-Bindungscompiler generiert wurden.
      jaxbContext = JAXBContext.newInstance("com.example.jaxb");
      } catch (JAXBException e) {
      // Durch diese Ausnahmebedingung schlägt die Implementierung des Java-Rechenknotens fehl
      // Typische Ursache ist, dass das oben genannte JAXB-Paket nicht verfügbar ist
      MbUserException mbue = new MbUserException(this, "onInitialize()",
      "", "", e.toString(), null);
      throw mbue;
      }
      }
    2. Im nächsten Abschnitt der Methode evaluate() wird ein Unmarshalling der Nachrichtendaten in die Gruppe der aus dem Nachrichtenschema gebundenen Java-Objekte ausgeführt. Durch das Unmarshalling wird eine Java-Objektmodellkopie der Nachrichtendaten im Hauptspeicher erstellt.
      try {
      // Unmarshalling der Eingabenachrichtendaten aus der Brokerbaumstruktur in die Java-Objektklassen ausführen
      Object inMsgJavaObj = jaxbContext.createUnmarshaller().unmarshal(inMessage.getDOMDocument());
    3. Im nächsten Abschnitt der Methode evaluate() geben Sie Ihren eigenen JABX-Code ein, um die Ausgabenachricht durch die Verarbeitung von Nachrichtendaten zu erstellen oder zu aktualisieren. In den externen Ressourcen finden Sie weitere Informationen zur Programmierung von Transformationen mithilfe von JAXB-Java-Objektklassen. Informationen zum Debugging in Java sind im Abschnitt Java Debugger enthalten.
      // ----------------------------------------------------------
      // Nachfolgend Benutzercode hinzufügen, um die neuen Ausgabedaten durch Aktualisierung
      			// der Java-Objekte oder Erstellen neuer Java-Objekte zu erstellen
      Object outMsgJavaObj = inMsgJavaObj;
      // Ende der Benutzerverarbeitung von Java-Objekten
      // ----------------------------------------------------------
      Das folgende Beispiel zeigt JAXB-Code, durch den ein Datensatz zu einer CSV-Nachricht hinzugefügt und der Wert der drei Felder in diesem Datensatz festgelegt wird:
      // Beispiel: Datensatz mit festen Daten hinzufügen
      CsvMsg outMsgJavaObj = (CsvMsg) inMsgJavaObj;
      Record additionalCsvRecord = new Record();
      additionalCsvRecord.setField1("My new field 1 text");
      additionalCsvRecord.setField2("My new field 2 text");
      additionalCsvRecord.setField3("My new field 3 text");
      outMsgJavaObj.getRecord().add(additionalCsvRecord);
      // Ende des Beispiels
    4. Im nächsten Abschnitt der Methode evaluate() wird ein Marshalling der verarbeiteten Java-Objektklassen in die Nachrichtenbaumstruktur des Brokers durchgeführt. Ändern Sie diesen Code, um das relevante Java-Objekt anstelle der Standardvorlage zu übergeben. Wenn Ihre Eingabenachricht durch den JAXB-Transformationscode aktualisiert wurde, übergeben Sie die Java-Objektklasse, die beim Unmarshalling in den Marshalling-Code erstellt wurde. Wenn Sie eine Ausgabenachricht erstellen, übergeben Sie die Java-Objektklasse für Ihre neue Ausgabenachricht in den Marshalling-Code. Die Vorlage legt XMLNSC als Ausgabedomäne fest. Wenn sich die Ausgabenachricht in den DFDL- oder SOAP-Domänen befinden soll, müssen Sie diesen Code ändern.
      // TODO Erforderliche Brokerdomäne für die Ausgabenachricht festlegen, z. B. XMLNSC
      Document outDocument = outMessage.createDOMDocument(MbXMLNSC.PARSER_NAME);
      // Marshalling der neuen oder aktualisierten Java-Objektklasse für die Ausgabe in die Brokerbaumstruktur ausführen
      jaxbContext.createMarshaller().marshal(outMsgJavaObj, outDocument);
Nächste Schritte:
Bemerkungen | Marken | Downloads | Bibliothek | Support | Feedback

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        Letzte Aktualisierung:
        
        Letzte Aktualisierung: 2015-02-28 16:20:17


TaskthemaTaskthema | Version 8.0.0.5 | ac49011_