JAXB Unmarshalling导致了SAXParser异常

时间:2013-08-16 14:26:25

标签: jaxb unmarshalling

我试图解组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; lineNumber:1; columnNumber:212;元素类型“ctag”必须后跟属性规范,“&gt;”或“/&gt;”。]

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

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

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

我试图理清的事情 - 1. CharacterEscapeHandler - 当我将这个问题分配给Unmarshaller时出现错误,因为只有marshaller接受了这个。 2. XmlJavaTypeAdapter - 在处理和从Adapter返回值之前发生解组。 3. BeforeUnmarshall - 将侦听器设置为unmarshaller;为命令返回null。 4. XmlMixed和XmlAnyElement - 期待正确的结束标记。

如果您有任何疑问,请告诉我。 在此先感谢

1 个答案:

答案 0 :(得分:1)

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

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

作为

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