Simple을 XMLGregorianCalendar로 멋지게 처리하려고합니다. 그래서 정규를 생성하고 변환 한 I함으로써 :Simple Framework의 사용자 정의 Matcher가 직렬화를 역 직렬화하기 위해 작동합니다.
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))));
내가 시도 불행하게도 때 그것은 serialize하는 데 사용하려면 작동하지 않습니다, 그것은 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));
쓰기 방법은 예외를 throw :
는 여기에 내가 직렬화하는 데 사용하는 코드입니다. 나는 Serialization third-party classes with Simple XML (org.simpleframework.xml)을 참조로 사용했으며, 이것이 내가 deserialization 작업에 참여하게했지만 지금은 붙어 있습니다. 계속 진행하는 방법을 모르겠습니다.
도움을 주시면 감사하겠습니다.