servicemix-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Richard Kettelerij <richardkettele...@gmail.com>
Subject Re: BodyType in with Camel-FTP to XSLT route
Date Thu, 21 Oct 2010 18:08:04 GMT
You can explicitly convert the body of an exchange using the "convertBodyTo" DSL method (http://camel.apache.org/convertbodyto.html).
Have you tried that?

On 21 okt 2010, at 19:58, Joseph Brunner wrote:

> Hello,
> 
> I'm trying to set up a route that will FTP an XML file from a remote
> server, pass it to an XSLT processor to convert it to a CSV file, then
> FTP the CSV file up to another remote server.  I had this working with
> a vanilla install of ServiceMix 4.2.0 in our test environment.  It
> fails in our production environment, with the main difference being
> that the production environment uses Camel FTP 2.3.0 instead of Camel
> FTP 2.2.0.  This is the error message I'm getting:
> 
> 17:07:17,284 | ERROR | password=##### | DefaultErrorHandler
>  | rg.apache.camel.processor.Logger  248 | Failed delivery for
> exchangeId: f14f5dec-d2bf-42cb-9348-57e4092e3bef. Exhausted after
> delivery attempt: 1 caught:
> org.apache.camel.ExpectedBodyTypeException: Could not extract IN
> message body as type: interface javax.xml.transform.Source body is:
> GenericFile[test.xml]
> org.apache.camel.ExpectedBodyTypeException: Could not extract IN
> message body as type: interface javax.xml.transform.Source body is:
> GenericFile[test.xml]
> 
> With TRACE logging turned on, I can see the contents of the XML file
> so I know it is being properly downloaded.  It seems like the XSLT
> processor does not know how to convert the XML file input into a
> Source object.  Here is the route that I'm using:
> 
>    <camel:route>
>        <camel:from
> uri="ftp://#####@#######/?password=######&amp;passiveMode=true&amp;binary=false&amp;delay=6000&amp;filter=#myfilter"/>
>        <camel:to uri="xslt:test-csv.xsl"/>
>        <camel:setHeader headerName="CamelFileName">
>            <camel:simple>${file:name.noext}.${date:now:yyyy-MM-dd-hh.mm.ss}.csv</camel:simple>
>        </camel:setHeader>
>        <camel:to
> uri="ftp://####@####:###/?password=####&amp;passiveMode=true&amp;binary=false&amp;disconnect=true"/>
>    </camel:route>
> 
> The #myfilter URL parameter is selecting the file to download by
> filename.  This is working properly in both environments.  In the test
> environment where it was working, I had added this processor
> immediately after the 'from' ftp component, before the XSLT processor:
> 
>     <camel:setBody>
>          <camel:simple>${body}</camel:simple>
>     </camel:setBody>
> 
> This setBody processor sets the body of the message to the contents of
> the file, which allowed the XSLT processor to properly process the
> file's contents in the test environment.  However, in my production
> environment the setBody processor does not seem to fix this error.
> 
> I've tried writing a couple of Converters to convert a GenericFile to
> a Source and also to a String, and also to convert a File to a Source
> and a String but none of those seem to ever get called.
> 
> Any help would be appreciated.  Thanks in advance,
> Joe Brunner


Mime
View raw message