[QFJ-855] Change packaging strategy for quickfixj-messages-fix[40|41|42|43|44|50|50sp1|50sp2|t11] modules to prevent VerifyError Created: 17/Jul/15  Updated: 21/Apr/16  Resolved: 22/Mar/16

Status: Closed
Project: QuickFIX/J
Component/s: None
Affects Version/s: 1.6.0
Fix Version/s: 1.6.2

Type: Bug Priority: Default
Reporter: ManuReno Assignee: ManuReno
Resolution: Fixed Votes: 2
Labels: None

Issue Links:
Relates
relates to QFJ-832 Multi-Version support is busted in 1.6.0 Closed
relates to QFJ-845 Change packaging strategy of quickfix... Closed
relates to QFJ-861 OutOfMemoryError with using DefaultMe... Closed

 Description   

Classes generated & compiled from single FIXxx dictionaries may conflict with classes used to compile the core module resulting in VerifyError at runtime.

The aim of this ticket is to package the quickfixj-messages-fix99 jars out of the messages-all compilation result to ensure the same .class files are used between all modules.
This should allow to use these jars without facing VerifyError with the following limitations :

  • The new jar will be different from what could be obtained by generating out of a single dictionary
  • The */field/* package contain the fields from all the fix dictionaries documented in QuickFixJ

This packaging strategy is a bit unusual and has some limitations but may temporary solve the VerifyError issue for someone who doesn't want to use the messages-all jar.



 Comments   
Comment by Christoph John [ 17/Jul/15 ]

Is this a follow-up to QFJ-845? So the VerifyError does still occur when not using the messages-all.jar after QFJ-845 has been solved?

Comment by ManuReno [ 17/Jul/15 ]

This is indeed a followup as QFJ-845 fixes the issue only for the messages-all module.

Comment by ManuReno [ 27/Jul/15 ]

Pull request submitted,

Observations showed that fix50 and fixt11 specifications are required by the core module at compile time, the recommended classpath when using individual dictionaries is thus :
quickfixj-core.jar;quickfixj-messages-fix50.jar;quickfixj-messages-fixt11;[then other dictionaries]

Comment by Christoph John [ 17/Aug/15 ]

Do you mean the classpath at runtime or compile time?

Comment by Tamas [ 18/Feb/16 ]

Is there a possibility of fixing this? It is not feasible to have to use quickfixj-all which is a 20MB+ behemoth if all one needs is quickfixj-core and quickfixj-message-fix44 for example.

Additionally, the source/jar packaging is screwed up.
It looks like most fields are defined in quickfixj-core, however their source equivalents are in quickfixj-messages-fix44. Because of this you cannot get the source working automatically from maven/gradle.

See for example QuoteReqID.

  • quickfixj-core-1.6.1.jar/quickfix/field/ has QuoteReqID.class
  • quickfixj-core-1.6.1-sources.jar/quickfix/field/ is empty
  • quickfixj-messages-fix44-1.6.1.jar/quickfix/field/ is empty
  • quickfixj-messages-fix44-1.6.1-sources.jar/quickfix/field/ has QuoteReqID.java
Comment by Christoph John [ 14/Mar/16 ]

Hi Tamas,

https://github.com/quickfix-j/quickfixj/pull/31 has now been merged into trunk and 1.6.x branch. If you like you could test if this resolves your problem:
https://oss.sonatype.org/content/repositories/snapshots/org/quickfixj/quickfixj-distribution/1.6.2-SNAPSHOT/quickfixj-distribution-1.6.2-20160314.154317-15-bin.zip

I think the source packaging is another story. Please open a separate issue for this.

Thanks,
Chris.

Generated at Sun Apr 28 21:48:06 UTC 2024 using JIRA 7.5.2#75007-sha1:9f5725bb824792b3230a5d8716f0c13e296a3cae.