У меня есть отлично работающее решение для маршалирования объектов в окончательный XML:
final String XSD_FILE_NAME = "my.xsd"
public void writeToFile(MyFile myFile) {
try (OutputStream writer = new FileOutputStream(exactFilePath)) {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setSchema(resourceLoader.getResource("classpath:file/my.xsd"));
marshaller.setContextPath("com.my.project.type");
marshaller.setMarshallerProperties(ImmutableMap.of(
javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE,
javax.xml.bind.Marshaller.JAXB_NO_NAMESPACE_SCHEMA_LOCATION, "my.xsd"
));
marshaller.afterPropertiesSet();
XMLStreamWriter streamWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(writer, "UTF-8");
StAXResult result = new StAXResult(streamWriter);
marshaller.marshal(myFile, result);
streamWriter.close();
} catch (IOException | XMLStreamException e) {
throw e;
}
}
Но я понял, что в конечном XML-файле для пролога используются ТОЛЬКО одинарные кавычки (<?xml ...>
). Но для каждого другого атрибута в корневых и дочерних элементах двойные кавычки:
<?xml version='1.0' encoding='UTF-8'?>
<myFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" attribute1="1" attribute2="2">
<myChild/>
</myFile>
Как настроить использование двойных кавычек и для пролога XML?