2012-11-05 53 views
5

我使用JAXB 2.2.5從JAXB模型輸出Xml,數據從數據庫填充,偶爾數據庫包含不應顯示的字符如當數據包含不可顯示的字符時,JAXB輸出無效的XML

0x1a 

如果它不那麼JAXB輸出由作爲是,它不應該逃避它或東西只是輸出這個字符無效的XML?

更新

我不知道是否有那些解決這個問題的任何實現,也許EclipseLink的莫西呢?

編輯

我試圖修復該非法字符的問題但是它改變不期望的方式輸出的解決方法。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><metadata created="2013-02-27T11:40:04.009Z" xmlns="http://musicbrainz.org/ns/mmd-2.0#" xmlns:ext="http://musicbrainz.org/ns/ext#-2.0"><cdstub-list count="1" offset="0"><cdstub id="w237dKURKperVfmckD5b_xo8BO8-" ext:score="100"><title>fred</title><artist></artist><track-list count="5"/></cdstub></cdstub-list></metadata> 

<?xml version="1.0" ?><metadata xmlns:ext="http://musicbrainz.org/ns/ext#-2.0" xmlns="http://musicbrainz.org/ns/mmd-2.0#" created="2013-02-27T11:39:15.394Z"><cdstub-list count="1" offset="0"><cdstub id="w237dKURKperVfmckD5b_xo8BO8-" ext:score="100"><title>fred</title><artist></artist><track-list count="5"></track-list></cdstub></cdstub-list></metadata> 

<track-list count="5"/>已成爲<track-list count="5"></track-list>這是不可取的,我不知道爲什麼它是這樣做的。

回答

5

這顯然是一個常見問題 - 並標記爲bug JAXB generates illegal XML characters

你可以找到Escape illegal characters

+0

這個工程,但不幸的是,它已經改變了我不想要的另一種方式的輸出,請參閱更新到問題 –

+0

感謝您的答案。不幸的是,你鏈接到的解決方法有一些缺陷,如不縮進生成的XML :( – Kaitsu

+0

更新的鏈接(我猜)是https://github.com/javaee/jaxb-v2/issues/614 - 也相關似乎https ://github.com/javaee/jaxb-v2/issues/960 –

2

解決方法的另一種解決方案是使用Apache Commons Lang中,刪除無效的XML字符:

import org.apache.commons.lang3.StringEscapeUtils; 

String xml = "<root>content with some invalid characters...</root>"; 
xml = StringEscapeUtils.unescapeXml(StringEscapeUtils.escapeXml10(xml)); 

escapeXml10方法逃避字符串,並刪除無效字符。 方法將撤銷轉義。最終結果是相同的XML,但刪除了無效的XML字符。

0

只需將字符替換爲郵件內容中的任何或空格。如果你不想使用額外的罐子或第三方的東西,你可以試試下面的方法吧:

String msgContent = "......";// string with some illegal character 
msgContent = msgContent .replaceALL("\\P{Print}","_"); 

在這個例子中,方法的replaceAll用下劃線代替不可打印字符。所以你的msgContent將只是可打印的字符,並阻止JAXB從非法字符。

相關問題