On Mon, Dec 29, 2008 at 11:08 AM, Ganesh_Progress <[email protected]> wrote:
>
> Hi,
>
> I am new to the Camel world and am trying to learn the behavior of the
> aggregator pattern.
>
> I have created a camel configuration with aggregator pattern with file
> endpoints.
>
> I got the following consistent error when I tried to run the created the
> configuration. java.io.FileNotFoundException.
>
> Exception:
> Caused by: java.io.FileNotFoundException:
> D:\FuseEclipse3.4.1\runtime-New_configuration(2)\Fuse\Aggregator\out\Copy of
> Sample.xml (The system cannot find the file specified)
>
> at java.io.FileInputStream.open(Native Method)
>
> at java.io.FileInputStream.<init>(Unknown Source)
>
> at java.io.FileInputStream.<init>(Unknown Source)
>
> at sun.net.www.protocol.file.FileURLConnection.connect(Unknown Source)
>
> at sun.net.www.protocol.file.FileURLConnection.getInputStream(Unknown
> Source)
>
> at
> com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(Unknown
> Source)
>
> at
> com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(Unknown
> Source)
>
> at
> com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown
> Source)
>
> at
> com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown
> Source)
>
> at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown
> Source)
>
> at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown
> Source)
>
> at
> com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown
> Source)
>
> at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
>
> at
> org.apache.camel.converter.jaxp.XmlConverter.toDOMDocument(XmlConverter.java:528)
>
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>
> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>
> at java.lang.reflect.Method.invoke(Unknown Source)
>
> at
> org.apache.camel.util.ObjectHelper.invokeMethod(ObjectHelper.java:434)
>
> ... 12 more
>
>
> Following is the Camel Configuration, for which I got the "file not found
> exception".
>
> <beans xmlns="http://www.springframework.org/schema/beans"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
> http://www.springframework.org/schema/beans
> http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
> http://activemq.apache.org/camel/schema/spring
> http://activemq.apache.org/camel/schema/spring/camel-spring.xsd"><camelContext
> id="camelroute" xmlns="http://activemq.apache.org/camel/schema/spring">
> <route xmlns="http://activemq.apache.org/camel/schema/spring">
> <from
> uri="file:///D:/FID_341/runtime-New_configuration/FuseFIDCamel/Aggregator/in"
> id="Camel_File_2"/>
> <aggregator batchTimeout="3000" batchSize="2" id="Camel_Aggregator_4">
> <xpath>/Persons/Person/Name</xpath>
> <to
> uri="file:///D:/FID_341/runtime-New_configuration/FuseFIDCamel/Aggregator/out"
> id="Camel_File_6"/>
> </aggregator>
> </route>
> </camelContext></beans>
>
>
> Finally I could find the workaround to overcome the issue. I could made it
> successfully running by modifying the From URI by adding the "?noop=true" at
> the end.
>
> Below is the camel configuration, which I run successfully.
>
> <beans xmlns="http://www.springframework.org/schema/beans"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
> http://www.springframework.org/schema/beans
> http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
> http://activemq.apache.org/camel/schema/spring
> http://activemq.apache.org/camel/schema/spring/camel-spring.xsd"><camelContext
> id="camelroute" xmlns="http://activemq.apache.org/camel/schema/spring">
> <route xmlns="http://activemq.apache.org/camel/schema/spring">
> <from
> uri="file:///D:/FID_341/runtime-New_configuration/FuseFIDCamel/Aggregator/in?noop=true"
> id="Camel_File_2"/>
> <aggregator batchTimeout="3000" batchSize="2" id="Camel_Aggregator_4">
> <xpath>/Persons/Person/Name</xpath>
> <to
> uri="file:///D:/FID_341/runtime-New_configuration/FuseFIDCamel/Aggregator/out"
> id="Camel_File_6"/>
> </aggregator>
> </route>
> </camelContext></beans>
>
>
> With the above exercise, I understand that File endpoint component is
> consuming the message from file and then it is moving the file to other
> location. But Aggregator is trying to pick the file from the previous
> location.
>
> Can somebody validate the above statement? I feel this will be a bug and
> File endpoint should be able to pass the message exchange to the Aggregator
> and Aggregator should process the same message exchange. Can somebody
> confirm that this is an issue?
Ah the route is like two fold when using the aggregator as it's
batching the file exchanges. By default the file consumer will move
processed file into a .camel subfolder.
Appending ?noop=true hinders this and thus the file remains untouched.
What you need to do is to ensure the exchange is not file based,
anymore. You can do this by converting the payload from java.io.File
to eg. String or byte[] etc.
So inserting a convertBodyTo so do the trick
<from
uri="file:///D:/FID_341/runtime-New_configuration/FuseFIDCamel/Aggregator/in"
id="Camel_File_2"/>
<convertBodyTo type="java.lang.String"/>
<aggregator batchTimeout="3000" batchSize="2" id="Camel_Aggregator_4">
Could you post back if that works. Then I guess we should improve the
wiki documentation with your example: file -> aggregate with this
pitfall
>
> Regards
> Ganesh
>
> --
> View this message in context:
> http://www.nabble.com/java.io.FileNotFoundException%2C-when-tries-to-run-the-aggregator-pattern-tp21201076s22882p21201076.html
> Sent from the Camel - Development mailing list archive at Nabble.com.
>
>
--
/Claus Ibsen
Apache Camel Committer
Blog: http://davsclaus.blogspot.com/