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

Reply via email to