2015-04-22 18 views
5

Ho implementato un programma Java che utilizza QuickFIX/J (versione 1.6.0). Si riceve un messaggio FIX (relazione di esecuzione) dalla controparte alle NoPartyIDs gruppo ripetuto (Tag 453) con i seguenti valoriQuickFIX/J Valore di errore fuori intervallo per questo tag

(Tag 453) NoPartyIDs = 4 

(Tag 447) PartyIDSource = D 
(Tag 448) Party ID = XXX 
(Tag 452) PartyRole = 1 

(Tag 447) PartyIDSource = D 
(Tag 448) Party ID = XXX 
(Tag 452) PartyRole = 66 

(Tag 447) PartyIDSource = D 
(Tag 448) Party ID = XXX 
(Tag 452) PartyRole = 55 
(Tag 802) NoPartySubIDs = 1 

(Tag 447) PartyIDSource = D 
(Tag 448) Party ID = XXX 
(Tag 452) PartyRole = 7 

Screenshot da questa parte del messaggio: enter image description here

Il mio programma invia automaticamente un messaggio di rifiuto con

(Tag 58) Text = "Value is incorrect (out of range) for this tag" 
(Tag 371) RefTagID = 452 
(Tag 373) SessionRejectReason = 5 

Screentshot da tutta risposta: enter image description here

Ora, mi chiedo, perché il mio programma reagisce in questo modo quando ha ricevuto il messaggio FIX. Perché i valori del messaggio relativi al tag 452 PartyRole non sono fuori intervallo (look here for the documentation) o ?!

Il file sorgente della realizzazione QuickFix/J dovrebbe anche conoscere questi valori .. Qui la fonte:

/* Generated Java Source File */ 
/******************************************************************************* 
* Copyright (c) quickfixengine.org All rights reserved. 
* 
* This file is part of the QuickFIX FIX Engine 
* 
* This file may be distributed under the terms of the quickfixengine.org 
* license as defined by quickfixengine.org and appearing in the file 
* LICENSE included in the packaging of this file. 
* 
* This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING 
* THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A 
* PARTICULAR PURPOSE. 
* 
* See http://www.quickfixengine.org/LICENSE for licensing information. 
* 
* Contact [email protected] if any conditions of this licensing 
* are not clear to you. 
******************************************************************************/ 

package quickfix.field; 

import quickfix.IntField; 


public class PartyRole extends IntField { 

    static final long serialVersionUID = 20050617; 

