Symbol.FIELD, SecurityID.FIELD, SecurityIDSource.FIELD, Product.FIELD,
QuoteType.FIELD, OrderQty.FIELD, SettlDate.FIELD, QuotePriceType.FIELD,
ValidUntilTime.FIELD, ExpireTime.FIELD
};
Message message = new QuoteRequest(new QuoteReqID("20101110-2"));
Group group = new Group(NoRelatedSym.FIELD, Symbol.FIELD, order);
group.setField(new Symbol("TestSymbol"));
group.setField(new SecurityID("SecurityID"));
group.setField(new SecurityIDSource("SecurityIDSource"));
group.setField(new Product(11));
group.setField(new QuoteType(1));
group.setField(new OrderQty(500));
group.setField(new SettlDate("20151116"));
group.setField(new QuotePriceType(1));
group.setField(new ValidUntilTime(new Date()));
group.setField(new ExpireTime(new Date()));
message.addGroup(group);
System.out.println("Original Message: " + message);
MessageContext msgCtx = new MessageContext();
FIXUtils.getInstance().setSOAPEnvelope(message, 1, "TestSession", msgCtx);
OMElement msgElt = msgCtx.getEnvelope().getBody().getFirstElement();
OMElement groupsElt = msgElt.getFirstChildWithName(new QName(FIXConstants.FIX_BODY)).
getFirstChildWithName(new QName(FIXConstants.FIX_GROUPS));
int groupId = Integer.parseInt(groupsElt.getAttributeValue(
new QName(FIXConstants.FIX_FIELD_ID)));
assertEquals(groupId, group.getFieldTag());
// Test whether the fileds in the SOAP infoset are in the correct order
Iterator fields = groupsElt.getFirstElement().getChildrenWithName(
new QName(FIXConstants.FIX_FIELD));
List<Integer> fieldList = new ArrayList<Integer>();
while (fields.hasNext()) {
OMElement fieldElt = (OMElement) fields.next();
fieldList.add(Integer.parseInt(fieldElt.getAttributeValue(
new QName(FIXConstants.FIX_FIELD_ID))));
}
assertEquals(order.length, fieldList.size());
for (int i = 0; i < order.length; i++) {
assertEquals(order[i], (int) fieldList.get(i));
}
// Test whether the reconstructed message preserves the group field order
Message copy = FIXUtils.getInstance().createFIXMessage(msgCtx);
System.out.println("Reconstructed Message: " + copy);
List<Group> groups = copy.getGroups(NoRelatedSym.FIELD);
assertEquals(1, groups.size());
int[] copyOrder = groups.get(0).getFieldOrder();
assertEquals(order.length, copyOrder.length);
for (int i = 0; i < order.length; i++) {
assertEquals(order[i], copyOrder[i]);
}
assertEquals(message.toString(), copy.toString());
}