Mule 批处理进程-无法反序列化对象

Mule 批处理进程-无法反序列化对象,mule,deserialization,mule-studio,batching,Mule,Deserialization,Mule Studio,Batching,我最近一直在玩批处理程序,在测试中它工作得很好 我已经把它添加到我们的主要项目流程中,我遇到了一个奇怪的问题 批处理过程本身只包含一个记录器,发送给它的负载是一个LineIterator 我遇到的问题是它抛出了一个SerializationException。奇怪的是,它第一次运行时会在运行时抛出该异常。之后,它将不会编译,并抛出相同的异常 以下是流中的批处理过程以及构建失败时的相关堆栈信息。完整跟踪附在Mule论坛上的这篇文章中: 我刚刚检查过,可以在本地批处理同一个文件,所以这是该端点或其配

我最近一直在玩批处理程序,在测试中它工作得很好

我已经把它添加到我们的主要项目流程中,我遇到了一个奇怪的问题

批处理过程本身只包含一个记录器,发送给它的负载是一个LineIterator

我遇到的问题是它抛出了一个SerializationException。奇怪的是,它第一次运行时会在运行时抛出该异常。之后,它将不会编译,并抛出相同的异常

以下是流中的批处理过程以及构建失败时的相关堆栈信息。完整跟踪附在Mule论坛上的这篇文章中:


我刚刚检查过,可以在本地批处理同一个文件,所以这是该端点或其配置的问题。我是否可以将此端点配置为将文件放在临时目录中并从那里读取它?

批处理作业拆分原始负载必须是收集或迭代器将拆分的消息(包括负载)序列化到其持久批处理队列中

拆分后的消息负载是否可序列化

另一个问题是持久性:尝试在运行配置中检查清除应用程序数据。如果没有帮助,请删除工作区中的目录/mule/.mule/.mule/

您可能知道批处理作业文档:


我们最终发现了这个问题

我们使用的是一个不可变映射类型的会话变量,虽然没有在批处理过程中的任何地方使用,但导致了上述错误


在将此变量作为批处理输入阶段的一部分删除后,没有进一步的问题。

在anypoint Studio Mule->Clear Application Data为我工作,正如@rbutenuth所说的那样。

您好,LineIterator应该返回字符串,我以前可以批处理这些字符串。我尝试按照您的建议清除应用程序数据并删除/.mule目录,但问题仍然存在。您尝试过使用调试器吗?如果你用一个集合spliiter或者一个for-each循环来替换这个批呢?嗨,罗杰,我更新了我的原始帖子,有更多的细节。我需要研究是否是我自己实例化端点的方式导致了这个问题的出现。我在工作中被拉到了另一个任务上,当我有机会重新访问此流时,我将使用我的发现进行更新。添加了更新后,问题似乎与流中创建的端点有关。
 <batch:job name="revenue-batch-Flow" block-size="10">
 <batch:process-records>
     <batch:step name="Batch_Step" accept-expression="#[!org.apache.commons.lang.StringUtils.isBlank( payload )]">
         <logger message="#[payload]" level="INFO" doc:name="Logger"/>
     </batch:step>
 </batch:process-records>
</batch:job>

 Caused by: com.esotericsoftware.kryo.KryoException: java.lang.UnsupportedOperationException
 Serialization trace:
 value (org.mule.transformer.types.TypedValue)
 properties (org.mule.session.DefaultMuleSession)
 session (org.mule.DefaultMuleEvent)
 muleEvent (com.mulesoft.module.batch.DefaultBatchJobInstance)
    @Override
public Object onCall(MuleEventContext muleEventContext) throws Exception {

    String sftpUri = muleEventContext.getMessage().getProperty( "sesSftpUri", PropertyScope.SESSION);

    EndpointBuilder endpointBuilder = muleEventContext.getMuleContext().getEndpointFactory().getEndpointBuilder( sftpUri );
    endpointBuilder.addMessageProcessor(new MessageFilter(new FilenameWildcardFilter(muleEventContext.getMessage().getProperty( "sesFileName", PropertyScope.SESSION)) ));

    InboundEndpoint inboundEndpoint = endpointBuilder.buildInboundEndpoint();

    MuleMessage muleMessage = inboundEndpoint.request(30000L);

    return muleMessage;
}