QuickFIX/J User FAQ

We get a lot of repeat questions on the mailing list. Here's a repository of answers.

How do I set username/password in my Logon message?

To set the username field in a Logon message, put something like this in your toAdmin() callback.

final String msgType = msg.getHeader().getString(MsgType.FIELD);
if(MsgType.LOGON.compareTo(msgType) == 0)
    msg.setString(quickfix.fields.Username.FIELD, _username);
    msg.setString(quickfix.fields.Password.FIELD, _password);

How do I regenerate/rebuild QF/J with a custom data dictionary?

I assume you've already checked out the latest source from the svn repo. You'll need ant installed.

QF/J generates the source from the DDs in core/src/main/resources. Make a back up of the one you're going to alter, and then alter it however you need to.

Then rebuild as follows:

I altered my data dictionary. Should I regenerate/rebuild QF/J?

It depends on how extensive your DD changes are.

If your DD changes aren't very extensive, maybe just a few field changes, then you don't really need to. If you added a whole new custom message type, then you probably should. If you changed field orders inside of repeating groups, then I recommend that you do, especially if those group changes are in outgoing messages.

Want more detail than this? Ok...

INCOMING MSGS: The DD xml file is critical for the engine to validate messages that you receive from the counterparty. When the engine parses messages, it exclusively uses this xml file; the generated java message classes aren't a factor here. When your user code is processing those messages, those message classes become relevant.

OUTGOING MSGS: The DD xml file is irrelevant when you construct outgoing messages. You can pretty much add whatever fields you want to messages using the generic field setters (setString, setInt, etc) and QF will let you. The only trouble is with repeating groups. QF will write repeating group element ordering according to the DD that was used for code generation. If you altered any groups that are part of outgoing messages, you DEFINITELY need to rebuild.

How do I rebuild QF/J?

You need `ant`.

This will rebuild the jars based on the DataDictionary files in `core\src\main\resources\`. To make DD customizations, change those files. Then run this command:

# The `version` argument is just a filename suffix
# The `skip.jalopy` argument is optional and will skip some time-consuming doc generation.
ant version=SOME_STRING -Dskip.jalopy=true clean jar

The new jars will be found in `quickfixj\core\target\`.

How do I create a repeating group for my custom group?

If you rebuilt QF/J with your custom data dictionary, there should be a class for your new group and you should do it like the documentation shows you:

If you did not rebuild QF/J and do not want to, you can use generic (non-typesafe) methods.

For example, say you have custom group with counter tag 9610, and delimiter tag 9611:

msg = your message of whatever type;
int[] order = [9611,9612,9613]; // syntax probably needs correction
quickfix.Grp grp = new quickfix.Group(9610,9611,order);
grp.setString (9610, "1" );
grp.setString (9611, "SHORT" );
msg.addGroup(grp); // add first group
grp.setString (9612, "3" );
grp.setString (9613, "SNOTE3" );
msg.addGroup(grp); // add second group

Compare this with the type-safe methods and you'll see it's pretty similar.