public class StaxEventItemWriter<T> extends AbstractItemStreamItemWriter<T> implements ResourceAwareItemWriterItemStream<T>, org.springframework.beans.factory.InitializingBean
ItemWriter which uses StAX and
Marshaller for serializing object to XML.
This item writer also provides restart, statistics and transaction features
by implementing corresponding interfaces.
The implementation is not thread-safe.| Modifier and Type | Field and Description |
|---|---|
static java.lang.String |
DEFAULT_ENCODING |
static java.lang.String |
DEFAULT_ROOT_TAG_NAME |
static java.lang.Boolean |
DEFAULT_STANDALONE_DOCUMENT |
static java.lang.String |
DEFAULT_XML_VERSION |
| Constructor and Description |
|---|
StaxEventItemWriter() |
| Modifier and Type | Method and Description |
|---|---|
void |
afterPropertiesSet() |
void |
close()
Flush and close the output source.
|
protected javax.xml.transform.Result |
createStaxResult()
Subclasses can override to customize the STAX result.
|
protected javax.xml.stream.XMLEventFactory |
createXmlEventFactory()
Subclasses can override to customize the event factory.
|
protected javax.xml.stream.XMLEventWriter |
createXmlEventWriter(javax.xml.stream.XMLOutputFactory outputFactory,
java.io.Writer writer)
Subclasses can override to customize the writer.
|
protected javax.xml.stream.XMLOutputFactory |
createXmlOutputFactory()
Subclasses can override to customize the factory.
|
protected void |
endDocument(javax.xml.stream.XMLEventWriter writer)
Writes the EndDocument tag manually.
|
java.lang.String |
getEncoding()
Get used encoding.
|
java.util.Map<java.lang.String,java.lang.String> |
getRootElementAttributes()
Get attributes of the root element.
|
java.lang.String |
getRootTagName()
Get the tag name of the root element.
|
java.lang.String |
getRootTagNamespace()
Get the namespace of the root element.
|
java.lang.String |
getRootTagNamespacePrefix()
Get the namespace prefix of the root element.
|
java.lang.Boolean |
getStandalone()
Get used standalone document declaration.
|
java.lang.String |
getVersion()
Get XML version.
|
protected void |
initNamespaceContext(javax.xml.stream.XMLEventWriter writer)
Inits the namespace context of the XMLEventWriter:
rootTagNamespacePrefix for rootTagName
any other xmlns namespace prefix declarations in the root element attributes
|
void |
open(ExecutionContext executionContext)
Open the output source
|
void |
setEncoding(java.lang.String encoding)
Set encoding to be used for output file.
|
void |
setFooterCallback(StaxWriterCallback footerCallback)
footerCallback is called after writing all items but before closing the
file.
|
void |
setForceSync(boolean forceSync)
Flag to indicate that changes should be force-synced to disk on flush.
|
void |
setHeaderCallback(StaxWriterCallback headerCallback)
headerCallback is called before writing any items.
|
void |
setMarshaller(org.springframework.oxm.Marshaller marshaller)
Set Object to XML marshaller.
|
void |
setOverwriteOutput(boolean overwriteOutput)
Set "overwrite" flag for the output file.
|
void |
setResource(org.springframework.core.io.Resource resource)
Set output file.
|
void |
setRootElementAttributes(java.util.Map<java.lang.String,java.lang.String> rootElementAttributes)
Set the root element attributes to be written.
|
void |
setRootTagName(java.lang.String rootTagName)
Set the tag name of the root element.
|
void |
setSaveState(boolean saveState) |
void |
setShouldDeleteIfEmpty(boolean shouldDeleteIfEmpty)
Flag to indicate that the target file should be deleted if no items have
been written (other than header and footer) on close.
|
void |
setStandalone(java.lang.Boolean standalone)
Set standalone document declaration to be used for output XML.
|
void |
setTransactional(boolean transactional)
Flag to indicate that writes should be deferred to the end of a
transaction if present.
|
void |
setVersion(java.lang.String version)
Set XML version to be used for output XML.
|
protected void |
startDocument(javax.xml.stream.XMLEventWriter writer)
Writes simple XML header containing:
xml declaration - defines encoding and XML version
opening tag of the root element and its attributes
If this is not sufficient for you, simply override this method.
|
void |
update(ExecutionContext executionContext)
Get the restart data.
|
void |
write(java.util.List<? extends T> items)
Write the value objects and flush them to the file.
|
getExecutionContextKey, getName, setExecutionContextName, setNamepublic static final java.lang.String DEFAULT_ENCODING
public static final java.lang.String DEFAULT_XML_VERSION
public static final java.lang.Boolean DEFAULT_STANDALONE_DOCUMENT
public static final java.lang.String DEFAULT_ROOT_TAG_NAME
public void setResource(org.springframework.core.io.Resource resource)
setResource in interface ResourceAwareItemWriterItemStream<T>resource - the output filepublic void setMarshaller(org.springframework.oxm.Marshaller marshaller)
marshaller - the Object to XML marshallerpublic void setHeaderCallback(StaxWriterCallback headerCallback)
headerCallback - the StaxWriterCallback to be called prior to writing items.public void setFooterCallback(StaxWriterCallback footerCallback)
footerCallback - the StaxWriterCallback to be called after writing items.public void setTransactional(boolean transactional)
transactional - the flag to setpublic void setForceSync(boolean forceSync)
forceSync - the flag value to setpublic void setShouldDeleteIfEmpty(boolean shouldDeleteIfEmpty)
shouldDeleteIfEmpty - the flag value to setpublic java.lang.String getEncoding()
public void setEncoding(java.lang.String encoding)
encoding - the encoding to be usedpublic java.lang.String getVersion()
public void setVersion(java.lang.String version)
version - the XML version to be usedpublic java.lang.Boolean getStandalone()
public void setStandalone(java.lang.Boolean standalone)
standalone - the XML standalone document declaration to be usedpublic java.lang.String getRootTagName()
public void setRootTagName(java.lang.String rootTagName)
{uri}prefix:root
The prefix is optional (defaults to empty), but if it is specified then
the uri must be provided. In addition you might want to declare other
namespaces using the root
attributes.rootTagName - the tag name to be used for the root elementpublic java.lang.String getRootTagNamespacePrefix()
public java.lang.String getRootTagNamespace()
public java.util.Map<java.lang.String,java.lang.String> getRootElementAttributes()
public void setRootElementAttributes(java.util.Map<java.lang.String,java.lang.String> rootElementAttributes)
rootElementAttributes - attributes of the root elementpublic void setOverwriteOutput(boolean overwriteOutput)
overwriteOutput - If set to true, output file will be overwritten
(this flag is ignored when processing is restart).public void setSaveState(boolean saveState)
public void afterPropertiesSet()
throws java.lang.Exception
afterPropertiesSet in interface org.springframework.beans.factory.InitializingBeanjava.lang.Exception - thrown if error occursInitializingBean.afterPropertiesSet()public void open(ExecutionContext executionContext)
open in interface ItemStreamopen in class ItemStreamSupportexecutionContext - the batch context.ItemStream.open(ExecutionContext)protected javax.xml.stream.XMLEventWriter createXmlEventWriter(javax.xml.stream.XMLOutputFactory outputFactory,
java.io.Writer writer)
throws javax.xml.stream.XMLStreamException
outputFactory - the factory to be used to create an XMLEventWriter.writer - the Writer to be used by the XMLEventWriter for
writing to character streams.javax.xml.stream.XMLStreamException - thrown if error occured creating XMLEventWriter.protected javax.xml.stream.XMLOutputFactory createXmlOutputFactory()
throws javax.xml.stream.FactoryConfigurationError
javax.xml.stream.FactoryConfigurationError - throw if an instance of this factory cannot be loaded.protected javax.xml.stream.XMLEventFactory createXmlEventFactory()
throws javax.xml.stream.FactoryConfigurationError
javax.xml.stream.FactoryConfigurationError - thrown if an instance of this factory cannot be loaded.protected javax.xml.transform.Result createStaxResult()
protected void initNamespaceContext(javax.xml.stream.XMLEventWriter writer)
throws javax.xml.stream.XMLStreamException
writer - XML event writerjavax.xml.stream.XMLStreamException - thrown if error occurs while setting the
prefix or default name space.protected void startDocument(javax.xml.stream.XMLEventWriter writer)
throws javax.xml.stream.XMLStreamException
writer - XML event writerjavax.xml.stream.XMLStreamException - thrown if error occurs.protected void endDocument(javax.xml.stream.XMLEventWriter writer)
throws javax.xml.stream.XMLStreamException
writer - XML event writerjavax.xml.stream.XMLStreamException - thrown if error occurs.public void close()
close in interface ItemStreamclose in class ItemStreamSupportItemStream.close()public void write(java.util.List<? extends T> items) throws org.springframework.oxm.XmlMappingException, java.io.IOException
write in interface ItemWriter<T>items - the value objectjava.io.IOException - thrown if general error occurs.org.springframework.oxm.XmlMappingException - thrown if error occurs during XML Mapping.public void update(ExecutionContext executionContext)
update in interface ItemStreamupdate in class ItemStreamSupportexecutionContext - the batch context.ItemStream.update(ExecutionContext)