Results 1 to 3 of 3

Thread: FlatFileItemWriter: Underlying CharsetEncoder not configurable

Threaded View

  1. #1
    Join Date
    Apr 2007
    Location
    France
    Posts
    23

    Default FlatFileItemWriter: Underlying CharsetEncoder not configurable

    Hello,

    While trying to write unsupported characters to a file (using the FlatFileItemWriter "encoding" property), I'm getting an UnmappableCharacterException:

    Code:
    ERROR [main] org.springframework.transaction.support.TransactionSynchronizationUtils | TransactionSynchronization.afterCompletion threw exception
    org.springframework.batch.support.transaction.FlushFailedException: Could not write to output buffer
            at org.springframework.batch.support.transaction.TransactionAwareBufferedWriter$1.afterCompletion(TransactionAwareBufferedWriter.java:71)
            at org.springframework.transaction.support.TransactionSynchronizationUtils.invokeAfterCompletion(TransactionSynchronizationUtils.java:157)
            at org.springframework.transaction.support.AbstractPlatformTransactionManager.invokeAfterCompletion(AbstractPlatformTransactionManager.java:974)
            at org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerAfterCompletion(AbstractPlatformTransactionManager.java:949)
            at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:777)
            at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:701)
            at org.springframework.batch.core.step.tasklet.TaskletStep$2.doInChunkContext(TaskletStep.java:304)
            at org.springframework.batch.core.scope.context.StepContextRepeatCallback.doInIteration(StepContextRepeatCallback.java:76)
            at org.springframework.batch.repeat.support.RepeatTemplate.getNextResult(RepeatTemplate.java:367)
            at org.springframework.batch.repeat.support.RepeatTemplate.executeInternal(RepeatTemplate.java:215)
            at org.springframework.batch.repeat.support.RepeatTemplate.iterate(RepeatTemplate.java:143)
            at org.springframework.batch.core.step.tasklet.TaskletStep.doExecute(TaskletStep.java:242)
            at org.springframework.batch.core.step.AbstractStep.execute(AbstractStep.java:198)
            at org.springframework.batch.core.job.AbstractJob.handleStep(AbstractJob.java:348)
            at org.springframework.batch.core.job.flow.FlowJob.access$0(FlowJob.java:1)
            at org.springframework.batch.core.job.flow.FlowJob$JobFlowExecutor.executeStep(FlowJob.java:135)
            at org.springframework.batch.core.job.flow.support.state.StepState.handle(StepState.java:60)
            at org.springframework.batch.core.job.flow.support.SimpleFlow.resume(SimpleFlow.java:144)
            at org.springframework.batch.core.job.flow.support.SimpleFlow.start(SimpleFlow.java:124)
            at org.springframework.batch.core.job.flow.FlowJob.doExecute(FlowJob.java:103)
            at org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:250)
            at org.springframework.batch.core.launch.support.SimpleJobLauncher$1.run(SimpleJobLauncher.java:110)
            at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:49)
            at org.springframework.batch.core.launch.support.SimpleJobLauncher.run(SimpleJobLauncher.java:105)
            at org.springframework.batch.core.launch.support.CommandLineJobRunner.start(CommandLineJobRunner.java:291)
            at org.springframework.batch.core.launch.support.CommandLineJobRunner.main(CommandLineJobRunner.java:448)
            at xxx
    Caused by: java.nio.charset.UnmappableCharacterException: Input length = 1
            at java.nio.charset.CoderResult.throwException(CoderResult.java:261)
            at sun.nio.cs.StreamEncoder$CharsetSE.implWrite(StreamEncoder.java:398)
            at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:136)
            at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:146)
            at java.io.Writer.write(Writer.java:126)
            at org.springframework.batch.support.transaction.TransactionAwareBufferedWriter$1.afterCompletion(TransactionAwareBufferedWriter.java:67)
            ... 26 more
    So far, that is expected since my target encoding has no match for my data.
    The problem is that I can't tell the writer not to fail when such event occurs.

    Since FlatFileItemWriter (2.0.3) uses java.nio.channels.Channels.newWriter(WritableByteC hannel, String) instead of java.nio.channels.Channels.newWriter(WritableByteC hannel, CharsetEncoder, int) (in a private inner class), I can't find an easy way to configure the underlying CharsetEncoder in order to set the unmappableCharacterAction without duplicating lots of code.

    Is there an easy way to achieve this?

    Thanks
    Last edited by Fiouz; Sep 10th, 2009 at 04:47 AM. Reason: Specify 2.0.3 version

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •