BATCH-1975: StaxEventItemWriter namespace added to elements after

restart
This commit is contained in:
jpraet
2013-03-01 20:25:11 +01:00
committed by Michael Minella
parent 83c5fa2eaa
commit 3f12a0f9a4
2 changed files with 131 additions and 2 deletions

View File

@@ -438,6 +438,7 @@ public class StaxEventItemWriter<T> extends AbstractItemStreamItemWriter<T> impl
}
delegateEventWriter = createXmlEventWriter(outputFactory, bufferedWriter);
eventWriter = new NoStartEndDocumentStreamWriter(delegateEventWriter);
initNamespaceContext(delegateEventWriter);
if (!restarted) {
startDocument(delegateEventWriter);
}
@@ -491,6 +492,39 @@ public class StaxEventItemWriter<T> extends AbstractItemStreamItemWriter<T> impl
protected Result createStaxResult() throws Exception {
return StaxUtils.getResult(eventWriter);
}
/**
* Inits the namespace context of the XMLEventWriter:
* <ul>
* <li>rootTagNamespacePrefix for rootTagName</li>
* <li>any other xmlns namespace prefix declarations in the root element attributes</li>
* </ul>
*
* @param writer XML event writer
* @throws XMLStreamException
*/
protected void initNamespaceContext(XMLEventWriter writer) throws XMLStreamException {
if (StringUtils.hasText(getRootTagNamespace())) {
if(StringUtils.hasText(getRootTagNamespacePrefix())) {
writer.setPrefix(getRootTagNamespacePrefix(), getRootTagNamespace());
} else {
writer.setDefaultNamespace(getRootTagNamespace());
}
}
if (!CollectionUtils.isEmpty(getRootElementAttributes())) {
for (Map.Entry<String, String> entry : getRootElementAttributes().entrySet()) {
String key = entry.getKey();
if (key.startsWith("xmlns")) {
String prefix = "";
if (key.contains(":")) {
prefix = key.substring(key.indexOf(":") + 1);
}
System.err.println("registering prefix: " +prefix + "=" + entry.getValue());
writer.setPrefix(prefix, entry.getValue());
}
}
}
}
/**
* Writes simple XML header containing: