【发布时间】:2014-04-10 07:36:02
【问题描述】:
我在实现 Camel Route 时遇到问题,我在其中调用 URl 并将 JSON 响应转换为 Pojo。我使用骆驼杰克逊。
连接建立,状态为 200。
但我明白了
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:541)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:644)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:152)
caused because of java.lang.StackOverflowError.
这是一个示例代码
from("direct:start")
.setHeader(Exchange.HTTP_METHOD, constant("GET"))
.to("URL")
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
int responseCode = exchange.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE, Integer.class);
System.out.println(exchange.getIn().getBody());
System.out.println(responseCode);
}
})
.marshal(cont)
.process(new MyProcessor())
.end();
cont 是杰克逊数据格式。我将堆内存增加到 1024 M。但它仍然显示堆栈溢出错误。但是 Json 文件只有 26 Kb。我使用http://www.jsonschema2pojo.org/ 站点为 json 创建 Pojos。
【问题讨论】:
-
您可以使用 '-Xss
m' 标志增加堆栈大小。 -
是的,我做到了。我不能增加超过 1GB。我的内存占用了 2.2 GB。我在 ram 中的总可占用空间是 3.25 GB。但我猜这个程序需要更多..
-
如果是这种情况,那么我认为 JonK:s 下面的回答是正确的分析。这听起来绝对像是失控递归。
-
你绝对不应该给你的线程堆栈那么多空间。对于绝大多数应用程序,默认设置应该绰绰有余。如果我的线程堆栈需要的不仅仅是
-Xss128k,我会认真查看我的代码,看看我应该改变什么以避免需要那么多。 -
我的坏人。我给了 marshal 而不是 unmarshal()。很抱歉浪费了您宝贵的时间。谢谢!
标签: java json jackson apache-camel pojo