使用 Camel 解组从 Amazon S3 下载的 xml 文件
Unmarshalling an xml file downloaded from Amazon S3 with Camel
我想从 S3 存储桶下载 xml 文件,然后解组它们以将数据插入数据库:
...
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 com.amazonaws.services.s3.model.S3ObjectInputStream@67b8328b due javax.xml.stream.XMLStreamException:
java.io.IOException: Attempted read on closed stream.
由于我是 Camel 的新手,所以可能有些事情我还不明白......
- 当我通过管道传输端点时,当前端点获取消息的方式与前一个端点不同"modified"吗?在我的例子中,似乎正在编组 S3 流,而不是从下载本地新创建的 xml 文件,因此出现错误。
我的理解是,如果我执行 .from().to().to(),第二个 .to() 不知道 .from() 是什么,所以如果我的第一个 .to() 创建一个 xml 文件,第二个 .to() 将消息作为 xml 文件处理。我错了吗?
- 也许我需要创建 2 条路线?不过,从数据库到文件再到 S3,我只能用一条路线来做相反的事情。
- 在那种情况下我需要编写自己的转换器吗?
谢谢!
当你有第二个时,Camel 需要再次读取流,但它已关闭。它变得有时流只能读取一次。它首先被读取到,然后将其写入文件。
因此您可以启用流缓存以允许 Camel 能够再次重新读取流。在此常见问题解答和链接中查看更多信息
- http://camel.apache.org/why-is-my-message-body-empty.html
- http://camel.apache.org/stream-caching.html
你也可以分成2条路线
from amq
to file
from file
unmarshal
我想从 S3 存储桶下载 xml 文件,然后解组它们以将数据插入数据库:
...
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 com.amazonaws.services.s3.model.S3ObjectInputStream@67b8328b due javax.xml.stream.XMLStreamException:
java.io.IOException: Attempted read on closed stream.
由于我是 Camel 的新手,所以可能有些事情我还不明白......
- 当我通过管道传输端点时,当前端点获取消息的方式与前一个端点不同"modified"吗?在我的例子中,似乎正在编组 S3 流,而不是从下载本地新创建的 xml 文件,因此出现错误。
我的理解是,如果我执行 .from().to().to(),第二个 .to() 不知道 .from() 是什么,所以如果我的第一个 .to() 创建一个 xml 文件,第二个 .to() 将消息作为 xml 文件处理。我错了吗? - 也许我需要创建 2 条路线?不过,从数据库到文件再到 S3,我只能用一条路线来做相反的事情。
- 在那种情况下我需要编写自己的转换器吗?
谢谢!
当你有第二个时,Camel 需要再次读取流,但它已关闭。它变得有时流只能读取一次。它首先被读取到,然后将其写入文件。
因此您可以启用流缓存以允许 Camel 能够再次重新读取流。在此常见问题解答和链接中查看更多信息
- http://camel.apache.org/why-is-my-message-body-empty.html
- http://camel.apache.org/stream-caching.html
你也可以分成2条路线
from amq
to file
from file
unmarshal