ファイルの名前を Accumulo に書き込もうとしています。accumulo-core-1.43 を使用しています。
何らかの理由で、特定のファイルが名前の末尾に \x00 文字を付けて Accumulo に書き込まれるようです。アップロードは Java サーブレットを介して行われます (jquery ファイル アップロード プラグインを使用)。サーブレットで System.out.println を使用してファイルの名前を確認すると、正常に見えます。
org.apache.commons.lang.StringEscapeUtils.unescapeJava(...);
accumulo への実際の書き込みは次のようになります。
Mutation mut = new Mutation(new Text(checkSum));
Value val = new Value(new Text(filename).getBytes());
long timestamp = System.currentTimeMillis();
mut.put(new Text(colFam), new Text(EMPTY_BYTES), timestamp, val);
しかし、異常は何も表示されませんでした (おそらく \x00 はエスケープされていません)? しかし、accumulo でテーブルをスキャンすると、ファイル名に 1 つ以上の \x00 が含まれます。
これが引き起こすと思われる問題は、ファイルのリスト (表示される場所) を取得するときに XML 内でその文字列を返し、それをブラウザーに戻すことです。XML 内の情報をレンダリングすることになっている XSL は、もはやこれらの余分な文字がある場合に機能します(理由もわかりません)。
Chrome では、これらの呼び出しに対する応答として、ファイル名の後に 3 つの赤い点があることがわかります。その上にカーソルを合わせると、\u0 がポップアップします (これは 0/null の別の表現だと思いますか?)。
とにかく、なぜこれが起こるのか、または少なくとも、Java でファイルを返す前に \x00 文字を除外する方法を理解しようとしています。何か案は?