org.springframework.batch.item.xml
Class StaxEventItemWriter<T>

java.lang.Object
  extended by org.springframework.batch.item.util.ExecutionContextUserSupport
      extended by org.springframework.batch.item.xml.StaxEventItemWriter<T>
All Implemented Interfaces:
ResourceAwareItemWriterItemStream<T>, ItemStream, ItemWriter<T>, InitializingBean

public class StaxEventItemWriter<T>
extends ExecutionContextUserSupport
implements ResourceAwareItemWriterItemStream<T>, InitializingBean

An implementation of 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.

Author:
Peter Zozom, Robert Kasanicky

Constructor Summary
StaxEventItemWriter()
           
 
Method Summary
 void afterPropertiesSet()
           
 void close()
          Flush and close the output source.
protected  Result createStaxResult()
          Subclasses can override to customize the stax result.
protected  XMLEventFactory createXmlEventFactory()
          Subclasses can override to customize the event factory.
protected  XMLEventWriter createXmlEventWriter(XMLOutputFactory outputFactory, Writer writer)
          Subclasses can override to customize the writer.
protected  XMLOutputFactory createXmlOutputFactory()
          Subclasses can override to customize the factory.
protected  void endDocument(XMLEventWriter writer)
          Writes the EndDocument tag manually.
 String getEncoding()
          Get used encoding.
 Map<String,String> getRootElementAttributes()
          Get attributes of the root element.
 String getRootTagName()
          Get the tag name of the root element.
 String getRootTagNamespace()
          Get the namespace of the root element.
 String getRootTagNamespacePrefix()
          Get the namespace prefix of the root element.
 String getVersion()
          Get XML version.
 void open(ExecutionContext executionContext)
          Open the output source
 void setEncoding(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(Resource resource)
          Set output file.
 void setRootElementAttributes(Map<String,String> rootElementAttributes)
          Set the root element attributes to be written.
 void setRootTagName(String rootTagName)
          Set the tag name of the root element.
 void setSaveState(boolean saveState)
           
 void setTransactional(boolean transactional)
          Flag to indicate that writes should be deferred to the end of a transaction if present.
 void setVersion(String version)
          Set XML version to be used for output XML.
protected  void startDocument(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(List<? extends T> items)
          Write the value objects and flush them to the file.
 
Methods inherited from class org.springframework.batch.item.util.ExecutionContextUserSupport
getKey, getName, setName
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

StaxEventItemWriter

public StaxEventItemWriter()
Method Detail

setResource

public void setResource(Resource resource)
Set output file.

Specified by:
setResource in interface ResourceAwareItemWriterItemStream<T>
Parameters:
resource - the output file

setMarshaller

public void setMarshaller(org.springframework.oxm.Marshaller marshaller)
Set Object to XML marshaller.

Parameters:
marshaller - the Object to XML marshaller

setHeaderCallback

public void setHeaderCallback(StaxWriterCallback headerCallback)
headerCallback is called before writing any items.


setFooterCallback

public void setFooterCallback(StaxWriterCallback footerCallback)
footerCallback is called after writing all items but before closing the file


setTransactional

public void setTransactional(boolean transactional)
Flag to indicate that writes should be deferred to the end of a transaction if present. Defaults to true.

Parameters:
transactional - the flag to set

setForceSync

public void setForceSync(boolean forceSync)
Flag to indicate that changes should be force-synced to disk on flush. Defaults to false, which means that even with a local disk changes could be lost if the OS crashes in between a write and a cache flush. Setting to true may result in slower performance for usage patterns involving many frequent writes.

Parameters:
forceSync - the flag value to set

getEncoding

public String getEncoding()
Get used encoding.

Returns:
the encoding used

setEncoding

public void setEncoding(String encoding)
Set encoding to be used for output file.

Parameters:
encoding - the encoding to be used

getVersion

public String getVersion()
Get XML version.

Returns:
the XML version used

setVersion

public void setVersion(String version)
Set XML version to be used for output XML.

Parameters:
version - the XML version to be used

getRootTagName

public String getRootTagName()
Get the tag name of the root element.

Returns:
the root element tag name

setRootTagName

public void setRootTagName(String rootTagName)
Set the tag name of the root element. If not set, default name is used ("root"). Namespace URI and prefix can also be set optionally using the notation:
 {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.

Parameters:
rootTagName - the tag name to be used for the root element

getRootTagNamespacePrefix

public String getRootTagNamespacePrefix()
Get the namespace prefix of the root element. Empty by default.

Returns:
the rootTagNamespacePrefix

getRootTagNamespace

public String getRootTagNamespace()
Get the namespace of the root element.

Returns:
the rootTagNamespace

getRootElementAttributes

public Map<String,String> getRootElementAttributes()
Get attributes of the root element.

Returns:
attributes of the root element

setRootElementAttributes

public void setRootElementAttributes(Map<String,String> rootElementAttributes)
Set the root element attributes to be written. If any of the key names begin with "xmlns:" then they are treated as namespace declarations.

Parameters:
rootElementAttributes - attributes of the root element

setOverwriteOutput

public void setOverwriteOutput(boolean overwriteOutput)
Set "overwrite" flag for the output file. Flag is ignored when output file processing is restarted.

Parameters:
overwriteOutput -

setSaveState

public void setSaveState(boolean saveState)

afterPropertiesSet

public void afterPropertiesSet()
                        throws Exception
Specified by:
afterPropertiesSet in interface InitializingBean
Throws:
Exception
See Also:
InitializingBean.afterPropertiesSet()

open

public void open(ExecutionContext executionContext)
Open the output source

Specified by:
open in interface ItemStream
See Also:
ItemStream.open(ExecutionContext)

createXmlEventWriter

protected XMLEventWriter createXmlEventWriter(XMLOutputFactory outputFactory,
                                              Writer writer)
                                       throws XMLStreamException
Subclasses can override to customize the writer.

Parameters:
outputFactory -
writer -
Returns:
an xml writer
Throws:
XMLStreamException

createXmlOutputFactory

protected XMLOutputFactory createXmlOutputFactory()
                                           throws FactoryConfigurationError
Subclasses can override to customize the factory.

Returns:
a factory for the xml output
Throws:
FactoryConfigurationError

createXmlEventFactory

protected XMLEventFactory createXmlEventFactory()
                                         throws FactoryConfigurationError
Subclasses can override to customize the event factory.

Returns:
a factory for the xml events
Throws:
FactoryConfigurationError

createStaxResult

protected Result createStaxResult()
                           throws Exception
Subclasses can override to customize the stax result.

Returns:
a result for writing to
Throws:
Exception

startDocument

protected void startDocument(XMLEventWriter writer)
                      throws XMLStreamException
Writes simple XML header containing: If this is not sufficient for you, simply override this method. Encoding, version and root tag name can be retrieved with corresponding getters.

Parameters:
writer - XML event writer
Throws:
XMLStreamException

endDocument

protected void endDocument(XMLEventWriter writer)
                    throws XMLStreamException
Writes the EndDocument tag manually.

Parameters:
writer - XML event writer
Throws:
XMLStreamException

close

public void close()
Flush and close the output source.

Specified by:
close in interface ItemStream
See Also:
ItemStream.close()

write

public void write(List<? extends T> items)
           throws org.springframework.oxm.XmlMappingException,
                  Exception
Write the value objects and flush them to the file.

Specified by:
write in interface ItemWriter<T>
Parameters:
items - the value object
Throws:
IOException
org.springframework.oxm.XmlMappingException
Exception - if there are errors. The framework will catch the exception and convert or rethrow it as appropriate.

update

public void update(ExecutionContext executionContext)
Get the restart data.

Specified by:
update in interface ItemStream
Parameters:
executionContext - to be updated
See Also:
ItemStream.update(ExecutionContext)


Copyright © 2013 SpringSource. All Rights Reserved.