我試圖簡單地使用XMLGregorianCalendar播放。這樣做我創建了一個匹配器和轉換:簡單框架中的自定義匹配器可以反序列化,但不能序列化
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
錯誤,我的變換的寫入方法永遠不會被調用(通過斷點檢查)。
下面是我用序列化代碼:
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));
寫方法拋出異常。我已經使用了Serialization third-party classes with Simple XML (org.simpleframework.xml)作爲參考,這是讓我進行反序列化的工作,但現在我陷入了困境。我不知道如何繼續。
任何幫助表示讚賞。