Hi

I'm sending a file over JMS using Oracle AQ.

InRoute
               <camel:route id="demoRoute">
                        <camel:from uri="file:/data/indata"/>
                        <camel:transacted/>
                        <camel:convertBodyTo type="java.lang.String"/>
                        <camel:to uri="hubQueue:queue:DEMOEVENT" />
                        <camel:to uri="mock:demoevent"/>
                </camel:route>

Route reading from the queue:
                <camel:route id="demoOutRoute">
                        <camel:from uri="hubQueue:queue:DEMOEVENT" />
                        <camel:transacted/>
                        <camel:to uri="file:/data/uddata"/>
                        <camel:to uri="mock:demoeventout"/>
                </camel:route>

I get an error when Camel tries to write the file again:
[Camel (demo-out-Context) thread #0 - JmsConsumer[DEMOEVENT]] 03 jun. 2011 -
08:34:33,097 ERROR org.apache.camel.processor.DefaultErrorHandler
[Failed delivery for exchangeId: ID:A4C9E4F7D00B83B2E040650A2B5F4514.
Exhausted after delivery attempt: 1 caught:
org.apache.camel.component.file.GenericFileOperationFailedException: Cannot
store file: \data\uddata\C:\data\indata\ITM545791.XML]
org.apache.camel.component.file.GenericFileOperationFailedException: Cannot
store file: \data\uddata\C:\data\indata\ITM545791.XML

It seems that camel uses the file target dir and concatinates it with the
CamelFileName header from the JmsPayload.

Trace from Jms consumer :
[ID:A4C9E4F7D00B83B2E040650A2B5F4514 >>> (demoOutRoute)
from(hubQueue://queue:DEMOEVENT) --> transacted <<< Pattern:InOnly,
Headers:{JMSRedelivered=false,
JMSMessageID=ID:A4C9E4F7D00B83B2E040650A2B5F4514,
CamelFileAbsolutePath=C:\data\indata\ITM545791.XML, JMSType=null,
JMSXDeliveryCount=1, CamelFileAbsolute=true, CamelFileLength=6988,
JMS_OracleTimestamp=1307082872816, JMSDestination=ESB_APPL.DEMOEVENT,
JMSPriority=1, JMSExpiration=0, JMS_OracleDelay=0, JMSDeliveryMode=2,
JMSXUserID=ESB_APPL, CamelFileName=C:\data\indata\ITM545791.XML,
JMSReplyTo=null, JMSXState=0, CamelFileNameOnly=ITM545791.XML,
CamelFileLastModified=Fri Apr 29 08:32:22 CEST 2011, JMSXGroupID=null,
CamelFilePath=C:\data\indata\ITM545791.XML,
CamelFileRelativePath=ITM545791.XML, JMSTimestamp=1307082872816,
JMSCorrelationID=null, JMSXRecvTimestamp=1307082873082,
CamelFileParent=C:\data\indata, JMS_OracleDeliveryMode=2}, BodyType:String,
Body:<?xml version="1.0" encoding="ISO-8859-1"?>

The workaround is to set the filename header yourself like:
camel:setHeader
headerName="CamelFileName"><camel:simple>${header.CamelFileNameOnly}</camel:simple></camel:setHeader>

But is this nessasary ? Shouldn't the CamelFileName be reusable between the
Jms- and File component so they have the same convention. FileName without
path ?

Preben


 

--
View this message in context: 
http://camel.465427.n5.nabble.com/CamelFileName-over-JMS-Bug-or-working-as-designed-tp4450339p4450339.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to