KryoException缺少任何arg构造函数

时间:2019-07-18 08:09:27

标签: java serialization kryo jaxp

我一直在努力解决有关Kryo的问题。我有一个客户端服务器体系结构,并使用Kryo通过JMS发送消息。在我的一个响应类中,我有一个具有javax.xml.datatype.Duration类作为属性的类。因为它处于两个软件的界面中,所以我没有机会对其进行更改。

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

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序列化程序。但是我没有上课的机会。我该怎么解决?

预先感谢

1 个答案:

答案 0 :(得分:0)

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);
            }
        }
    }

然后将其注册为Serializer,以实现您的JAXP库的Duration实现:

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