Index: src/test/java/quickfix/MessageTest.java =================================================================== --- src/test/java/quickfix/MessageTest.java (revision 620) +++ src/test/java/quickfix/MessageTest.java (working copy) @@ -24,58 +24,7 @@ import java.util.TimeZone; import junit.framework.TestCase; -import quickfix.field.AllocAccount; -import quickfix.field.AllocShares; -import quickfix.field.AvgPx; -import quickfix.field.BeginString; -import quickfix.field.BidType; -import quickfix.field.BodyLength; -import quickfix.field.CheckSum; -import quickfix.field.ClOrdID; -import quickfix.field.CountryOfIssue; -import quickfix.field.CrossID; -import quickfix.field.CrossPrioritization; -import quickfix.field.CrossType; -import quickfix.field.CumQty; -import quickfix.field.EncodedText; -import quickfix.field.EncodedTextLen; -import quickfix.field.EncryptMethod; -import quickfix.field.ExecID; -import quickfix.field.ExecType; -import quickfix.field.HandlInst; -import quickfix.field.Headline; -import quickfix.field.IOIid; -import quickfix.field.LeavesQty; -import quickfix.field.ListID; -import quickfix.field.ListSeqNo; -import quickfix.field.MsgDirection; -import quickfix.field.MsgSeqNum; -import quickfix.field.MsgType; -import quickfix.field.NoOrders; -import quickfix.field.OrdStatus; -import quickfix.field.OrdType; -import quickfix.field.OrderID; -import quickfix.field.OrderQty; -import quickfix.field.PartyID; -import quickfix.field.PartyIDSource; -import quickfix.field.PartyRole; -import quickfix.field.Price; -import quickfix.field.RawData; -import quickfix.field.RawDataLength; -import quickfix.field.RefMsgType; -import quickfix.field.SecureData; -import quickfix.field.SecurityID; -import quickfix.field.SecurityIDSource; -import quickfix.field.SecurityType; -import quickfix.field.SenderCompID; -import quickfix.field.SendingTime; -import quickfix.field.Side; -import quickfix.field.Symbol; -import quickfix.field.TargetCompID; -import quickfix.field.TotNoOrders; -import quickfix.field.TransactTime; -import quickfix.field.UnderlyingCurrency; -import quickfix.field.UnderlyingSymbol; +import quickfix.field.*; import quickfix.fix42.NewOrderSingle; import quickfix.fix43.NewOrderList; import quickfix.fix44.ExecutionReport; @@ -888,6 +837,42 @@ assertTrue("empty message contains no checksum", msg.toString().length() > 0); } + public void testInvalidFieldInGroup() throws Exception { + SecurityRequestResult resultCode = new SecurityRequestResult( + SecurityRequestResult.NO_INSTRUMENTS_FOUND_THAT_MATCH_SELECTION_CRITERIA); + + UnderlyingSymbol underlyingSymbolField = new UnderlyingSymbol("UND"); + SecurityReqID id = new SecurityReqID("1234"); + + quickfix.fix44.DerivativeSecurityList responseMessage = new quickfix.fix44.DerivativeSecurityList(); + responseMessage.setField(id); + responseMessage.setField(underlyingSymbolField); + responseMessage.setField(new SecurityResponseID("2345")); + Group optionGroup = new quickfix.fix44.DerivativeSecurityList.NoRelatedSym(); + optionGroup.setField(new Symbol("OPT+RQ")); + optionGroup.setField(new StringField(StrikePrice.FIELD, "10")); + // add invalid field for this FIX version + optionGroup.setField(new PutOrCall(PutOrCall.CALL)); + optionGroup.setField(new MaturityMonthYear("200802")); + responseMessage.addGroup(optionGroup); + + Group group2 = new quickfix.fix44.DerivativeSecurityList.NoRelatedSym(); + group2.setField(new Symbol("OPT+RB")); + group2.setField(new StringField(StrikePrice.FIELD, "10")); + group2.setField(new MaturityMonthYear("200802")); + responseMessage.addGroup(group2); + resultCode.setValue(SecurityRequestResult.VALID_REQUEST); + responseMessage.setField(resultCode); + System.out.println(responseMessage.toString()); + + DataDictionary dd = DataDictionaryTest.getDictionary(); + dd.validate(responseMessage, true); + + + Message msg2 = new Message(responseMessage.toString(), dd); + dd.validate(msg2, true); + } + private void assertHeaderField(Message message, String expectedValue, int field) throws FieldNotFound { assertEquals(expectedValue, message.getHeader().getString(field));