2015-06-28 110 views
1

我想从S3存储下载的XML文件的XML文件,然后解组他们在数据库中插入数据:解组从Amazon S3下载与骆驼

... 
from("aws-s3://myBucket?accessKey=xxx&secretKey=yyy") 
.to("file:D:/output?fileName=${in.header.CamelAwsS3Key}") 
.unmarshal(new JaxbDataFormat("com.xxx")) 
... 

我能下载的文件时我不尝试解组,但是当我尝试解组我得到这个错误:

org.apache.camel.TypeConversionException: 
Error during type conversion from type: 
com.amazonaws.services.s3.model.S3ObjectInputStream to the required type: 
javax.xml.stream.XMLStreamReader with value [email protected] due javax.xml.stream.XMLStreamException: 
java.io.IOException: Attempted read on closed stream. 

由于我是新来的骆驼有可能的事情我还不明白...

  1. 当我管道端点时,当前端点是不是以前一个端点“修改”的方式得到消息呢?在我的情况下,它看起来像S3流正在编组,而不是从下载本地新创建的xml文件,因此错误。我的理解是如果我做.from()。()。to(),第二个.to()不知道什么是来自.from(),所以如果我的第一个.to()创建一个XML文件,第二个.to()将消息处理为xml文件。我错了吗?
  2. 也许我需要创建2条路线?尽管从数据库到文件到S3,我仍然可以用其他途径完成。
  3. 在这种情况下,我是否需要编写自己的转换器?

谢谢!

回答

0

当你有第二骆驼需要再次读取流,但其关闭。它变成有时流只能读一次。它在第一个被读入的地方写入文件。

因此,您可以启用流缓存以允许骆驼能够重新读取流。查看更多本FAQ和联系

您也可以分解成2路

from amq 
to file 

from file 
unmarshal 
+0

流工程,但是这意味着我的约。要假设()从前一个端点读取错误?因为我从.from()为第二个.to()缓存S3流,这意味着它从.from()中读取而不是从第一个.to()中创建的xml中读取。 –

+0

文件只是写入文件,如果你做了一个http然后它的http服务器的响应是消息正文 –