我一直在努力解决有关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序列化程序。但是我没有上课的机会。我该怎么解决?
预先感谢
答案 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());