2

ドメイン POJO を QuickFixJ メッセージに変換するためのクラスを作成しようとしています。次のように新しい注文メッセージを作成しようとすると:

quickfix.fix44.NewOrderSingle order = new quickfix.fix44.NewOrderSingle();

次の例外がログにスローされます。

Exception Details:
Location:
  quickfix/fix44/NewOrderSingle.get(Lquickfix/field/SettlType;)Lquickfix/field/SettlType; @2: invokevirtual
Reason:
Type 'quickfix/field/SettlType' (current frame, stack[1]) is not assignable to 'quickfix/CharField'
Current Frame:
  bci: @2
  flags: { }
  locals: { 'quickfix/fix44/NewOrderSingle', 'quickfix/field/SettlType' }
  stack: { 'quickfix/fix44/NewOrderSingle', 'quickfix/field/SettlType' }
Bytecode:
  0000000: 2a2b b600 3057 2bb0                    

このエラーは、Fix Message Fields の 2 つのバージョンを一緒にマージしようとすると発生するようですが、私が知る限り、これを行っていません。QuickFixJ 単体テストで見つかったものと同じコードを使用しています。この例では、同じコードのバリエーションが機能します。これは、イニシエーター オブジェクトを介して接続が適用された後です。他のメッセージに追加する必要があるいくつかのフィールドが含まれているため、QuickFix-all.jar の代わりに apache.servicemix.bundles.quickfix を使用しています。

オブジェクトの単純なコンストラクターを呼び出せない理由がわかりません。jar のコンストラクターは次のとおりです。

public NewOrderSingle()
{
   getHeader().setField(new MsgType("D"));
}

私が考えていなかったこのエラーの別の原因はありますか? 私は困惑しています

4

1 に答える 1

2

この問題があり、QuickFIX 1.5.2 に戻す必要がありました

qf 1.6.0 および Java 1.8.0_45 を使用すると、quickfixj メッセージ ファクトリがオペランド スタックで不正な型を生成する

ユーザーグループによると、これは既知の問題です。添付の質問を参照してください...

于 2015-08-14T12:38:58.927 に答える