我一直在努力解决有关 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/