с использованием Jackson XML и StAX XmlStreamwriter Я пытаюсь вывести данные в файл XML. Первый класс ниже - это POJO, который составляет root элемент ...
@JacksonXmlRootElement(namespace = "http://ACORD.org/Standards/Life/2", localName = "TXLife")
publi c class TXLife {
@JacksonXmlProperty(localName = "Version", isAttribute = true)
private String version;
@JacksonXmlElementWrapper(useWrapping = false)
private List<TXLifeRequest> txLifeRequestListings = new ArrayList<TXLifeRequest>();
public TXLife() {
super();
}
public TXLife(String version) {
super();
this.version = version;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public void add(TXLifeRequest txLifeRequest) {
txLifeRequestListings.add(txLifeRequest);
}
public List<TXLifeRequest> getContent() {
return txLifeRequestListings;
}
}
TXLifeRequest. java
@JacksonXmlRootElement
publi c class TXLifeRequest расширяет TXLife {
@JacksonXmlProperty(localName = "TransRefGUID")
private String transRefGUID;
@JacksonXmlProperty(localName = "TransType")
private TransType transType;
@JacksonXmlProperty(localName = "TransExeDate")
private String transExeDate;
@JacksonXmlProperty(localName = "TransExeTime")
private String transExeTime;
@JacksonXmlElementWrapper(useWrapping = false)
private List<OLifE> oLifEList;
public TXLifeRequest(String transRefGUID, TransType transType,
String transExeDate, String transExeTime, List<OLifE> oLifEList) {
this.transRefGUID = transRefGUID;
this.transType = transType;
this.transExeDate = transExeDate;
this.transExeTime = transExeTime;
this.oLifEList = oLifEList;
}
public TXLifeRequest() {
}
public String getTransRefGUID() {
return transRefGUID;
}
Это метод в XML классе построителя, который пытается записать в XML ...
public void writeToXml(String path, List<TXLifeRequest> txLifeRequestList) throws IOException, XMLStreamException, TransformerConfigurationException {
try (OutputStream os = Files.newOutputStream(Paths.get(path))) {
StringWriter sw = new StringWriter();
XMLOutputFactory outputFactory = XMLOutputFactory.newFactory();
XMLStreamWriter writer = null;
XmlMapper xmlMapper = new XmlMapper();
try {
writer = outputFactory.createXMLStreamWriter(sw);
writer.writeStartDocument("utf-8", "1.0");
writer.writeStartElement("TXLife");
writer.writeAttribute("xmlns", "", "xsi", XMLNSXSIURL);
xmlMapper.writeValue(writer, txLifeRequestList);
writer.writeEndElement();
writer.writeEndDocument();
} finally {
if (writer != null) {
writer.flush();
writer.close();
}
}
} catch (FileNotFoundException fnf) {
fnf.getMessage();
}
}
Я считаю, что строка writer.writeStartElement("TXLife");
может быть избыточной, поскольку я настроил хотя бы одно из пространств имен в TJLife POJO. Я получаю сообщение об ошибке:
javax. xml .stream.XMLStreamException: Невозможно вывести объявление XML, после того, как другой вывод уже сделан.
txLifeRequestList , который передается как второй параметр в вызове xmlmapper.writeValue , содержит список данных для заполнения различных элементов / атрибутов. Я понимаю, что ошибка сообщает, что xmlmapper пытается записать элемент root, когда уже есть вывод, который был записан в XML. Что-то отсутствует, вышло из строя, или я неправильно понял, как это работает с добавлением нескольких пространств имен к элементу root с использованием Jackson XML. Я должен отметить, что JAXB не является вариантом, так как я использую openjdk 12, который не поддерживает этот API.
Любые предложения будут с благодарностью. Спасибо!