Недавно я играл с пакетным процессором, и при тестировании он работал нормально.
С тех пор я добавил его в наш основной поток проекта, и у меня возникла странная проблема.
Сам пакетный процесс не содержит ничего, кроме Logger, а отправляемая ему полезная нагрузка представляет собой LineIterator.
Проблема, с которой я сталкиваюсь, заключается в том, что он генерирует исключение SerializationException. Странно то, что при первом запуске он выдает это исключение во время выполнения. После этого он не будет компилироваться, выдавая то же исключение.
Вот пакетный процесс из потока и соответствующая информация о стеке при сбое сборки. Полная трассировка прикреплена к этому сообщению на форуме Mule: https://forums.mulesoft.com/questions/65671/batch-process-could-not-deserialize-object.html
<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)
Любые идеи о том, что вызывает это странное поведение?
ОБНОВЛЕНИЕ
Просто чтобы добавить немного контекста. Я пытаюсь перебрать строки в файле, который был прочитан с SFTP.
Сама эта конечная точка создается в середине потока в компоненте Java:
@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;
}
Я только что проверил и могу выполнить пакетную обработку того же файла локально, так что это проблема с этой конечной точкой или ее конфигурацией. Могу ли я настроить эту конечную точку, чтобы поместить файл во временный каталог и прочитать его оттуда?