OmniFaces Json#encode() 堆栈溢出与 IllegalArgumentException:无法调用 getter of property 'classes' bean 'cl



我遇到了一个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处理。

相关内容

  • 没有找到相关文章

最新更新