6

私は JAXB 2.2.5 を使用して JAXB モデルから Xml を出力しています。データはデータベースから取り込まれ、データベースには表示できない文字が含まれていることがあります。

0x1a 

もしそうなら、JAXBはこの文字をそのまま出力するだけで無効なXmlを出力します。それをエスケープするべきではありませんか?

アップデート

この問題を解決する実装があるかどうかは疑問ですが、おそらく Eclipselink MOXy で解決できますか?

編集

不正な文字の問題を修正する回避策を試しましたが、出力が望ましくない方法で変更されました。

<?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>た。なぜこれを行っているのかわかりません。

4

3 に答える 3

5

これは明らかに一般的な問題であり、 JAXB が不正な XML 文字を生成するバグとしてマークされています。

Escape illegal charactersで回避策を見つけることができます

于 2012-11-05T11:01:11.763 に答える
0

メッセージ コンテンツ内の文字を任意の文字またはスペースに置き換えるだけです。余分なjarやサードパーティのものを使用したくない場合は、以下の方法を試すことができます:

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

この例では、replaceALL メソッドは、印刷できない文字をアンダースコアに置き換えます。したがって、msgContent は印刷可能な文字だけになり、JAXB が不正な文字を防ぐことができます。

于 2016-01-27T12:12:10.807 に答える