2014-07-19 27 views
1

我要为我CompositeItemProcessor一个SkipListener多模型项目这是2个处理器的处理像这样的项目的列表:SkipListener链条处理器和

读卡器(itemRead) - > ValidationProcessor(itemRead,项目) - > WrapProcessor (项目,项)

的问题是当我想从第2处理器的项目太那个SkipListener只接受在 onSkipInProcess
onSkipInProcess(ValidationItem itemRead, Throwable arg1)
示范项目(itemRead,希望我是错在这里),在这个函数里面。

也有很高的机会,WrapProcessor可能会改变输出(根据要求),以类似的东西:WrapProcessor<item, anotherItem>

是否有解决这个问题的方法吗?

我compositeItemProcessor配置:

<bean id="compositeItemProcessor" 
       class="org.springframework.batch.item.support.CompositeItemProcessor"> 
       <property name="delegates"> 
         <list> 
           <bean class="com.mycompany.ValidationProcessor">/ 
           <bean class="com.mycompany.WrapProcessor" /> 
         </list> 
       </property> 
     </bean> 

回答

1

你可以有你的转化对象到自定义跳过例外

class WrapProcessor implements ItemProcessor<ValidationItem, WrappedObject> { 
    O transform(ValidationItem item) { 
    WrappedObject wrapped = new Wrapped(item); 
    if(some condition) { 
     throw new SkipWrappedObject(wrapped); 
    } 
    ... 
    } 
} 

onSkipInProcess(ValidationItem itemRead, Throwable arg1) Arg1可以铸造到SkipWrappedObject广告,您可以访问跳过包装的对象