3

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)を参照としてシリアル化サードパーティクラスを使用しました。これにより、逆シリアル化が機能するようになりましたが、今は行き詰まっています。どうすればいいのかわかりません。

どんな助けでも大歓迎です。

4

1 に答える 1

2

答えは質問にあったことがわかりました。記載されているエラーはXMLGregorianCalendarImplサポートされていません。これは私のマッチャーがチェックしたものではありません。私はただ変更しなければなりませんでした:

    if (type.equals(XMLGregorianCalendar.class)) {

    if (XMLGregorianCalendar.class.isAssignableFrom(type)) {

これが誰かに役立つことを願っています。

于 2013-03-26T23:51:13.570 に答える