Este ejemplo muestra el uso de JAXB (Java Architecture for XML Binding) con un nodo JavaCompute para transformar datos de mensajes.
Puede utilizar JAXB con aplicaciones Java para trabajar con clases de objetos Java utilizando métodos de obtención y de establecimiento. Este escenario transforma un mensaje SalesEnvelope simplificado que contiene registros de factura en un mensaje de ventas procesado que contiene registros de sentencia.
Los mensajes de entrada y salida los define el esquema XML en una biblioteca de Message Broker:
Las clases de objetos Java JAXB se utilizan en la clase Java JavaComputeJAXBSampleApplicationJava\com\ibm\sample\JavaComputeNodeJAXBTransform_JAXBSalesTransform.java del nodo JavaCompute. Esta clase Java se creó utilizando el asistente de "nueva clase de nodo JavaCompute", y la invoca el nodo JavaCompute de "transformación de ventas JAXB". Para completar la transformación, el código siguiente pasa por las clases de objetos Java, desordenan el mensaje de entrada, crea el objetos Java para crear el mensaje de salida y ordena los objetos Java para crear la salida del nodo:
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;
Para obtener más información, consulte Uso de JAXB con un nodo JavaCompute.