【问题标题】:JAXB Unmarshalling resulted in SAXParser ExceptionJAXB 解组导致 SAXParser 异常
【发布时间】:2013-08-16 14:26:24
【问题描述】:

我试图解组 xml 导致 saxparser 异常,因为元素的值具有未正确关闭的标记元素。这是我得到并且必须处理的。

这里是示例 xml -

<GetResultResponse>
  <ExecutionID>17716868</ExecutionID>
  <Device>STLMJWB</Device>
  <Status>Success</Status>
  <ResultSet>
    <Command>RTRV-ALM-ALL:STLMJWB0201000003FIS:ALL:<ctag=dq>;</Command>
    <CommandType>Raw</CommandType>
    <commandResult>Success</commandResult>
  <ResultSet>
</GetResultResponse>

上面的 xml 包含作为命令值的其他字符串,并且标签未正确关闭导致以下异常 -

[org.xml.sax.SAXParseException;行号:1;列号:212;元素类型“ctag”必须后跟属性规范,“>”或“/>”。]

unmarshall 的 xml 输入作为字符串阅读器提供

StringReader sr = new StringReader("ABOVE XML");
unmarshaller.unmarshal(sr);

我有两个类 - 一个用于 GetResultResponse,另一个用于 ResultSet。

我试图解决的问题 - 1. CharacterEscapeHandler - 当我将这个属性分配给 Unmarshaller 时出错,因为只有 marshaller 接受这个。 2. XmlJavaTypeAdapter - 在处理和从适配器返回值之前发生解组。 3. BeforeUnmarshall - 设置监听器为解组器;为命令返回 null。 4. XmlMixed 和 XmlAnyElement - 需要正确的结束标记。

如果您有任何疑问,请告诉我。 提前致谢

【问题讨论】:

    标签: jaxb unmarshalling


    【解决方案1】:

    您当前的 XML 无效。您需要在此处正确转义文本内容:

    <Command>RTRV-ALM-ALL:STLMJWB0201000003FIS:ALL:<ctag=dq>;</Command>
    

    作为

    <Command>RTRV-ALM-ALL:STLMJWB0201000003FIS:ALL:&lt;ctag=dq>;</Command>
    

    【讨论】:

    • 布莱斯,你是对的。数据输入 xml 来自带有标签 [] 的其他系统。那么,是否有任何选项可以在解组之前转义文本内容以避免解析异常。注意:如果我用 < 更改输入 xml,我能够正确地将其解组为相应的对象。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    相关资源
    最近更新 更多