2017-02-16 4 views
0

Ich bin ein Neuling mit einer schnellen Lösung, aber vertrau mir, ich habe alle Foren gründlich durchsucht und habe nicht die Lösung für dieses Szenario gefunden. Ich benutze Quick Fix 1.6 libs. Ich habe eine FIX-Nachricht, die eine sich wiederholende Gruppe hat. Wenn ich diese Nachricht mit der sendToTarget() - Methode sende, wird die Nachricht ohne Probleme an den FIX-Server weitergeleitet, aber die Felder werden neu geordnet, weshalb Exchange sie zurückweist. Als ich die Beiträge gelesen habe, habe ich erfahren, dass das Problem mit dem Wörterbuch gelöst wird. Aber wenn ich Data Dictionary mit der gleichen Nachricht verwende, bekomme ich "Quick Fix.InvalidMessage: Gleichheitszeichen nicht im Feld gefunden" Ausnahme. Ich weiß, dass es eine gültige Nachricht gemäß dem Data Dictionary ist. Unten sind die Nachricht und der Code. Kann mir bitte jemand helfen. Danke im Voraus.quickfix.InvalidMessage Ausnahme sogar mit gültiger Nachricht

FIX Nachricht: 8 = FIXT.1.1 | 9 = 00331 | 35 = AE | 49 = AAA_FIX | 56 = BBB_FIX | 34 = 29 | 52 = 20.170.124 bis 09: 47: 14 | 1041 firm_trade_id_07 = | 48 = XS0102233434 | 22 = 4 | 25004 = GBP | 470 = ZZ | 32 = 100 | 31 = 6,33 | 15 = GBP | 64 = 20170125 | 60 = 20170124-09: 47: 14 | 1430 = O | 574 = 1 | 487 = 0 | 552 = 2 | 54 = 1 | 528 = P | 29 = 4 | 581 = 3 | 453 = 1 | 448 = H7XNBB4851XX0REQ1F70 | 447 = N | 452 = 1 | 54 = 2 | 453 = 1 | 448 = 549300F2CCROIO4RRZ97 | 447 = N | 452 = 17 | 10 = 189 |


Code:

BufferedReader reader = new BufferedReader(new FileReader ("Message.txt")); 
String line = null; 
StringBuilder stringBuilder = new StringBuilder(); 
String ls = System.getProperty("line.separator"); 

while((line = reader.readLine()) != null) { 
    stringBuilder.append(line); 
    stringBuilder.append(ls); 
} 

String messageString = stringBuilder.toString(); 
messageString = messageString.replace('|','\u0001'); 
Message FIXOrder = new Message(messageString, new DataDictionary("DD.xml")); 

-Cheers MJ

+0

Welche Nachbestellung findet statt? Tags innerhalb einer Wiederholungsgruppe müssen in einer festen Reihenfolge sein. – user1717259

+0

Tags werden in aufsteigender Reihenfolge neu geordnet, wenn DataDictionary nicht verwendet wird. Und es schlägt mit dem obigen Fehler fehl, wenn DataDictionary verwendet wird. –

+1

Diese Analyse ist in dem von Ihnen bereitgestellten Beispiel problemlos möglich. Daher vermute ich, dass sich das Problem in Ihrer Datei Message.txt befindet. Könnten Sie bitte ein System.out.println (messageString) hinzufügen? damit wir wirklich wissen, welcher String geparst wird? Zwei andere Bemerkungen: * die Art, wie Sie die Datei lesen, sieht seltsam aus, was ist der Zweck von stringBuilder.append (ls); in deiner Schleife? * Die Wiederholungsgruppe 453 erscheint zweimal in Ihrer FIX-Nachricht. Es sollte einmal wie folgt erscheinen: 453 = 2 | 448 = H7XNBB4851XX0REQ1F70 | 447 = N | 452 = 1 | 448 = 549300F2CCROIO4RRZ97 | 447 = N | 452 = 17 | –

Antwort

1

hatte ich die gleiche Ausnahme und es geschafft hatte, die Ursache zu finden.

Am wahrscheinlichsten ergibt es sich aus der Tatsache, dass die FIX-Nachrichtenzeichenfolge aus der Datei geladen wurde und möglicherweise: \n oder \r\n am Ende der Zeichenfolge.

Dann .... beim Parsen des "Trailers" scheitern die letzten Zeichen, weil die = nicht gefunden wird.

Equal sign not found in field

Versuch: public static final String NEW_LINE = System.getProperty("line.separator");

  1. Entfernen Sie alle Line-seperators: String msgText= loadedText.replace(NEW_LINE, "");
  2. Änderung Trennzeichen SOH (falls erforderlich) msgText = msgText.replace(';', '\001');
  3. Dann nutzen Sie die Quickfix vonString: message.fromString(msgText, dataDictionary, false);
Verwandte Themen