Как удалить поле BodyLength (тег 9) или CheckSum (тег 10) с помощью Quickfixj

Я новичок как в quickfix, так и в java.

Обычно, когда я хочу удалить поле в быстром сообщении, я использую метод removeField с тегом в качестве аргумента, но, похоже, это не работает с двумя автоматически сгенерированными полями: BodyLength (тег 9) и CheckSum (тег 10). ).

Например, я создал сообщение, затем печатаю.

System.out.println(message)

дает

8=FIX.4.29=8635=149=WFSComp23452=20130613-21:45:22.28256=ClientComp1234109=по умолчанию112=по умолчанию10=067

затем я удаляю поле, скажем, номер тега 8, со следующим

message.getHeader().removeField(8);

и снова распечатать, я получаю

9=7435=149=WFSComp23452=20130613-22:06:32.81956=ClientComp1234112=по умолчанию10=105

где поле удалено, но когда я пытаюсь удалить тег 9 таким же образом:

message.getHeader().removeField(9);

вывод, когда я печатаю, дает тот же код без удаления поля:

9=7435=149=WFSComp23452=20130613-22:06:32.81956=ClientComp1234112=default10=105

поле 9 все еще там!

Я предполагаю, что это потому, что quickfix автоматически генерирует длину тела, но как ее удалить? Спасибо.

Ссылки на быстрый ремонт:

javadoc: http://www.quickfixj.org/quickfixj/javadoc/1.5.3/

http://www.quickfixj.org/


person raj rajaratnam    schedule 13.06.2013    source источник


Ответы (1)


Да, QuickFIX автоматически генерирует длину тела и контрольную сумму.

Я не могу представить, почему вы думаете, что вам нужно удалить эти поля, но если вы действительно хотите, чтобы строка сообщения была удалена с этими полями, вы можете забить ее с помощью регулярного выражения, примененного постфактум:

message.toString().replaceAll("\09=[0-9]*","").replaceAll("\010=[0-9]*","")

Но опять же, я не вижу веских причин для этого.

person Grant Birchmeier    schedule 14.06.2013
comment
Большое спасибо. Я тоже не знаю, это для задания - person raj rajaratnam; 14.06.2013