[ https://issues.apache.org/activemq/browse/CAMEL-1350?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=51820#action_51820 ]
Bengt Rodehav commented on CAMEL-1350: -------------------------------------- Hello! My name is Bengt Rodehav and I am very interested in the camel-quickfix component. I have been trying out the camel-fix component and have found a number of errors and deficiencies in that component. I have posted my findings at http://fusesource.com/forums/thread.jspa?threadID=787&tstart=0. I think Anton Arhipov used some of the code I posted in his camel-quickfix component at Google code. I am now pleased to see that the camel-quickfix component seems to be back at Apache Camel (where I think it should be) and that it seems to be included in Camel 2.0. That is good news indeed. I haven't had time to test the new camel-quickfix component that much but I have still found a number of issues. I have written about them at the URL I mentioned above. So far I've found the following issues/questions: - The serious error I found in the camel-fix component seems to be back. If I throw an exception somewhere in my route, it is critical that this exceptions makes it all the way back to the QuickfixApplication.fromApp() method. The way I solved this before is to, in the QuickfixEndpoint.onMessage() method, inspect the exchange after it has been processed and throw any exception that might be attached to the exchange. The reason why this is critical is that if no exception is thrown to the fromApp() method, then QuickFix/J thinks that the message was handled properly. In case of a runtime exception, QuickFix/J will request a resend of the message. In case of any of the checked exceptions, QuickFix/J other error handling routines will kick in. If exceptions don't make it all the way back to fromApp() then QuickFix/J's error handling will be circumvented. This makes it impossible to use camel-quickfix for production purposes. - In real scenarious, user and password is required. This must be attached in the fromAdmin() method if the message type is LOGON. I've posted examples on how to do this. I cannot see how you intend to pass user/password on to QuickFix/J. Is this something you have forgotten or is there a way to do this? - You don't seem to enable Jmx. This must be enabled in production mode - or at least it must be possible to enable it. - Is there a way to configure what message store to use? - Is there a way to configure what log factory to use? - Anton mentioned: "Configuring the quickfixj (logging factory/ message store/ etc) resources should be done via URIs. I will add that very soon." Has this been implemented? - I have recently found another problem with QuickFix/J. When constructing a Message from a String, it is not enough to specify the string containing the message, a data dictionary must also be specified in order for QuickFix/J to work properly with FIX repeating groups. I e the following is not enough: public static Message convert(String data) throws IOException, InvalidMessage, ConfigError { return new Message(data); } Instead the following must be done: public static Message convert(String data) throws IOException, InvalidMessage, ConfigError { return new Message(data, new DataDictionary("FIX44.xml")); } Here I hardoced "FIX44.xml". Of course the data dictionary to use should be the dictionary attached to the Session. I'm not sure how to accomplish this. camel-quickfix contains a converter with the following signature: public static Message convert(InputStream in, Exchange exchange) throws IOException, InvalidMessage This converter must be modified to specify the correct data dictionary. Perhaps it could be embedded in the exchange somehow? I'm really looking forward to see (a fully working...) camel-quickfix in the next Camel release. Thanks, /Bengt > camel-quickfix component in apache camel distribution > ----------------------------------------------------- > > Key: CAMEL-1350 > URL: https://issues.apache.org/activemq/browse/CAMEL-1350 > Project: Apache Camel > Issue Type: Bug > Environment: <properties> > <camel-version>2.0-SNAPSHOT</camel-version> > <fuse-version>2.x-fuse-SNAPSHOT</fuse-version> > <activemq-version>5.2.0</activemq-version> > <quickfix-version>1.3.3</quickfix-version> > <mina-version>1.1.0</mina-version> > <slf4j-version>1.5.6</slf4j-version> > </properties> > Reporter: Charles Moulliard > Assignee: Willem Jiang > Fix For: 2.1.0 > > Attachments: camel-quickfix.patch, camel-quickfix.zip, > camel-quickfix.zip, QuickFixDataFormat.java, reportincident.quickfix.zip > > > Hi, > ATTENTION: Ignoring converter type: org.apache.camel.fix.FixConverter as a > dependent class could not be found: java.lang.NoClassDefFoundError: > biz/c24/io/api/data/DataType > java.lang.NoClassDefFoundError: biz/c24/io/api/data/DataType > at java.lang.Class.getDeclaredMethods0(Native Method) > at java.lang.Class.privateGetDeclaredMethods(Class.java:2427) > at java.lang.Class.getDeclaredMethods(Class.java:1791) > at > org.apache.camel.impl.converter.AnnotationTypeConverterLoader.loadConverterMethods(AnnotationTypeConverterLoader.java:147) > at > org.apache.camel.impl.converter.AnnotationTypeConverterLoader.load(AnnotationTypeConverterLoader.java:78) > at > org.apache.camel.impl.converter.DefaultTypeConverter.checkLoaded(DefaultTypeConverter.java:260) > at > org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:95) > at > org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:71) > at > org.apache.camel.util.IntrospectionSupport.convert(IntrospectionSupport.java:263) > at > org.apache.camel.util.IntrospectionSupport.setProperty(IntrospectionSupport.java:221) > at > org.apache.camel.util.IntrospectionSupport.setProperties(IntrospectionSupport.java:188) > at > org.apache.camel.impl.DefaultComponent.setProperties(DefaultComponent.java:213) > at > org.apache.camel.component.file.GenericFileComponent.createEndpoint(GenericFileComponent.java:63) > at > org.apache.camel.component.file.GenericFileComponent.createEndpoint(GenericFileComponent.java:33) > at > org.apache.camel.impl.DefaultComponent.createEndpoint(DefaultComponent.java:81) > at > org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:330) > at > org.apache.camel.util.CamelContextHelper.getMandatoryEndpoint(CamelContextHelper.java:54) > at org.apache.camel.model.RouteType.resolveEndpoint(RouteType.java:96) > at > org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:106) > at > org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:112) > at org.apache.camel.model.FromType.resolveEndpoint(FromType.java:72) > at > org.apache.camel.impl.DefaultRouteContext.getEndpoint(DefaultRouteContext.java:81) > at org.apache.camel.model.RouteType.addRoutes(RouteType.java:239) > at org.apache.camel.model.RouteType.addRoutes(RouteType.java:86) > at > org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:661) > at > org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:651) > at > org.apache.camel.spring.SpringCamelContext.maybeDoStart(SpringCamelContext.java:166) > at > org.apache.camel.spring.SpringCamelContext.doStart(SpringCamelContext.java:161) > at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:49) > at > org.apache.camel.spring.SpringCamelContext.maybeStart(SpringCamelContext.java:96) > at > org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:115) > at > org.springframework.context.event.SimpleApplicationEventMulticaster$1.run(SimpleApplicationEventMulticaster.java:78) > at > org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:49) > at > org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:76) > at > org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:274) > at > org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:736) > at > org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:383) > at > org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) > at > org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93) > at > org.apache.camel.spring.Main.createDefaultApplicationContext(Main.java:232) > at org.apache.camel.spring.Main.doStart(Main.java:186) > at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:49) > at org.apache.camel.util.MainSupport.run(MainSupport.java:121) > at org.apache.camel.util.MainSupport.run(MainSupport.java:299) > at org.apache.camel.spring.Main.main(Main.java:98) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) > at org.apache.camel.maven.RunMojo$1.run(RunMojo.java:396) > at java.lang.Thread.run(Thread.java:619) > The org.apache.camel.fix.FixConverter class uses proprietary classes : > import biz.c24.io.api.data.BooleanDataType; > import biz.c24.io.api.data.CharDataType; > import biz.c24.io.api.data.ComplexDataObject; > import biz.c24.io.api.data.ComplexDataType; > import biz.c24.io.api.data.DataType; > import biz.c24.io.api.data.DateDataType; > import biz.c24.io.api.data.Element; > import biz.c24.io.api.data.IntDataType; > import biz.c24.io.api.data.NumberDataType; > import biz.c24.io.api.data.StringDataType; > import biz.c24.io.api.presentation.TextualSource; > import biz.c24.io.fix42.NewOrderSingleElement; > Except if those classes are part of open source community but How can I use > this component without Artix Data Service ? > ex config : > <route> > <from uri="fixserver:banzai-to-camel.cfg" /> > <to uri="log:quickfix" /> > </route> -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.