i posted the design since its a bit more complicated then my summarized version, but at any rate i will post the full solution for those who want to view either or...
basically this takes an XML field and creates an object Order which has some attributes plus an array of Line Item objects.
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.dom4j.Node;
import org.dom4j.Document;
public class SiebelOrder
{
private String accountId;
private String backOfficeOrderNumber;
private String contactFirstName;
private String contactId;
private String contactLastName;
private String currencyCode;
private String description;
private String entryAssociate;
private String legalEntity;
private String orderRevenue;
private String orderDate;
private String orderNumber;
private String orderType;
private String orderTypeId;
private String primaryOrganization;
private String primaryServiceRegion;
private String primaryShipToAddress;
private String PrimaryShipToAddressId;
private String PrimaryShipToCity;
private String PrimaryShipToCountry;
private String PrimaryShipToPostalCode;
private String PrimaryShipToState;
private String RegionAddress;
private String RegionAddressId;
private String RegionCity;
private String RegionCountry;
private String RegionPostalCode;
private String RegionState;
private String Revision;
private String SalesRecognizedDate;
private String status;
private String taxExempt;
private String taxExemptNumber;
private String taxExemptReason;
private SiebelLineItem[] lineItems;
protected SiebelOrder()
{
//default constructor
}
protected SiebelOrder(Node pOrderNode)
{
//gets the attribute by using an xpath query of the given node
accountId = pOrderNode.valueOf("//AccountId/text()");
backOfficeOrderNumber = pOrderNode.valueOf("//BackOfficeOrderNumber/text()");
contactFirstName = pOrderNode.valueOf("//ContactFirstName/text()");
contactId = pOrderNode.valueOf("//ContactId/text()");
contactLastName = pOrderNode.valueOf("//ContactLastName/text()");
currencyCode = pOrderNode.valueOf("//CurrencyCode/text()");
description = pOrderNode.valueOf("//Description/text()");
entryAssociate = pOrderNode.valueOf("//EntryAssociateEMP/text()");
legalEntity = pOrderNode.valueOf("//LegalntityEMP/text()");
orderRevenue = pOrderNode.valueOf("//OrderRevenueEMP/text()");
orderDate = pOrderNode.valueOf("//OrderDate/text()");
orderNumber = pOrderNode.valueOf("//OrderNumber/text()");
orderType = pOrderNode.valueOf("//OrderType/text()");
orderTypeId = pOrderNode.valueOf("//OrderTypeId/text()");
primaryOrganization = pOrderNode.valueOf("//PrimaryOrganization/text()");
primaryServiceRegion = pOrderNode.valueOf("//PrimaryServiceRegionEMP/text()");
primaryShipToAddress = pOrderNode.valueOf("//PrimaryShipToAddress/text()");
PrimaryShipToAddressId = pOrderNode.valueOf("//PrimaryShipToAddressId/text()");
PrimaryShipToCity = pOrderNode.valueOf("//PrimaryShipToCity/text()");
PrimaryShipToCountry = pOrderNode.valueOf("//PrimaryShipToCountry/text()");
PrimaryShipToPostalCode = pOrderNode.valueOf("//PrimaryShipToPostalCode/text()");
PrimaryShipToState = pOrderNode.valueOf("//PrimaryShipToState/text()");
RegionAddress = pOrderNode.valueOf("//RegionAddress/text()");
RegionAddressId = pOrderNode.valueOf("//RegionAddressId/text()");
RegionCity = pOrderNode.valueOf("//RegionCity/text()");
RegionCountry = pOrderNode.valueOf("//RegionCountry/text()");
RegionPostalCode = pOrderNode.valueOf("//RegionPostalCode/text()");
RegionState = pOrderNode.valueOf("//RegionState/text()");
Revision = pOrderNode.valueOf("//RegionRevision/text()");
SalesRecognizedDate = pOrderNode.valueOf("//SalesRecognizedDateEMP/text()");
status = pOrderNode.valueOf("//Status/text()");
taxExempt = pOrderNode.valueOf("//TaxExempt/text()");
taxExemptNumber = pOrderNode.valueOf("//TaxExemptNumber/text()");
taxExemptReason = pOrderNode.valueOf("//TaxExemptReason/text()");
// -- create line items --
//queries the order node using xpath and returns it as a list of line item nodes
List lineItemList = pOrderNode.selectNodes("//OrderEntry-LineItemsEmp");
//sizes the array to the number of line items
lineItems = new SiebelLineItem[lineItemList.size()];
//update the array to be a list of blank lineitems
for(int i=0; i < lineItemList.size(); i++)
lineItems[i] = new SiebelLineItem();
//store the lineitem details in each array item
int i = 0;
for (Iterator iter = lineItemList.iterator(); iter.hasNext(); )
{
Node lineItemNode = (Node) iter.next();
// ALL lineItems[i] ARE THE SAME VALUE
lineItems[i].setLineDetails(lineItemNode);
i++;
}
}
}
import java.util.HashMap;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.Node;
public class SiebelLineItem
{
private String actualSalesPrice;
private String costProduct;
private String ESRPLabor;
private String inactiveFlag;
private String installationMethod;
private String integrationId;
private String laborOptionFlag;
private String lineItemType;
private String lineNumber;
private String lineSequenceNumber;
private String lineStatus;
private String orderHeaderId;
private String product;
private String productId;
private String productSeries;
private String productStyle;
private String servicePartFlag;
private String taxRate;
private String taxType;
private String UOMLine;
private String UOMQuantity;
private String vendorCode;
private String vendorName;
protected SiebelLineItem()
{
//default constructor
}
protected void setLineDetails(Node pLineItemNode)
{
//gets the attribute by using an xpath query of the given node
actualSalesPrice = pLineItemNode.valueOf("//ActualSalesPriceEMP/text()");
costProduct = pLineItemNode.valueOf("//CostProductEMP/text()");
ESRPLabor = pLineItemNode.valueOf("//ESRPLaborEMP/text()");
inactiveFlag = pLineItemNode.valueOf("//InactiveFlagEMP/text()");
installationMethod = pLineItemNode.valueOf("//InstallationMethodEMP/text()");
integrationId = pLineItemNode.valueOf("//IntegrationIdEMP/text()");
laborOptionFlag = pLineItemNode.valueOf("//LaborOptionFlagEMP/text()");
lineItemType = pLineItemNode.valueOf("//LineItemTypeEMP/text()");
lineNumber = pLineItemNode.valueOf("//LineNumberEMP/text()");
lineSequenceNumber = pLineItemNode.valueOf("//LineSequenceNumberEMP/text()");
lineStatus = pLineItemNode.valueOf("//LineStatusEMP/text()");
orderHeaderId = pLineItemNode.valueOf("//OrderHeaderId/text()");
product = pLineItemNode.valueOf("//Product/text()");
productId = pLineItemNode.valueOf("//ProductId/text()");
productSeries = pLineItemNode.valueOf("//ProductSeriesEMP/text()");
productStyle = pLineItemNode.valueOf("//ProductStyleEMP/text()");
servicePartFlag = pLineItemNode.valueOf("//ServicePartFlagEMP/text()");
taxRate = pLineItemNode.valueOf("//TaxRateEMP/text()");
taxType = pLineItemNode.valueOf("//TaxTypeEMP/text()");
UOMLine = pLineItemNode.valueOf("//UOMLineEMP/text()");
UOMQuantity = pLineItemNode.valueOf("//UOMQuantityEMP/text()");
vendorCode = pLineItemNode.valueOf("//VendorCodeEMP/text()");
vendorName = pLineItemNode.valueOf("//VendorNameEMP/text()");
}
}