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

Запускаю локально 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
16.05.2019, 16:21
    #39814155
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ActiveMQ: Serializable class not available to broker
Так там метод звучит как setTrustedPackage, значит аргументами должен быть список пакетов а не классов.
...
Рейтинг: 0 / 0
16.05.2019, 17:06
    #39814185
Molasar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ActiveMQ: Serializable class not available to broker
maytonТак там метод звучит как setTrustedPackage, значит аргументами должен быть список пакетов а не классов.

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

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

Проверь.
...
Рейтинг: 0 / 0
17.05.2019, 09:13
    #39814409
Molasar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ActiveMQ: Serializable class not available to broker
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
17.05.2019, 09:53
    #39814429
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ActiveMQ: Serializable class not available to broker
Molasar,
Не пойму. Ты тутор не нашел или он с ошибкой?
...
Рейтинг: 0 / 0
17.05.2019, 09:57
    #39814432
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ActiveMQ: Serializable class not available to broker
Molasar,

ну и что дальше? Говори работает или нет. Есть стекртрейс?
...
Рейтинг: 0 / 0
17.05.2019, 10:48
    #39814475
Molasar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ActiveMQ: Serializable class not available to broker
Petro123Molasar,
Не пойму. Ты тутор не нашел или он с ошибкой?
Тутор не работает у меня
...
Рейтинг: 0 / 0
17.05.2019, 10:55
    #39814480
Molasar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ActiveMQ: Serializable class not available to broker
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
17.05.2019, 11:23
    #39814494
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ActiveMQ: Serializable class not available to broker
Попробуй так

Код: 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
17.05.2019, 14:24
    #39814617
Molasar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ActiveMQ: Serializable class not available to broker
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
17.05.2019, 14:27
    #39814619
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ActiveMQ: Serializable class not available to broker
К чему полумеры. Добавь звездочкой. Трус - не играет в хоккей.
...
Рейтинг: 0 / 0
17.05.2019, 14:30
    #39814625
Molasar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ActiveMQ: Serializable class not available to broker
Molasar,

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

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

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


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