powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Java [игнор отключен] [закрыт для гостей] / ActiveMQ: Serializable class not available to broker
18 сообщений из 18, страница 1 из 1
ActiveMQ: Serializable class not available to broker
    #39814084
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!

Запускаю локально ActiveMQ как stand-alone.
Разрешаю передавать класс "Event", который "Serializable" и находится в пакете "com.company.messageservicedeliver", указывая в файле "bin\win64\wrapper.conf":

Код: plaintext
wrapper.java.additional.13=-Dorg.apache.activemq.SERIALIZABLE_PACKAGES=com.company.messageservicedeliver.Event

На этой же машине запускаю поочередно два настольных приложения, где прописываю:
Код: java
1.
2.
3.
connectionFactory.setTrustedPackages(
                new ArrayList(Arrays.asList(
                        "com.company.messageservicedeliver.Event")));



При получении сообщения из очереди, ошибка:
авторjavax.jms.JMSException: Failed to build body from content. Serializable class not available to broker. Reason: java.lang.ClassNotFoundException: Forbidden class com.company.activemqpool.Event!
Если указываю:
Код: java
1.
2.
3.
connectionFactory.setTrustedPackages(
                new ArrayList(Arrays.asList(
                        "*")));


Ошибки нет.

Как правильно указывать конкретный класс для передачи?
В какой папке в ActiveMQ необходимо расположить com.company.messageservicedeliver.Event?
...
Рейтинг: 0 / 0
ActiveMQ: Serializable class not available to broker
    #39814155
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так там метод звучит как setTrustedPackage, значит аргументами должен быть список пакетов а не классов.
...
Рейтинг: 0 / 0
ActiveMQ: Serializable class not available to broker
    #39814185
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТак там метод звучит как setTrustedPackage, значит аргументами должен быть список пакетов а не классов.

Указал com.company.messageservicedeliver
Всё равно ошибка
...
Рейтинг: 0 / 0
ActiveMQ: Serializable class not available to broker
    #39814199
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А покажи tutorial на основе которого ты код писал.
...
Рейтинг: 0 / 0
ActiveMQ: Serializable class not available to broker
    #39814202
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА покажи tutorial на основе которого ты код писал.

https://activemq.apache.org/objectmessage
...
Рейтинг: 0 / 0
ActiveMQ: Serializable class not available to broker
    #39814204
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА покажи tutorial на основе которого ты код писал.
Здесь якобы решение проблемы:
https://stackoverflow.com/questions/43105859/serializable-class-not-available-to-broker-java-lang-classnotfoundexception-whi
...
Рейтинг: 0 / 0
ActiveMQ: Serializable class not available to broker
    #39814234
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предположительно ты собрал два бинарника.
Но только один из них имеет сущность Event.

Проверь.
...
Рейтинг: 0 / 0
ActiveMQ: Serializable class not available to broker
    #39814409
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПредположительно ты собрал два бинарника.
Но только один из них имеет сущность Event.

Проверь.
Я упростил задачу до минимума:
- Одно приложение Java SE
- Класс Event
- Класс MainApp с методом main(), отправляющий и тут же принимающий сообщение из очереди.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
ActiveMQConnectionFactory connectionFactory
                = new ActiveMQConnectionFactory(url);
        
        List<String> trustedPackages = new ArrayList<>();
        trustedPackages.add("com.company.messageservicedeliver");
        connectionFactory.setTrustedPackages(trustedPackages);

        try (Connection connection = connectionFactory.createConnection()) {
            ((ActiveMQConnection) connection).setUseAsyncSend(true);
            connection.start();

            try (Session session
                    = connection.createSession(false,
                            Session.AUTO_ACKNOWLEDGE)) {
                try (MessageProducer producer
                        = session.createProducer(session.createQueue(queue))) {
                    producer.setDeliveryMode(DeliveryMode.PERSISTENT);

                    Properties eventProterties = new Properties();
                    eventProterties.put("id", "id002");
                    eventProterties.put("name", "name");
                    eventProterties.put("message", "message");

                    ObjectMessage objectMessage
                            = session.createObjectMessage(
                                    new Event(eventProterties));
                    producer.send(objectMessage);
                }

                try (MessageConsumer consumer
                        = session.createConsumer(session.createQueue(queue))) {
                    Event event = (Event) ((ObjectMessage) consumer.receive())
                            .getObject();
                    System.out.println("Receive: " + event.toString());
                }
            }
        } catch (JMSException ex) {
            throw new MessageServiceException("MainApp error", ex);
        }
