Informationen zum Mustercode 'JavaCompute node JAXB transformation'

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:

  1. JavaComputeNodeJAXBSampleLibrary/SaleEnvelope.xsd
  2. JavaComputeNodeJAXBSampleLibrary/ProcessedSales.xsd
Diese XML Schema-Dateien wurden unter Verwendung des JAXB-2.0-Schemacompilers in Java-Objektklassen eingebunden und sind im Java-Projekt "JavaComputeNodeJAXBSampleLibraryJava" enthalten; der Schemacompiler wird zusammen mit WebSphere Message Broker bereitgestellt.

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.

Zurück zum Beginn des Mustercodes