Class FileSplitter
- All Implemented Interfaces:
org.reactivestreams.Subscriber<Message<?>>
,Aware
,BeanClassLoaderAware
,BeanFactoryAware
,BeanNameAware
,DisposableBean
,InitializingBean
,ApplicationContextAware
,Ordered
,ExpressionCapable
,Orderable
,MessageProducer
,DiscardingMessageHandler
,HeaderPropagationAware
,IntegrationPattern
,NamedComponent
,IntegrationManagement
,TrackableComponent
,MessageHandler
,reactor.core.CoreSubscriber<Message<?>>
public class FileSplitter extends AbstractMessageSplitter
AbstractMessageSplitter
implementation to split the File
Message
payload to lines.
With iterator = true
(defaults to true
) this class produces an
Iterator
to process file lines on demand from Iterator.next()
. Otherwise
a List
of all lines is returned to the to further
AbstractMessageSplitter.handleRequestMessage(org.springframework.messaging.Message<?>)
process.
Can accept String
as file path, File
, Reader
or
InputStream
as payload type. All other types are ignored and returned to the
AbstractMessageSplitter
as is.
If setFirstLineAsHeader(String)
is specified, the first line of the content is
treated as a header and carried as a header with the provided name in the messages
emitted for the remaining lines. In this case, if markers are enabled, the line count
in the END marker does not include the header line and, if
applySequence
is true, the header is not included in
the sequence.
- Since:
- 4.1.2
- Author:
- Artem Bilan, Gary Russell, Ruslan Stelmachenko
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
FileSplitter.FileMarker
Nested classes/interfaces inherited from class org.springframework.integration.handler.AbstractReplyProducingMessageHandler
AbstractReplyProducingMessageHandler.RequestHandler
Nested classes/interfaces inherited from interface org.springframework.integration.support.management.IntegrationManagement
IntegrationManagement.ManagementOverrides
-
Field Summary
Fields inherited from class org.springframework.integration.handler.AbstractMessageProducingHandler
messagingTemplate
Fields inherited from class org.springframework.integration.context.IntegrationObjectSupport
EXPRESSION_PARSER, logger
Fields inherited from interface org.springframework.integration.support.management.IntegrationManagement
METER_PREFIX, RECEIVE_COUNTER_NAME, SEND_TIMER_NAME
Fields inherited from interface org.springframework.core.Ordered
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
-
Constructor Summary
Constructors Constructor Description FileSplitter()
Construct a splitter where thesplitMessage(Message)
method returns an iterator and the file is read line-by-line during iteration.FileSplitter(boolean iterator)
Construct a splitter where thesplitMessage(Message)
method returns an iterator, and the file is read line-by-line during iteration, or a list of lines from the file.FileSplitter(boolean iterator, boolean markers)
Construct a splitter where thesplitMessage(Message)
method returns an iterator, and the file is read line-by-line during iteration, or a list of lines from the file.FileSplitter(boolean iterator, boolean markers, boolean markersJson)
Construct a splitter where thesplitMessage(Message)
method returns an iterator, and the file is read line-by-line during iteration, or a list of lines from the file. -
Method Summary
Modifier and Type Method Description protected void
addHeaders(Message<?> message, Map<String,Object> headers)
Allows subclasses to add extra headers to the output messages.void
setCharset(Charset charset)
Set the charset to be used when reading the file, when something other than the default charset is required.void
setFirstLineAsHeader(String firstLineHeaderName)
Specify the header name for the first line to be carried as a header in the messages emitted for the remaining lines.protected Object
splitMessage(Message<?> message)
Subclasses must override this method to split the received Message.protected boolean
willAddHeaders(Message<?> message)
Return true if the subclass needs to add headers in the resulting splits.Methods inherited from class org.springframework.integration.splitter.AbstractMessageSplitter
doInit, getComponentType, getDiscardChannel, getIntegrationPatternType, handleRequestMessage, obtainSizeIfPossible, obtainSizeIfPossible, produceOutput, setApplySequence, setDiscardChannel, setDiscardChannelName, shouldCopyRequestHeaders
Methods inherited from class org.springframework.integration.handler.AbstractReplyProducingMessageHandler
doInvokeAdvisedRequestHandler, getBeanClassLoader, getRequiresReply, handleMessageInternal, hasAdviceChain, onInit, setAdviceChain, setBeanClassLoader, setRequiresReply
Methods inherited from class org.springframework.integration.handler.AbstractMessageProducingHandler
addNotPropagatedHeaders, createOutputMessage, getNotPropagatedHeaders, getOutputChannel, isAsync, messageBuilderForReply, resolveErrorChannel, sendErrorMessage, sendOutput, sendOutputs, setAsync, setNotPropagatedHeaders, setOutputChannel, setOutputChannelName, setSendTimeout, shouldSplitOutput, updateNotPropagatedHeaders
Methods inherited from class org.springframework.integration.handler.AbstractMessageHandler
handleMessage, onComplete, onError, onNext, onSubscribe
Methods inherited from class org.springframework.integration.handler.MessageHandlerSupport
buildSendTimer, destroy, getManagedName, getManagedType, getMetricsCaptor, getOrder, getOverrides, isLoggingEnabled, registerMetricsCaptor, sendTimer, setLoggingEnabled, setManagedName, setManagedType, setOrder, setShouldTrack, shouldTrack
Methods inherited from class org.springframework.integration.context.IntegrationObjectSupport
afterPropertiesSet, extractTypeIfPossible, generateId, getApplicationContext, getApplicationContextId, getBeanDescription, getBeanFactory, getBeanName, getChannelResolver, getComponentName, getConversionService, getExpression, getIntegrationProperties, getIntegrationProperty, getMessageBuilderFactory, getTaskScheduler, isInitialized, setApplicationContext, setBeanFactory, setBeanName, setChannelResolver, setComponentName, setConversionService, setMessageBuilderFactory, setPrimaryExpression, setTaskScheduler, toString
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.springframework.integration.support.management.IntegrationManagement
getThisAs
Methods inherited from interface org.springframework.integration.support.context.NamedComponent
getBeanName, getComponentName
-
Constructor Details
-
FileSplitter
public FileSplitter()Construct a splitter where thesplitMessage(Message)
method returns an iterator and the file is read line-by-line during iteration. -
FileSplitter
public FileSplitter(boolean iterator)Construct a splitter where thesplitMessage(Message)
method returns an iterator, and the file is read line-by-line during iteration, or a list of lines from the file.- Parameters:
iterator
- true to return an iterator, false to return a list of lines.
-
FileSplitter
public FileSplitter(boolean iterator, boolean markers)Construct a splitter where thesplitMessage(Message)
method returns an iterator, and the file is read line-by-line during iteration, or a list of lines from the file. When file markers are enabled (START/END)applySequence
is false by default. If enabled, the markers are included in the sequence size.- Parameters:
iterator
- true to return an iterator, false to return a list of lines.markers
- true to emit start of file/end of file marker messages before/after the data.- Since:
- 4.1.5
-
FileSplitter
public FileSplitter(boolean iterator, boolean markers, boolean markersJson)Construct a splitter where thesplitMessage(Message)
method returns an iterator, and the file is read line-by-line during iteration, or a list of lines from the file. When file markers are enabled (START/END)applySequence
is false by default. If enabled, the markers are included in the sequence size.- Parameters:
iterator
- true to return an iterator, false to return a list of lines.markers
- true to emit start of file/end of file marker messages before/after the data.markersJson
- when true, markers are represented as JSON.- Since:
- 4.2.7
-
-
Method Details
-
setCharset
Set the charset to be used when reading the file, when something other than the default charset is required.- Parameters:
charset
- the charset.
-
setFirstLineAsHeader
Specify the header name for the first line to be carried as a header in the messages emitted for the remaining lines.- Parameters:
firstLineHeaderName
- the header name to carry first line.- Since:
- 5.0
-
splitMessage
Description copied from class:AbstractMessageSplitter
Subclasses must override this method to split the received Message. The return value may be a Collection or Array. The individual elements may be Messages, but it is not necessary. If the elements are not Messages, each will be provided as the payload of a Message. It is also acceptable to return a single Object or Message. In that case, a single reply Message will be produced.- Specified by:
splitMessage
in classAbstractMessageSplitter
- Parameters:
message
- The message.- Returns:
- The result of splitting the message.
-
willAddHeaders
Description copied from class:AbstractMessageSplitter
Return true if the subclass needs to add headers in the resulting splits. If true,AbstractMessageSplitter.addHeaders(org.springframework.messaging.Message<?>, java.util.Map<java.lang.String, java.lang.Object>)
will be called.- Overrides:
willAddHeaders
in classAbstractMessageSplitter
- Parameters:
message
- the message.- Returns:
- true
-
addHeaders
Description copied from class:AbstractMessageSplitter
Allows subclasses to add extra headers to the output messages. Headers may not be removed by this method.- Overrides:
addHeaders
in classAbstractMessageSplitter
- Parameters:
message
- the inbound message.headers
- the headers to add messages to.
-