Проблема маршалинга 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