Пакетный процесс — не удалось десериализовать объект

Недавно я играл с пакетным процессором, и при тестировании он работал нормально.

С тех пор я добавил его в наш основной поток проекта, и у меня возникла странная проблема.

Сам пакетный процесс не содержит ничего, кроме 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;
}

Я только что проверил и могу выполнить пакетную обработку того же файла локально, так что это проблема с этой конечной точкой или ее конфигурацией. Могу ли я настроить эту конечную точку, чтобы поместить файл во временный каталог и прочитать его оттуда?


person cerestorm    schedule 25.05.2017    source источник
comment
Добавлено обновление, проблема, похоже, связана с конечной точкой, созданной в середине потока.   -  person cerestorm    schedule 30.05.2017


Ответы (3)


Пакетное задание разбивает исходную полезную нагрузку (должна быть коллекция или итератор), сериализует разделенные сообщения (включая полезную нагрузку) в свою постоянную пакетную очередь.

Является ли полезная нагрузка вашего сообщения (после разделения) сериализуемой?

Другая проблема заключается в сохранении: попробуйте проверить «Очистить данные приложения» в конфигурации запуска. Если это не поможет, удалите каталог /mule/.mule/.mule/ в своей рабочей области.

Вы, наверное, знаете документацию пакетного задания:

https://docs.mulesoft.com/mule-user-guide/v/3.8/batch-processing

person Roger Butenuth    schedule 26.05.2017
comment
Привет, Роджер, LineIterator должен возвращать строки, которые я мог обрабатывать ранее. Я попытался, как вы предложили, очистить данные приложения и удалить каталог / .mule, но проблема не устранена. - person cerestorm; 30.05.2017
comment
Вы пробовали в отладчике? Что, если вы замените пакет разделителем коллекции или циклом для каждого цикла? - person Roger Butenuth; 31.05.2017
comment
Привет, Роджер, я обновил свой оригинальный пост более подробно. Мне нужно выяснить, вызывает ли эта проблема то, как я сам создаю конечную точку. Меня привлекли к другой задаче на работе, когда у меня будет возможность повторно посетить этот поток, я обновлю свои выводы. - person cerestorm; 02.06.2017

В итоге мы выяснили проблему.

Мы использовали переменную сеанса типа Immutable Map, и, хотя она нигде не использовалась в пакетном процессе, вызывала указанную выше ошибку.

После удаления этой переменной на этапе пакетного ввода проблем больше не возникало.

person cerestorm    schedule 15.08.2017

В любой точке Studio Mule -> «Очистить данные приложения» у меня сработало, как сказал @rbutenuth

person Marcos    schedule 09.10.2018