我遇到了一个stackoverflow异常,正如文档(这里)所解释的那样
错误发生在发送字符串以外的任何东西时(如bean或HashMap)。
@Push
@Inject
private PushContext console;
void onEvent(@Observes ApplicationEvent event) {
final Map<String, Object> dto = new HashMap<>();
dto.put("timestamp", event.getTimestamp());
dto.put("message", event.getMessage());
dto.put("severity", event.getSeverity());
console.send(dto);
// console.send(event); This line does not work
// console.send(event.getMessage()); This line works
}
.
堆栈跟踪
Caused by: java.lang.IllegalArgumentException: Cannot invoke getter of property 'classes' of bean 'class java.lang.Class'.
at org.omnifaces.util.Json.encodeBean(Json.java:178)
at org.omnifaces.util.Json.encode(Json.java:89)
at org.omnifaces.util.Json.encodeBean(Json.java:191)
at org.omnifaces.util.Json.encode(Json.java:89)
at org.omnifaces.util.Json.encodeArray(Json.java:123)
at org.omnifaces.util.Json.encode(Json.java:83)
at org.omnifaces.util.Json.encodeBean(Json.java:191)
at org.omnifaces.util.Json.encode(Json.java:89)
at org.omnifaces.util.Json.encodeBean(Json.java:191)
at org.omnifaces.util.Json.encode(Json.java:89)
at org.omnifaces.util.Json.encodeArray(Json.java:123)
at org.omnifaces.util.Json.encode(Json.java:83)
at org.omnifaces.util.Json.encodeBean(Json.java:191)
at org.omnifaces.util.Json.encode(Json.java:89)
at org.omnifaces.util.Json.encodeBean(Json.java:191)
at org.omnifaces.util.Json.encode(Json.java:89)
at org.omnifaces.util.Json.encodeBean(Json.java:191)
at org.omnifaces.util.Json.encode(Json.java:89)
at org.omnifaces.util.Json.encodeArray(Json.java:123)
// Repeats to infinity & beyond
当其中一个map/bean属性是Class
对象,其classes
属性反过来引用自己时,它确实会失败。也许是severity
的问题?
我根据这个提交改进了Json#encode()
,当遇到Class
实例时,只打印Class#getName()
,而不是将其作为bean处理。