2013-08-16 76 views
2

我試圖解開導致saxparser異常的xml,因爲元素的值有一個未正確關閉的標記元素。這是我得到和必須處理的。JAXB解組導致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」必須跟任一屬性規格,「>」或「/>」]

XML輸入到解組被饋送作爲字符串reader

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

我有兩個類 - 一個用於GetResultResponse和其他用於ResultSet。

我試圖理清的東西 - 1. CharacterEscapeHandler - 當我將這個proerpty分配給Unmarshaller時出現錯誤,因爲只有編組人員接受這個。 2. XmlJavaTypeAdapter - 解組發生在處理並從Adapter返回值之前發生。 3. BeforeUnmarshall - 將監聽器設置爲解組器;命令返回null。 4. XmlMixed和XmlAnyElement - 期望正確的結束標記。

請讓我知道你是否有任何疑問。 在前提前致謝

回答

1

您的XML與其當前的版本無效。你需要在這裏正確轉義文本內容:

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

由於

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

布萊斯,你是對的。數據輸入xml來自其他帶有標籤[]的系統。那麼,是否有任何選擇可以在解組之前轉義文本內容以避免解析異常。注意:如果我用<更改輸入xml,我可以正確地將它解組到相應的對象。謝謝 – Hari