我有使用一些古老的 XStream 保存的遗留 XML 文件。
现在我正在使用最新的 XStream,并尝试加载数据。它成功加载了日期和 int,但字符串为空。
param = (Param) xstream.fromXML(strQueueParam);
其中 strQueueParam 如下:
<com.company.Params>
<capturedDate class="org.apache.xerces.jaxp.datatype.XMLGregorianCalendarImpl" resolves-to="org.apache.xerces.jaxp.datatype.SerializedXMLGregorianCalendar">
<lexicalValue>2020-10-13T10:03:00.000+02:00</lexicalValue>
</capturedDate>
<capturedUsername>
<name serialization="custom">
<javax.xml.namespace.QName>
<default>
<localPart>Captured_Username</localPart>
<namespaceURI>http://schemas.datacontract.org/2004/07/RuleEngineLibrary</namespaceURI>
<prefix></prefix>
</default>
</javax.xml.namespace.QName>
</name>
<declaredType>java.lang.String</declaredType>
<scope>org.datacontract.schemas._2004._07.rulesenginelibrary.Param</scope>
<value class="string">Bob Example</value>
<nil>false</nil>
</capturedUsername>
<capturedInt>5</capturedInt>
</com.company.Params>
好的,所以我意识到这些 {name/declaredType/scope/value/nil} 是 JAXBElement 的字段。
所以我认为发生的事情是,老一代代码没有使用 jaxb-bindings,所以这些类都包含JAXBElement<String>
而不是String
.
但是现在我认为我不能反序列化这个垃圾 XML,除非我有旧的错误生成的 Param 文件。
好的,我可能必须手动转换 XML。我现在只是在自言自语。我不期待答案。