我在实现Camel Route时遇到问题,我在其中调用URl并将JSON Response转换为Pojo。我使用Camel-Jackson。
连接与状态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。
答案 0 :(得分:2)
一般来说,大量或无休止的递归方法调用链是StackOverflowError
s的主要罪魁祸首,尽管它们决不是唯一的原因。您的其他问题之一是您的线程堆栈大小可能设置为较低的数字(如果您正在查看StackOverflowError
但只有一个小的堆栈跟踪,这可能是正在发生的事情)。
如果堆栈跟踪只有少量帧,请检查您的JVM是否设置了-Xss
启动选项。如果是这样,您可能需要将其更改为更大的内容,如果它没有尝试将-Xss256k
添加到您的JVM的启动选项(Windows x64的默认值为-Xss128k
机)。如果需要,可以进一步增加。
如果您的堆栈跟踪非常大,那么它更有可能是递归方法调用。您应该能够从跟踪本身告诉哪些方法被递归调用,然后可以查看纠正行为。
答案 1 :(得分:0)
如果JSON Java类包含可能会破坏应用程序的递归循环,则应该检查它。如果是这种情况,请将@JsonIgnore
添加到相关属性以打破循环。