0

我有一些字段,其中 xsd 将其作为 xs:dateTime

由于某种原因,当它被编组时,它被存储如下。

    <dateIssuedField class="org.apache.xerces.jaxp.datatype.XMLGregorianCalendarImpl" resolves-to="org.apache.xerces.jaxp.datatype.SerializedXMLGregorianCalendar">
      <lexicalValue>2021-08-06T00:00:00</lexicalValue>
    </dateIssuedField>

我在下面收到此错误。

XStream unmarshalling failed.
com.thoughtworks.xstream.converters.ConversionException: Cannot construct type
---- Debugging information ----
message             : Cannot construct type
cause-exception     : java.lang.InstantiationException
cause-message       : javax.xml.datatype.XMLGregorianCalendar
construction-type   : javax.xml.datatype.XMLGregorianCalendar
class               : javax.xml.datatype.XMLGregorianCalendar
required-type       : javax.xml.datatype.XMLGregorianCalendar
converter-type      : com.thoughtworks.xstream.converters.reflection.ReflectionConverter

知道如何编写转换器来处理这个问题吗?

4

1 回答 1

0

好的,解决了。

        xstream.registerConverter(new Converter() {
            @Override
            public boolean canConvert(Class arg0) {
                return arg0.equals(javax.xml.datatype.XMLGregorianCalendar.class);
            }

            @Override
            public Object unmarshal(HierarchicalStreamReader arg0, UnmarshallingContext arg1) {
                return null;
            }

            @Override
            public void marshal(Object arg0, HierarchicalStreamWriter arg1, MarshallingContext arg2) {
                XMLGregorianCalendar x = (XMLGregorianCalendar) arg0;
                arg1.setValue(x.toString());
            }
        });
于 2021-07-19T17:17:48.697 回答