java - 缺少无参数构造函数的 KryoException

标签 java serialization kryo jaxp

我一直在努力解决有关 Kryo 的问题。我有一个客户端服务器架构,并使用 Kryo 通过 JMS 发送消息。在我的一个响应类中,我有一个类以 javax.xml.datatype.Duration 类作为属性。我没有机会改变它,因为它是在两个软件的界面中。

在错误堆栈中,它给出了存在问题的类:com.sun.org.apache.xerces.internal.jaxp.datatype.DurationImpl。我不在代码中的任何地方使用它。我已经编写了一些代码来说明 Kryo 如何序列化 javax.xml.datatype.Duration 类,如下所示:

public Duration read(kryoi input, entryClass){
    return DataTypeFactory.newInstance().newDuration((String)kryo.readClassAndObject(input));
}

public void write(kryo, out, entryclass){
    kryo.writeClassAndObject(out, entryClass.toString());
}

这并不能解决问题。我想实现 com.sun.org.apache.xerces.internal.jaxp.datatype.DurationImpl 类对象来为其编写 Kryo 序列化器。但是我无法参加该类(class)。怎么解决呢?

提前致谢

最佳答案

DurationSerializer 实现为:

    class DurationSerializer extends FieldSerializer<Duration> {
        @Override
        public void write (Kryo kryo, Output output, Duration object) {
            output.writeString(object.toString());
        }

        @Override
        public Duration read(Kryo kryo, Input input, Class<? extends Duration> type) {
            try {
                return DatatypeFactory.newInstance().newDuration(input.readString());
            } catch (DatatypeConfigurationException e) {
                throw new RuntimeException(e);
            }
        }
    }

然后将其注册为 JAXP 库的 Duration 实现的 Serializer,如下所示:

kryo.register(datatypeFactory.newDuration(1000).getClass(), new DurationSerializer());

关于java - 缺少无参数构造函数的 KryoException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57089886/

相关文章:

java - 在 Java 测试套件中自动包含类

java - 是否可以使用 clon() 方法而不覆盖它

java - Javascript 构造函数与 Java 中的类或接口(interface)等效/相似吗

c# - 更改 WCF 中的默认日期序列化

java - TinkerPop Gremlin How to serialize Predicate passed in Until 步骤

java - 使用自定义序列化器从 avro 读取时,RDD 中的运行时类型错误

java - 如何使用Spring Boot + Mybatis连接池

java - 如何使用Protocol Buffers在内存中序列化数据?

java - 通过 EJB RMI 传递对象 - NullPointerException

java - Kryo 序列化库 : is it used in production?