1

我有使用一些古老的 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。我现在只是在自言自语。我不期待答案。

4

0 回答 0