    public static final int FIELD = 452; 
    public static final int EXECUTING_FIRM = 1; 
    public static final int BROKER_OF_CREDIT = 2; 
    public static final int CLIENT_ID = 3; 
    public static final int CLEARING_FIRM = 4; 
    public static final int INVESTOR_ID = 5; 
    public static final int INTRODUCING_FIRM = 6; 
    public static final int ENTERING_FIRM = 7; 
    public static final int LOCATE_LENDING_FIRM = 8; 
    public static final int FUND_MANAGER_CLIENT_ID = 9; 
    public static final int SETTLEMENT_LOCATION = 10; 
    public static final int ORDER_ORIGINATION_TRADER = 11; 
    public static final int EXECUTING_TRADER = 12; 
    public static final int ORDER_ORIGINATION_FIRM = 13; 
    public static final int GIVEUP_CLEARING_FIRM = 14; 
    public static final int CORRESPONDANT_CLEARING_FIRM = 15; 
    public static final int EXECUTING_SYSTEM = 16; 
    public static final int CONTRA_FIRM = 17; 
    public static final int CONTRA_CLEARING_FIRM = 18; 
    public static final int SPONSORING_FIRM = 19; 
    public static final int UNDERLYING_CONTRA_FIRM = 20; 
    public static final int CLEARING_ORGANIZATION = 21; 
    public static final int EXCHANGE = 22; 
    public static final int CUSTOMER_ACCOUNT = 24; 
    public static final int CORRESPONDENT_CLEARING_ORGANIZATION = 25; 
    public static final int CORRESPONDENT_BROKER = 26; 
    public static final int BUYER_SELLER = 27; 
    public static final int CUSTODIAN = 28; 
    public static final int INTERMEDIARY = 29; 
    public static final int AGENT = 30; 
    public static final int SUB_CUSTODIAN = 31; 
    public static final int BENEFICIARY = 32; 
    public static final int INTERESTED_PARTY = 33; 
    public static final int REGULATORY_BODY = 34; 
    public static final int LIQUIDITY_PROVIDER = 35; 
    public static final int ENTERING_TRADER = 36; 
    public static final int CONTRA_TRADER = 37; 
    public static final int POSITION_ACCOUNT = 38; 
    public static final int CONTRA_INVESTOR_ID = 39; 
    public static final int TRANSFER_TO_FIRM = 40; 
    public static final int CONTRA_POSITION_ACCOUNT = 41; 
    public static final int CONTRA_EXCHANGE = 42; 
    public static final int INTERNAL_CARRY_ACCOUNT = 43; 
    public static final int ORDER_ENTRY_OPERATOR_ID = 44; 
    public static final int SECONDARY_ACCOUNT_NUMBER = 45; 
    public static final int FORIEGN_FIRM = 46; 
    public static final int THIRD_PARTY_ALLOCATION_FIRM = 47; 
    public static final int CLAIMING_ACCOUNT = 48; 
    public static final int ASSET_MANAGER = 49; 
    public static final int PLEDGOR_ACCOUNT = 50; 
    public static final int PLEDGEE_ACCOUNT = 51; 
    public static final int LARGE_TRADER_REPORTABLE_ACCOUNT = 52; 
    public static final int TRADER_MNEMONIC = 53; 
    public static final int SENDER_LOCATION = 54; 
    public static final int SESSION_ID = 55; 
    public static final int ACCEPTABLE_COUNTERPARTY = 56; 
    public static final int UNACCEPTABLE_COUNTERPARTY = 57; 
    public static final int ENTERING_UNIT = 58; 
    public static final int EXECUTING_UNIT = 59; 
    public static final int INTRODUCING_BROKER = 60; 
    public static final int QUOTE_ORIGINATOR = 61; 
    public static final int REPORT_ORIGINATOR = 62; 
    public static final int SYSTEMATIC_INTERNALISER = 63; 
    public static final int MULTILATERAL_TRADING_FACILITY = 64; 
    public static final int REGULATED_MARKET = 65; 
    public static final int MARKET_MAKER = 66; 
    public static final int INVESTMENT_FIRM = 67; 
    public static final int HOST_COMPETENT_AUTHORITY = 68; 
    public static final int HOME_COMPETENT_AUTHORITY = 69; 
    public static final int COMPETENT_AUTHORITY_OF_THE_MOST_RELEVANT_MARKET_IN_TERMS_OF_LIQUIDITY = 70; 
    public static final int COMPETENT_AUTHORITY_OF_THE_TRANSACTION = 71; 
    public static final int REPORTING_INTERMEDIARY = 72; 
    public static final int EXECUTION_VENUE = 73; 
    public static final int MARKET_DATA_ENTRY_ORIGINATOR = 74; 
    public static final int LOCATION_ID = 75; 
    public static final int DESK_ID = 76; 
    public static final int MARKET_DATA_MARKET = 77; 
    public static final int ALLOCATION_ENTITY = 78; 

    public PartyRole() { 
     super(452); 
    } 

    public PartyRole(int data) { 
     super(452, data); 
    } 

} 

Forse hai avuto un problema simile o vedere il mio errore ..

Grazie per il tuo aiuto ragazzi !!!

+0

Si sta utilizzando 'DataDictionary' e le configurazioni corrette? Questi valori sono definiti nel tuo DataDictionary? Lo stesso problema qui sembra http://quickfix-j.364392.n2.nabble.com/Value-is-incorrect-out-of-range-for-this-tag-371-35-td3050411.html – DumbCoder

+0

hey! Sì, sto usando un 'DataDictionary'. La definizione del messaggio contiene un '' e questo è il campo che causa i problemi. Ma l'intervallo dei suoi valori non è definito in questo file xml ma nel file Java, o ?! – mrbela

risposta

7

C'è un campo PartyRole=66 in ExecutionReport, che non è un valore valido per PartyRole in FIX 4.4 (il messaggio di rifiuto ha 8=FIX.4.4). Il link alla documentazione che pubblichi è per FIX 5.0 SP2.

Se la controparte invia valori di PartyRole non supportati in FIX 4.4, si potrebbe prendere in considerazione la creazione di un dizionario dati separato per supportarli per questa particolare controparte.

+0

Modificato il collegamento al collegamento FIXIMATE 4.4 invece del collegamento OnixBiz a PartyRole. –

+0

Questo era il problema! Grazie!!! Sto usando il campo nella versione 4.4 ma la controparte lo invia nella versione 5.0! I diversi valori possibili in entrambe le versioni riguardanti il ​​tag 452 causano il problema! – mrbela

+0

@mrbela Suppongo che proverai a creare un dizionario dati separato per questa controparte? –

Problemi correlati