Проблема маршалинга Xstream с openjdk17

Я только что обновил свое приложение Spring Boot с Java 11 до 17. Я использую Spring Integration с и MessageConverter для преобразования сообщений ActiveMQ Artemis (формат XML) в объекты Java, но XstreamMarshaller class не работает должным образом с openjdk 17. Вот исключение:

      org.springframework.jms.support.converter.MessageConversionException: Could not unmarshal message: ActiveMQMessage[ID:d0af36a0-32ac-11ec-b7ed-9cda3e9bf249]:PERSISTENT/ClientMessageImpl[messageID=1443, durable=true, address=batch_table,userID=d0af36a0-32ac-11ec-b7ed-9cda3e9bf249,properties=TypedProperties[__AMQ_CID=cd8a28dd-32ac-11ec-b7ed-9cda3e9bf249,_AMQ_ROUTING_TYPE=1]]; nested exception is 
org.springframework.oxm.UnmarshallingFailureException: XStream unmarshalling exception; nested exception is com.thoughtworks.xstream.security.ForbiddenClassException 

Вот конфигурация bean-компонента слушателя:

      @Bean
public SimpleMessageListenerContainer messageListenerContainer() {
    SimpleMessageListenerContainer simpleMessageListenerContainer = new SimpleMessageListenerContainer();
    simpleMessageListenerContainer.setConnectionFactory(connectionFactory);
    simpleMessageListenerContainer.setDestinationName(queue);
    simpleMessageListenerContainer.getMessageListener();
    simpleMessageListenerContainer.setConnectLazily(false);
    simpleMessageListenerContainer.setAutoStartup(true);
    simpleMessageListenerContainer.setSessionTransacted(true);
    return simpleMessageListenerContainer;
}

@Bean
public JmsMessageDrivenEndpoint jmsMessageDrivenEndpoint() {
    ChannelPublishingJmsMessageListener channelPublishingJmsMessageListener = new ChannelPublishingJmsMessageListener();
    channelPublishingJmsMessageListener.setRequestChannel(inputChannel());
    channelPublishingJmsMessageListener.setMessageConverter(messageConverter());

    return new JmsMessageDrivenEndpoint(messageListenerContainer(),
            channelPublishingJmsMessageListener);
}

@Bean
MessageConverter messageConverter() {
    XStreamMarshaller marshaller = new XStreamMarshaller();
    Map<String, Class<?>> aliases = new HashMap<>();
    aliases.put("Table", TableMessage.class);
    marshaller.setAliases(aliases);
    MarshallingMessageConverter messageConverter = new MarshallingMessageConverter(marshaller);
    messageConverter.setTargetType(MessageType.MAP);
    return messageConverter;
}

Версии:

  • Пружина загрузки: 2.5.6
  • Xstream: 1.4.18
  • Весенний оксм: 5.3.12

0 ответов

Другие вопросы по тегам