Dieser Mustercode veranschaulicht die Umwandlung von Nachrichtendaten mithilfe von JAXB (Java Architecture for XML Binding) unter Verwendung eines JavaCompute-Knotens.
Sie können JAXB zusammen mit Java-Anwendungen einsetzen, um mithilfe der getter- und setter-Methoden Java-Objektklassen bearbeiten zu können. In diesem Szenario wird eine einfache, mit einem "Umschlag" (Envelope) versehene Nachricht, die Rechnungsdatensätze enthält, in eine Vertriebsnachricht umgewandelt, die Abrechnungsdatensätze enthält.
Die Ein- und Ausgabenachrichten werden von XML Schema in einer Message Broker-Bibliothek definiert:
Die JAXB-Java-Objektklassen werden in der Java-Klasse JavaComputeJAXBSampleApplicationJava\com\ibm\sample\JavaComputeNodeJAXBTransform_JAXBSalesTransform.java des JavaCompute-Knotens verwendet. Diese Java-Klasse wurde mithilfe des Assistenten für "neue JavaCompute-Knotenklassen" erstellt und wird vom JavaCompute-Knoten "JAXB Sales Transform" aufgerufen. Der folgende Code führt die Umwandlung durch, indem er die Java-Objektklassen durchläuft, Unmarshalling für die Eingabenachricht durchführt, Java-Objekte zur Erstellung der Ausgabenachricht erstellt und Marshalling für die Java-Objekte durchführt, um die Ausgabe vom Knoten zu erstellen:
SaleEnvelope saleEnvelope = (SaleEnvelope)inMsgJavaObj; StatementList statementList = new StatementList(); List<SaleListType> inSaleLists = saleEnvelope.getSaleList(); for(SaleListType inSaleLst : inSaleLists) { List<Invoice> inInvoices = inSaleLst.getInvoice(); for (Invoice inInv : inInvoices) { StatementType outStat = new StatementType(); outStat.setStyle("Full"); outStat.setType("Monthly"); CustomerType outCust = new CustomerType(); outCust.setInitials(inInv.getInitial().get(0) + inInv.getInitial().get(1)); outCust.setName(inInv.getSurname()); outStat.setCustomer(outCust); PurchasesType outPurch = new PurchasesType(); List<ItemType> inItems = inInv.getItem(); BigDecimal sumCost = new BigDecimal("0"); for (ItemType inItem : inItems) { BigDecimal outCost = inItem.getPrice().multiply(costMultipler); sumCost = sumCost.add(outCost.multiply(new BigDecimal(inItem.getQuantity()))); ArticleType outArtic = new ArticleType(); outArtic.setCost(outCost.toPlainString()); outArtic.setDesc(inItem.getDescription()); outArtic.setQty(inItem.getQuantity().toString()); outPurch.getArticle().add(outArtic); } outStat.setPurchases(outPurch); outStat.setAmount(sumCost.toPlainString()); statementList.getStatement().add(outStat); } } Object outMsgJavaObj = statementList;
Weitere Informationen finden Sie im Abschnitt JAXB zusammen mit einem JavaCompute-Knoten verwenden.