Свойство ActiveMQ SERIALIZABLE_PACKAGES, отправляющее ObjectMessage - PullRequest
0 голосов
/ 06 ноября 2018

Запуск простого проекта с использованием SpringBoot и создание брокера ActiveMQ через @Configuration.

В методе Main перед SpringApplication.run я установил это;

System.setProperty("org.apache.activemq.SERIALIZABLE_PACKAGES", "*");

Доверять всем пакетам при создании посредника и ActiveMQConnectionFactory;

factory.setTrustAllPackages(true);

Маршрут:

from("timer://getStuffDone?period=5s") //just a test
    .to("bean://superProcessor?method=process")  // new a simple object and puts it as body
    .to("activemq:queue:superQueue?jmsMessageType=Object");

Объект:

public class SuperObject {
public String name;}

НО, я получаю это:

Причина: org.apache.camel.NoTypeConversionAvailableException: нет преобразователя типа, доступного для преобразования из типа: net.supertest.SuperObject в требуемый тип: java.io.Serializable со значением net.supertest.SuperObject@2b38b4cb в org. apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo (BaseTypeConverterRegistry.java:206) ~ [camel-core-2.22.1.jar: 2.22.1] в org.apache.camel.component.jms.JmsBinding.createJmsMessageForType (JmsBinding.java:672) ~ [camel-jms-2.22.1.jar: 2.22.1]

Если я реализую Serializable, он работает хорошо ..., но я ожидал, что он обработает это автоматически, как я использовал подстановочный знак в SERIALIZABLE_PACKAGES. Любые подсказки, почему это не работает, как ожидалось? ActiveMQ версия 5.15.6

1 Ответ

0 голосов
/ 06 ноября 2018

Нет, свойство org.apache.activemq.SERIALIZABLE_PACKAGES не освобождает вас от реализации Serializable. Это просто настройка безопасности в брокере, по умолчанию блокирующая маршал / демаршал ObjectMessage.

Чтобы разрешить сериализацию ObjectMessage, вы должны настроить необходимые пакеты в брокере с org.apache.activemq.SERIALIZABLE_PACKAGES и на клиенте с factory.setTrustedPackages.

Независимо от этой конфигурации вы должны реализовать свой объект как Serializable.

Из документов ActiveMQ :

Объекты ObjectMessage зависят от сериализации Java полезной нагрузки маршала / демаршала объекта. Этот процесс обычно считается небезопасным , поскольку вредоносная нагрузка может использовать хост-систему. Вот почему, начиная с версий 5.12.2 и 5.13.0, ActiveMQ принуждает пользователей явным образом вносить в белый список пакеты , которыми можно обмениваться с помощью ObjectMessages.

...