JMS - отправка сообщения объекта - PullRequest
3 голосов
/ 28 ноября 2011

Я хочу отправить объектное сообщение в jms и получить исключение времени выполнения. Пожалуйста, предложите мне возможные решения.

JMS код:

ObjectMessage objMessage = session.createObjectMessage();
        MessageData data = new MessageData();
        objMessage.setObject(data);
        sender.send(objMessage);

Исключение найдено на консоли:

    log4j:WARN No appenders could be found for logger         org.jboss.remoting.transport.socket.MicroSocketClientInvoker).
    log4j:WARN Please initialize the log4j system properly.
    java.lang.RuntimeException: com.test.SendJMSMessage
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at org.jboss.messaging.util.StreamUtils.writeObject(StreamUtils.java:249)
at org.jboss.jms.message.JBossObjectMessage.doWriteObject(JBossObjectMessage.java:141)
at org.jboss.messaging.core.impl.message.MessageSupport.getPayloadAsByteArray(MessageSupport.java:216)
at org.jboss.jms.message.JBossObjectMessage.setObject(JBossObjectMessage.java:118)
at org.jboss.jms.message.ObjectMessageProxy.setObject(ObjectMessageProxy.java:59)
at com.test.SendJMSMessage.example(SendJMSMessage.java:36)
at com.test.SendJMSMessage.main(SendJMSMessage.java:130)

После создания нового класса MessageData вместо создания подкласса MessageData, когда я запускаю код, я получаю исключения, как показано ниже:

18:26:08,297 ERROR [JmsGatewayListener] Problems invoking method <process>
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.jboss.soa.esb.listeners.gateway.JmsGatewayListener.doRun(JmsGatewayListener.java:161)
at org.jboss.soa.esb.listeners.lifecycle.AbstractThreadedManagedLifecycle.run(AbstractThreadedManagedLifecycle.java:115)
at java.lang.Thread.run(Unknown Source)

Caused by: java.lang.RuntimeException: No ClassLoaders found for: com.test.MessageData
at org.jboss.mx.loading.LoadMgr3.beginLoadTask(LoadMgr3.java:306)
at org.jboss.mx.loading.RepositoryClassLoader.loadClassImpl(RepositoryClassLoader.java:521)
at org.jboss.mx.loading.RepositoryClassLoader.loadClass(RepositoryClassLoader.java:415)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at java.io.ObjectInputStream.resolveClass(Unknown Source)
at org.jboss.messaging.util.ObjectInputStreamWithClassLoader.resolveClass(ObjectInputStreamWithClassLoader.java:78)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at org.jboss.messaging.util.StreamUtils.readObject(StreamUtils.java:154)
at org.jboss.messaging.core.impl.message.MessageSupport.readPayload(MessageSupport.java:405)
at org.jboss.jms.message.JBossObjectMessage.getObject(JBossObjectMessage.java:126)
at org.jboss.jms.message.ObjectMessageProxy.getObject(ObjectMessageProxy.java:68)
at org.jboss.soa.esb.listeners.gateway.PackageJmsMessageContents.setESBMessageBody(PackageJmsMessageContents.java:165)
at org.jboss.soa.esb.listeners.gateway.PackageJmsMessageContents.process(PackageJmsMessageContents.java:89)
... 7 more

Здесь я пытаюсь отправить объектное сообщение на код сервера esb. Любые предложения в окне консоли, как указано выше, пожалуйста?

Ответы [ 2 ]

6 голосов
/ 28 ноября 2011

Исключение составляет "другая сторона":

at java.io.ObjectInputStream.resolveClass(Unknown Source)
at org.jboss.messaging.util.ObjectInputStreamWithClassLoader.resolveClass(ObjectInputStreamWithClassLoader.java:78)

Итак, вы отправили сообщение, но не можете десериализовать его на другом конце. Зачем? Потому что «другая сторона» не имеет определения класса MessageData в своем пути к классам. Если это другое приложение, вам нужно извлечь MessageData в общую банку и включить его в оба приложения.

Сериализация не волшебство; сторона сериализации и десериализации должна иметь доступ к одному и тому же определению класса (файл .class), а их версии должны быть одинаковыми или, по крайней мере, совместимыми.

4 голосов
/ 28 ноября 2011

Вашему классу MessageData необходимо реализовать java.io.Serializable. Может ли это быть проблемой? Должна быть дополнительная трассировка стека исключений «причина».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...