FIX message printer

本文介绍了一个用于打印FIX(Financial Information eXchange)协议消息的Java类实现。该类能够解析并打印FIX消息的头部、主体及尾部字段,同时支持处理消息中的组字段。通过Logger记录每个字段及其值,便于开发者调试和理解FIX消息结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import org.slf4j.Logger;
import quickfix.DataDictionary;
import quickfix.Field;
import quickfix.FieldMap;
import quickfix.FieldNotFound;
import quickfix.FieldType;
import quickfix.Group;
import quickfix.Message;
import quickfix.field.MsgType;
import java.util.Iterator;
public class FIXMsgPrinter {

   public static void print(Logger logger, DataDictionary dd, Message message) throws FieldNotFound {
      String msgType = message.getHeader().getString(MsgType.FIELD);
printFieldMap("", dd, msgType, message.getHeader(), logger);
printFieldMap("", dd, msgType, message, logger);
printFieldMap("", dd, msgType, message.getTrailer(), logger);
}

   private static void printFieldMap(String prefix, DataDictionary dd, String msgType, FieldMap fieldMap, Logger logger)
         throws FieldNotFound {

      Iterator fieldIterator = fieldMap.iterator();
      while (fieldIterator.hasNext()) {
         Field field = (Field) fieldIterator.next();
         if (!isGroupCountField(dd, field)) {
            String value = fieldMap.getString(field.getTag());
            if (dd.hasFieldValue(field.getTag())) {
               value = dd.getValueName(field.getTag(), fieldMap.getString(field.getTag())) + " (" + value + ")";
}
            logger.info(prefix + dd.getFieldName(field.getTag()) + ": " + value);
}
      }

      Iterator groupsKeys = fieldMap.groupKeyIterator();
      while (groupsKeys.hasNext()) {
         int groupCountTag = ((Integer) groupsKeys.next()).intValue();
logger.info(prefix + dd.getFieldName(groupCountTag) + ": count = "
+ fieldMap.getInt(groupCountTag));
Group g = new Group(groupCountTag, 0);
         int i = 1;
         while (fieldMap.hasGroup(i, groupCountTag)) {
            if (i > 1) {
               logger.info(prefix + "  ----");
}
            fieldMap.getGroup(i, g);
printFieldMap(prefix + "  ", dd, msgType, g, logger);
i++;
}
      }
   }

   private static boolean isGroupCountField(DataDictionary dd, Field field) {
      return dd.getFieldTypeEnum(field.getTag()) == FieldType.NumInGroup;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值