私は JAXB ライブラリを使用して XML ファイルを読み書きしていますが、問題はありません。ただし、マーシャリング中に NUL 文字が XML ファイルに書き込まれるという問題が最近発生しました。
奇妙なことに、この問題は、トルコ語版の Windows でテストしたときにのみ発生しました。英語または日本語 (私が atm にアクセスできる唯一のプラットフォーム) ディストリビューションでそれらを再現することはできません。何がこれを引き起こしているのでしょうか?以下のコード例。
マーシャリング クラス:
public class InputsMarshaller {
public static Inputs unmarshal(String filePath) {
Inputs inputs = null;
try {
JAXBContext context = JAXBContext.newInstance(Inputs.class); //1
Unmarshaller unmarshaller = context.createUnmarshaller();
inputs = (Inputs) unmarshaller.unmarshal(new File(filePath));
} catch (JAXBException ex) {
ex.printStackTrace(System.out);
}
return inputs;
}
public static void marshal(Inputs inputs, String filePath) {
try {
JAXBContext context = JAXBContext.newInstance(Inputs.class); //1
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.marshal(inputs, new FileWriter(new File(filePath)));
} catch (IOException | JAXBException ex) {
ex.printStackTrace(System.out);
}
}
}
入力クラス:
@XmlRootElement(name = "inputs")
public class Inputs {
private ArrayList<String> values;
private String name, unit;
@XmlElement(name="values")
public List<String> getValues() {
if(values == null) {
values = new ArrayList<>();
}
return values;
}
@XmlAttribute(name = "name")
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
@XmlAttribute(name = "unit")
public void setUnit(String unit) {
this.unit = unit;
}
public String getUnit() {
return unit;
}
}