JavaCompute node JAXB transformation サンプルについて

このサンプルは、Java Architecture for XML Binding (JAXB) を JavaCompute ノードで使用して、メッセージ・データを変換する例を示します。

JAXB を Java アプリケーションで使用すると、getter メソッドと setter メソッドを使用して Java オブジェクト・クラスを操作することができます。 このシナリオでは、送り状レコードを含む簡略化した販売エンベロープ・メッセージを、取引明細書レコードを含む処理済み販売メッセージに変換します。

入出力メッセージは、Message Broker ライブラリー内にある次の XML スキーマで定義されています。

  1. JavaComputeNodeJAXBSampleLibrary/SaleEnvelope.xsd
  2. JavaComputeNodeJAXBSampleLibrary/ProcessedSales.xsd
これらの XML スキーマ・ファイルは、WebSphere Message Broker に付属する JAXB 2.0 スキーマ・コンパイラーを使用して Java オブジェクト・クラスにバインドされています。これらのファイルは、Java プロジェクト「JavaComputeNodeJAXBSampleLibraryJava」に含まれています。

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 の使用を参照してください。

サンプルのホームに戻る