このサンプルは、Java Architecture for XML Binding (JAXB) を JavaCompute ノードで使用して、メッセージ・データを変換する例を示します。
JAXB を Java アプリケーションで使用すると、getter メソッドと setter メソッドを使用して Java オブジェクト・クラスを操作することができます。 このシナリオでは、送り状レコードを含む簡略化した販売エンベロープ・メッセージを、取引明細書レコードを含む処理済み販売メッセージに変換します。
入出力メッセージは、Message Broker ライブラリー内にある次の XML スキーマで定義されています。
JAXB Java オブジェクト・クラスは、JavaCompute ノード Java クラス JavaComputeJAXBSampleApplicationJava¥com¥ibm¥sample¥JavaComputeNodeJAXBTransform_JAXBSalesTransform.java で使用されます。 この Java クラスは「新規 Java 計算ノード・クラス」ウィザードを使用して作成されました。このクラスが JavaCompute ノード「JAXB Sales Transform」から呼び出されます。 以下のコードで、Java オブジェクト・クラスのステップスルー、入力メッセージのアンマーシャル、出力メッセージを作成するための Java オブジェクトの作成、そしてノードから出力を作成するための Java オブジェクトのマーシャルを行うことによって、変換が完了します。
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;
詳細については、JavaCompute ノードでの JAXB の使用を参照してください。