[解決済み] StreamException: 無効な XML 文字 (Unicode: 0x1a)
2022-02-09 07:32:50
質問
XStreamを使って、ユーザーのオブジェクトをファイルに保存しています。
private void store() {
XStream xStream = new XStream(new DomDriver("UTF-8"));
xStream.setMode(XStream.XPATH_ABSOLUTE_REFERENCES);
xStream.alias("configuration", Configuration.class);
xStream.alias("user", User.class);
synchronized (ConfigurationDAOImpl.class) {
try {
xStream.toXML(configuration, new FileOutputStream(filename.getFile()));
} catch (IOException e) {
throw new RuntimeException("Failed to write to " + filename, e);
}
}
}
次のコードで読み込もうとすると、Exception: com.thoughtworks.xstream.io.StreamException: が発生します。ドキュメントの要素コンテンツに無効な XML 文字 (Unicode: 0x1a) が見つかりました。
private void lazyLoad() {
synchronized (ConfigurationDAOImpl.class) {
// Has the configuration been loaded
if (configuration == null) {
if (filename.exists()) {
try {
XStream xStream = new XStream(new DomDriver("UTF-8"));
xStream.setMode(XStream.XPATH_ABSOLUTE_REFERENCES);
xStream.alias("configuration", Configuration.class);
xStream.alias("user", User.class);
configuration = (Configuration) xStream
.fromXML(filename.getInputStream());
LOGGER.debug("Loaded configuration from {}.", filename);
} catch (Exception e) {
LOGGER.error("Failed to load configuration.", e);
}
} else {
LOGGER.debug("{} does not exist.", filename);
LOGGER.debug("Creating blank configuration.");
configuration = new Configuration();
configuration.setUsers(new ArrayList<User>());
// and store it
store();
}
}
}
}
何か思い当たることは?
解決方法は?
以下の方法で、0x1aをダッシュ文字('-')に置き換えました。
/**
* This method ensures that the output String has only
* @param in the string that has a non valid character.
* @return the string that is stripped of the non-valid character
*/
private String stripNonValidXMLCharacters(String in) {
if (in == null || ("".equals(in))) return null;
StringBuffer out = new StringBuffer(in);
for (int i = 0; i < out.length(); i++) {
if(out.charAt(i) == 0x1a) {
out.setCharAt(i, '-');
}
}
return out.toString();
}
関連
-
[解決済み】エラー:配列または java.lang.Iterable のインスタンスに対してのみ反復処理を行うことができます。
-
[解決済み】JLabelのテキストを中央に配置するには?
-
[解決済み] PHPでHTML/XMLをパースして処理する方法とは?
-
[解決済み] 特定のUnicode文字を含むコメントでのJavaコードの実行が許可されているのはなぜですか?
-
[解決済み] XMLの<![CDATA[]]>は何を意味するのですか?
-
[解決済み] XMLを解析して、特定のノード属性のインスタンスをカウントするには?
-
[解決済み] java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException を解決するには?
-
[解決済み] XML文書でエスケープする必要がある文字は何ですか?
-
[解決済み] XMLでタグのブロックをコメントアウトするにはどうすればよいですか?
-
[解決済み】XMLで無効な文字とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Hibernateエラー:同じ識別子値を持つ別のオブジェクトがすでにセッションに関連付けられました。
-
[解決済み】ResultSetの例外 - 結果セットの開始前
-
[解決済み】Javaの部分文字列:「文字列のインデックスが範囲外」。
-
[解決済み】Mockitoでモックからチェックされた例外を投げる
-
[解決済み】「java -cp」と「java -jar」の違い?
-
[解決済み】破損したjarファイル
-
[解決済み】Javaメソッドスタブ
-
[解決済み] java.sql.SQLException を取得しました。ResultSet が終了した後の操作は許可されません。
-
[解決済み] エラー - trustAnchors パラメータは空であってはなりません。
-
[解決済み】CreateProcess error=2, The system cannot find file specified.