InvalidDefinitionException:直接自引用导致循环尝试将具有成员作为 IonValue 的类序列化为 IonValue

问题描述

我有一个对象,它的成员之一是 IonValue。我正在尝试将整个对象序列化为 IonValue,但出现 InvalidDefinitionException。

引发异常的序列化代码:ionMapper.writeValueAsIonValue(CustomerClassObject)

public class CustomerClass {

    private final String employeeId;
    private final String businessId;
    private final String customerName;
   
    private final IonValue eventVal;
    private final Map<String,String> additionalParams;
}

我的 IonObjectMapper 初始化如下

public IonObjectMapper createJacksonIonMapper() {
        final IonObjectMapper mapper = new IonObjectMapper();
        mapper.setCreateBinaryWriters(true);
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);
        return mapper;
    }

异常堆栈跟踪:

InvalidDefinitionException: Direct self-reference leading to cycle (through reference chain: com.software.model.CustomerClass["eventVal"]->software.amazon.ion.impl.lite.IonStructLite["symbolTable"]->software.amazon.ion.impl.SharedSymbolTable["systemSymbolTable"])
    at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) ~[jackson-databind-2.12.3.jar:?]
    at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1276) ~[jackson-databind-2.12.3.jar:?]
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter._handleSelfReference(BeanPropertyWriter.java:944) ~[jackson-databind-2.12.3.jar:?]
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:722) ~[jackson-databind-2.12.3.jar:?]
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770) ~[jackson-databind-2.12.3.jar:?]
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) ~[jackson-databind-2.12.3.jar:?]
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.12.3.jar:?]
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770) ~[jackson-databind-2.12.3.jar:?]
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) ~[jackson-databind-2.12.3.jar:?]
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.12.3.jar:?]

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)