[
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.