在camel dsl中解组xml时内存不足

时间:2013-04-18 09:35:57

标签: apache-camel unmarshalling

我在下面的代码中遇到了OOM问题

from("file://" + getDumpDirLocation() + "?maxMessagesPerPoll=1&bufferSize=8192")
                .unmarshal().string("UTF-8")

在目录位置转储的xml文件很大(有时是1G)。

我也尝试过添加自定义处理器 - 但没有成功,

from("file://" + getDumpDirLocation() + "?maxMessagesPerPoll=1&bufferSize=8192")
.process(this.getRemoveInvalidXmlCharacterProcessor())

有没有办法避免这种内存不足异常?

所以基本上,交换机中的exchange.getIn()。getBody(String.class)会抛出OOM,因为考虑到转储的XML文件的大小,对象结构很大。

感谢。

2 个答案:

答案 0 :(得分:2)

将1GB的文件读入内存真的不是一个好主意。而是使用流式传输以“块”方式读取文件。

如果你想处理大型XML文件然后阅读其中的一些文章,你可以在这里找到:http://camel.apache.org/articles关于拆分大型xml文件。只需在该页面上搜索xml,您就可以找到这些链接。

答案 1 :(得分:1)

这是一个Java内存异常。我认为与骆驼没什么关系。分离出自定义处理器不会有任何区别。

您必须增加JVM的运行时内存。 如果您使用的是Eclipse,请在运行配置下将-Xmx2048M设置为VM参数,以用于您要运行的特定应用程序。

如果在任何其他环境中,您可以进行简单的搜索,以了解如何增加java heapsize,这应该可以解决问题。