Simpleを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
エラーがスローされ、Transformのwriteメソッドが呼び出されません(ブレークポイントで確認してください)。
シリアル化に使用するコードは次のとおりです。
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メソッドは例外をスローします。Simple XML(org.simpleframework.xml)を参照としてシリアル化サードパーティクラスを使用しました。これにより、逆シリアル化が機能するようになりましたが、今は行き詰まっています。どうすればいいのかわかりません。
どんな助けでも大歓迎です。