Byłbym wdzięczny za pomoc w tym…
Mam obiekt, który próbuję wysłać w JMS ObjectMessage, wywołując setObject. Ten obiekt zawiera zawartość HashMap, a także kilka innych pól. Kiedy mapa zawiera elementy prymitywne, wiadomość jest dobrze zbudowana. Podobnie, jeśli dodam do Object nieprymitywne pole, które można serializować, również wysyła w porządku.
Oto rub: Za każdym razem, gdy próbuję dodać serializowalny, nieprymitywny obiekt do MAP, otrzymuję następujący MessageFormatException:
javax.jms.MessageFormatException: Only objectified primitive objects, String,
Map and List types are allowed but was: com.abc.ObjectInList
javadoc dla ObjectMessage określa ...
Można używać tylko serializowalnych obiektów Java.
... szach. I ...
Jeśli trzeba wysłać kolekcję obiektów Java, można użyć jednej z klas Collection udostępnionych od JDK 1.2.
... sprawdź dwukrotnie. Chociaż nie mówi to nic o obiektach, które można serializować w kolekcji, przypuszczam, że byłoby to obsługiwane. Czy ja tu robię coś złego? Czy mam po prostu gryźć punktor i tworzyć nowe pole w moim obiekcie najwyższego poziomu, aby nie musieć umieszczać go w Kolekcji?
Używając ActiveMQ 5.2. Następuje stosowne śledzenie stosu.
2011-08-01 21: 06: 05,767 BŁĄD javax.jms.MessageFormatException: Dozwolone są tylko zobiektywizowane obiekty prymitywne, typy ciągów, mapy i listy, ale było to: com.abc.engine.ejb. BasicSchedule @ 58f295b9 typ: klasa c om.abc.engine.ejb.BasicSchedule 2011-08-01 21: 06: 05 767 ERROR at org.apache.activemq.command.ActiveMQMessage.checkValidObject (ActiveMQMessage.java:468) 2011-08-01 21: 06: 05 767 ERROR at org.apache.activemq.command.ActiveMQMapMessage.setObject (ActiveMQMapMessage.java:705) 2011-08-01 21: 06: 05,767 ERROR at com.abc.chronicle.ejb.ChronicleMessageBean.initMessage (ChronicleMessageBean.java:149) 2011-08-01 21: 06: 05,767 ERROR at com.abc.chronicle.ejb.ChronicleMessageBean.send (ChronicleMessageBean.java:125) 2011-08-01 21: 06: 05,767 ERROR at com.abc.chronicle.ejb.ChronicleMessageBean.onMessage (ChronicleMessageBean.java:77) 2011-08-01 21: 06: 05,767 ERROR at sun.reflect.NativeMethodAccessorImpl.invoke0 (metoda macierzysta) 2011-08-01 21: 06: 05,768 ERROR at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) 2011-08-01 21: 06: 05,777 ERROR [com.abc.chronicle.ejb.ChronicleMessageBean] JMS Exception o wysyłaniu wiadomości do SDK.OUTGOING_NOTIFICATION: javax.jms.MessageFormatException: Tylko zobiektywizowane obiekty prymitywne, String, Ma p i typy list są dozwolone, ale były: com.abc.engine.ejb.BasicSchedule@1003b2df type: class com.abc.engine.ejb.BasicSchedule 2011-08-01 21: 06: 05,778 BŁĄD javax.jms.MessageFormatException: Dozwolone są tylko zobiektywizowane obiekty prymitywne, typy String, Map i List, ale było to: com.abc.engine.ejb.BasicSchedule@1003b2df typ: klasa c om.abc.engine.ejb.BasicSchedule 2011-08-01 21: 06: 05 778 BŁĄD w org.apache.activemq.command.ActiveMQMessage.checkValidObject (ActiveMQMessage.java:468) 2011-08-01 21: 06: 05 778 ERROR w org.apache.activemq.command.ActiveMQMapMessage.setObject (ActiveMQMapMessage.java:705) 2011-08-01 21: 06: 05 778 ERROR at com.abc.chronicle.ejb.ChronicleMessageBean.initMessage (ChronicleMessageBean.java:149) 2011-08-01 21: 06: 05,778 BŁĄD w com.abc.chronicle.ejb.ChronicleMessageBean.send (ChronicleMessageBean.java:125) 2011-08-01 21: 06: 05,778 ERROR at com.abc.chronicle.ejb.ChronicleMessageBean.onMessage (ChronicleMessageBean.java:77)