JAXB を使用して、XML Schema ファイルを指定して XML ドキュメントを作成したいと考えています。アプリケーションを Eclipse で実行したところ、問題なく動作しました。後で、実行可能なjarを作成しました。アプリケーションは正常に動作していましたが、ファイルを保存しようとすると、Eclipse には存在しないエラーが発生しました: MalformedByteSequenceException: Invalid byte 2 of 4-byte UTF-8 sequence
プロセス全体を担当する機能があります。
private String generateXML() throws JAXBException, BladWalidacjiXml {
JAXBContext jaxbContext = JAXBContext
.newInstance(RootClass.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
StringWriter xmlDocument = new StringWriter();
jaxbMarshaller.marshal(rootClass, xmlDocument);
String xml = xmlDocument.toString();
try {
XmlParser.validateWithXSD(xml);
} catch (SAXException e) {
throw new BladWalidacjiXml(e);
} catch (IOException e) {
throw new BladWalidacjiXml(e);
}
return xml;
}
public static void validateWithXSD(String xml) throws SAXException, IOException {
validate(new StreamSource(new ByteArrayInputStream(xml.getBytes())));
}
private static boolean validate(StreamSource xmlFile) throws SAXException, IOException{
File schemaFile = new File(SCHEMA_FILE_PATH);
SchemaFactory schemaFactory = SchemaFactory
.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = schemaFactory.newSchema(schemaFile);
javax.xml.validation.Validator validator = schema.newValidator();
validator.validate(xmlFile);
return true;
}
XML のノードには、「ą」、「ę」、「ź」などのポーランドの国記号が含まれている場合があります。それがエラーの原因ではないと思いますが、間違っている可能性があります。
どんな助けにも感謝します。
編集: XML ファイルを作成するコード:
public void saveToFile() throws JAXBException, IOException,
BladWalidacjiXml {
PrintWriter ostream = null;
boolean deleteFile = false;
try {
ostream = new PrintWriter("file.xml", "UTF-8");
ostream.write(generateXML());
} catch (JAXBException e) {
deleteFile = true;
throw e;
} catch (IOException e) {
deleteFile = true;
throw e;
} catch (BladWalidacjiXml e) {
deleteFile = true;
throw e;
} finally {
if (ostream != null) {
ostream.close();
}
}
}