/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.synapse.transport.fix; import junit.framework.TestCase; import org.apache.axiom.om.OMElement; import org.apache.axis2.context.MessageContext; import quickfix.Group; import quickfix.Message; import quickfix.field.*; import quickfix.fix44.QuoteRequest; import javax.xml.namespace.QName; import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.List; public class FieldOrderingTest extends TestCase { public void testRepeatingGroupOrdering() throws IOException { int order[] = new int[] { 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()); } }