...
Рейтинг: 0 / 0
ActiveMQ: Serializable class not available to broker
    #39814429
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molasar,
Не пойму. Ты тутор не нашел или он с ошибкой?
...
Рейтинг: 0 / 0
ActiveMQ: Serializable class not available to broker
    #39814432
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molasar,

ну и что дальше? Говори работает или нет. Есть стекртрейс?
...
Рейтинг: 0 / 0
ActiveMQ: Serializable class not available to broker
    #39814475
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Molasar,
Не пойму. Ты тутор не нашел или он с ошибкой?
Тутор не работает у меня
...
Рейтинг: 0 / 0
ActiveMQ: Serializable class not available to broker
    #39814480
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonMolasar,

ну и что дальше? Говори работает или нет. Есть стекртрейс?
Мой код не работает:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
--- exec-maven-plugin:1.2.1:exec (default-cli) @ MessageServiceDeliver ---
Exception in thread "main" com.company.messageservicedeliver.MessageServiceException: MainApp error
	at com.company.messageservicedeliver.MainApp.main(MainApp.java:111)
Caused by: javax.jms.JMSException: Failed to build body from content. Serializable class not available to broker. Reason: java.lang.ClassNotFoundException: Forbidden class java.util.Properties! This class is not trusted to be serialized as ObjectMessage payload. Please take a look at  http://activemq.apache.org/objectmessage.html  for more information on how to configure trusted classes.
	at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:36)
	at org.apache.activemq.command.ActiveMQObjectMessage.getObject(ActiveMQObjectMessage.java:213)
	at com.company.messageservicedeliver.MainApp.main(MainApp.java:106)
Caused by: java.lang.ClassNotFoundException: Forbidden class java.util.Properties! This class is not trusted to be serialized as ObjectMessage payload. Please take a look at  http://activemq.apache.org/objectmessage.html  for more information on how to configure trusted classes.
	at org.apache.activemq.util.ClassLoadingAwareObjectInputStream.checkSecurity(ClassLoadingAwareObjectInputStream.java:112)
	at org.apache.activemq.util.ClassLoadingAwareObjectInputStream.resolveClass(ClassLoadingAwareObjectInputStream.java:57)
	at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1868)
	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1751)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2042)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1573)
	at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2287)
	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2211)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2069)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1573)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
	at org.apache.activemq.command.ActiveMQObjectMessage.getObject(ActiveMQObjectMessage.java:211)
	... 1 more
------------------------------------------------------------------------
BUILD FAILURE
------------------------------------------------------------------------
Total time: 1.931s
Finished at: Fri May 17 10:49:21 MSK 2019
Final Memory: 5M/107M
...
Рейтинг: 0 / 0
ActiveMQ: Serializable class not available to broker
    #39814494
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй так

Код: java
1.
2.
3.
4.
5.
List<String> trustedPackages = new ArrayList<>();
trustedPackages.add("com.company.messageservicedeliver");
trustedPackages.add("java.util");
trustedPackages.add("java.lang");
connectionFactory.setTrustedPackages(trustedPackages);
...
Рейтинг: 0 / 0
ActiveMQ: Serializable class not available to broker
    #39814617
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПопробуй так

Код: java
1.
2.
3.
4.
5.
List<String> trustedPackages = new ArrayList<>();
trustedPackages.add("com.company.messageservicedeliver");
trustedPackages.add("java.util");
trustedPackages.add("java.lang");
connectionFactory.setTrustedPackages(trustedPackages);


Так работает.
...
Рейтинг: 0 / 0
ActiveMQ: Serializable class not available to broker
    #39814619
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К чему полумеры. Добавь звездочкой. Трус - не играет в хоккей.
...
Рейтинг: 0 / 0
ActiveMQ: Serializable class not available to broker
    #39814625
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molasar,

Работает без добавления пакета "java.lang".

Похоже, что для ActiveMQ необходимо указывать также те пакеты объекты, которых используются в передаваемом классе.
В данном случае это "java.util" для объекта "Properties".

Благодарю за помощь.
...
Рейтинг: 0 / 0
ActiveMQ: Serializable class not available to broker
    #39814628
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonК чему полумеры. Добавь звездочкой. Трус - не играет в хоккей.
Тутор ActiveMQ не рекомендует это делать в продакшн.
Типа хакеры могут передать исполняемый код в объекте))))
...
Рейтинг: 0 / 0
ActiveMQ: Serializable class not available to broker
    #39814629
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настраивать глобальную безопасность в привед-мир приложении. Хм.. Ну такое. Это можно всегда потом сделать.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / ActiveMQ: Serializable class not available to broker
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]