我正在尝试让Simple在XMLGregorianCalendar中表现出色。在这样做的过程中,我创建了一个Matcher和Transform:
public class MyMatcher implements Matcher {
@Override
public Transform<?> match(@SuppressWarnings("rawtypes") final Class type) throws Exception {
if (type.equals(XMLGregorianCalendar.class)) {
return new XMLGregorianCalendarTransform();
}
return null;
}
}
和
public class XMLGregorianCalendarTransform implements Transform<XMLGregorianCalendar> {
@Override
public XMLGregorianCalendar read(final String value) throws Exception {
return DatatypeFactory.newInstance().newXMLGregorianCalendar(value);
}
@Override
public String write(final XMLGregorianCalendar value) throws Exception {
return value.toXMLFormat();
}
}
当使用此代码进行反序列化时,效果非常好:
final Serializer serializer = new Persister(new MyMatcher());
obj = serializer.read(type, new ByteArrayInputStream(xml.getBytes(Charset.forName(UTF8_ENCODING))));
不幸的是,当我尝试使用它进行序列化时,它不起作用,它抛出
Failed to create xml string for the object.
org.simpleframework.xml.transform.TransformException: Transform of class com.sun.org.apache.xerces.internal.jaxp.datatyp
e.XMLGregorianCalendarImpl not supported
错误,我的Transform的写入方法从未被调用(通过断点进行检查)。
以下是我用来序列化的代码:
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
os = new DataOutputStream(baos);
final Serializer serializer = new Persister(new MyMatcher());
serializer.write(this, os);
os.flush();
xmlString = new String(baos.toByteArray(), Charset.forName(UTF8_ENCODING));
write方法引发异常。我用过
Serialization third-party classes with Simple XML (org.simpleframework.xml)
作为一个参考,这就是让我开始反序列化工作的原因,但现在我陷入了困境。我不知道该怎么做。
任何帮助都将不胜感激。