0 0

javax.jms.MessageFormatException: Object cannot be serialized30

在发送Jms消息时候
session = m_topicConnection.createTopicSession(false,Session.CLIENT_ACKNOWLEDGE);
TopicPublisher sender = session.createPublisher(topic);
ObjectMessage om = session.createObjectMessage(myObject);


myObject里我放了一个HashMap, HashMap里放了一个这样的Exception类
class GeneralException extends RuntimeException implements GeneralExceptionConstants

这时候在执行到
ObjectMessage om = session.createObjectMessage(myObject);
时 报了这样的错:
javax.jms.MessageFormatException: Object cannot be serialized


这个类实现的GeneralExceptionConstants已经继承了Serializable 而且这个类里面的子类我也实现了Serializable。 我现在搞不懂为什么还报这个错了, 请问大家有什么好的建议吗 是不是我漏了什么东西。

下面是我这个类的源代码 请有空帮个我看下 感激不尽!

问题补充:
fancyboy2050 写道
你把报错的堆栈贴上来看看吧,就这样看不出来什么东西。

2011-11-14 14:25:03,968;[JMS SessionPool Worker-2];ERROR;Extractor;Problem handling JMS message, rolling back.
javax.jms.MessageFormatException: Object cannot be serialized
	at org.jboss.mq.SpyObjectMessage.setObject(SpyObjectMessage.java:83)
	at org.jboss.mq.SpySession.createObjectMessage(SpySession.java:306)
	at com.globalsight.cxe.adaptermdb.BaseAdapterMDB.publishToJMS(BaseAdapterMDB.java:320)
	at com.globalsight.cxe.adaptermdb.BaseAdapterMDB.onMessage(BaseAdapterMDB.java:242)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.jboss.invocation.Invocation.performCall(Invocation.java:345)
	at org.jboss.ejb.MessageDrivenContainer$ContainerInterceptor.invoke(MessageDrivenContainer.java:475)
	at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:185)
	at org.jboss.ejb.plugins.CallValidationInterceptor.invoke(CallValidationInterceptor.java:48)
	at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:105)
	at org.jboss.ejb.plugins.AbstractTxInterceptorBMT.invokeNext(AbstractTxInterceptorBMT.java:153)
	at org.jboss.ejb.plugins.MessageDrivenTxInterceptorBMT.invoke(MessageDrivenTxInterceptorBMT.java:32)
	at org.jboss.ejb.plugins.MessageDrivenInstanceInterceptor.invoke(MessageDrivenInstanceInterceptor.java:87)
	at org.jboss.ejb.plugins.RunAsSecurityInterceptor.invoke(RunAsSecurityInterceptor.java:94)
	at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:192)
	at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:122)
	at org.jboss.ejb.MessageDrivenContainer.internalInvoke(MessageDrivenContainer.java:389)
	at org.jboss.ejb.Container.invoke(Container.java:870)
	at org.jboss.ejb.plugins.jms.JMSContainerInvoker.invoke(JMSContainerInvoker.java:962)
	at org.jboss.ejb.plugins.jms.JMSContainerInvoker$MessageListenerImpl.onMessage(JMSContainerInvoker.java:1248)
	at org.jboss.jms.asf.StdServerSession.onMessage(StdServerSession.java:256)
	at org.jboss.mq.SpyMessageConsumer.sessionConsumerProcessMessage(SpyMessageConsumer.java:904)
	at org.jboss.mq.SpyMessageConsumer.addMessage(SpyMessageConsumer.java:159)
	at org.jboss.mq.SpySession.run(SpySession.java:351)
	at org.jboss.jms.asf.StdServerSession.run(StdServerSession.java:180)
	at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:743)
	at java.lang.Thread.run(Thread.java:619)
2011-11-14 14:25:03,968;[JMS SessionPool Worker-2];ERROR;Extractor;Problem rolling back:
java.lang.IllegalStateException: setRollbackOnly should not be access for user managed Tx
	at org.jboss.ejb.MessageDrivenEnterpriseContext$MessageDrivenContextImpl.setRollbackOnly(MessageDrivenEnterpriseContext.java:202)
	at com.globalsight.cxe.adaptermdb.BaseAdapterMDB.onMessage(BaseAdapterMDB.java:271)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.jboss.invocation.Invocation.performCall(Invocation.java:345)
	at org.jboss.ejb.MessageDrivenContainer$ContainerInterceptor.invoke(MessageDrivenContainer.java:475)
	at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:185)
	at org.jboss.ejb.plugins.CallValidationInterceptor.invoke(CallValidationInterceptor.java:48)
	at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:105)
	at org.jboss.ejb.plugins.AbstractTxInterceptorBMT.invokeNext(AbstractTxInterceptorBMT.java:153)
	at org.jboss.ejb.plugins.MessageDrivenTxInterceptorBMT.invoke(MessageDrivenTxInterceptorBMT.java:32)
	at org.jboss.ejb.plugins.MessageDrivenInstanceInterceptor.invoke(MessageDrivenInstanceInterceptor.java:87)
	at org.jboss.ejb.plugins.RunAsSecurityInterceptor.invoke(RunAsSecurityInterceptor.java:94)
	at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:192)
	at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:122)
	at org.jboss.ejb.MessageDrivenContainer.internalInvoke(MessageDrivenContainer.java:389)
	at org.jboss.ejb.Container.invoke(Container.java:870)
	at org.jboss.ejb.plugins.jms.JMSContainerInvoker.invoke(JMSContainerInvoker.java:962)
	at org.jboss.ejb.plugins.jms.JMSContainerInvoker$MessageListenerImpl.onMessage(JMSContainerInvoker.java:1248)
	at org.jboss.jms.asf.StdServerSession.onMessage(StdServerSession.java:256)
	at org.jboss.mq.SpyMessageConsumer.sessionConsumerProcessMessage(SpyMessageConsumer.java:904)
	at org.jboss.mq.SpyMessageConsumer.addMessage(SpyMessageConsumer.java:159)
	at org.jboss.mq.SpySession.run(SpySession.java:351)
	at org.jboss.jms.asf.StdServerSession.run(StdServerSession.java:180)
	at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:743)
	at java.lang.Thread.run(Thread.java:619)


下面的rollback是catch到exception之后试图rollback报的错 应该关系不大

问题补充:
lettoo 写道
在对可序列化类中的属性进行序列化时,如果遇到不可序列化的对象变量,此时会针对不可序列化的类抛出NotSerializableException异常

public String getMessage(Locale p_uiLocale)
    {
        // Old stuff. Should be removed once old codes are removed.
        if (m_messageId != DEFAULT_MSG_ID)
        {
            ResourceBundle resourceBundle = SystemResourceBundle.getInstance()
                    .getResourceBundle(
                            ResourceBundleConstants.EXCEPTION_RESOURCE_NAME,
                            p_uiLocale);


ResourceBundle 这个类是不是能够序列化?


ResourceBundle是java.util.ResourceBundle,不好控制吧。ResourceBundleConstants和SystemResourceBundle我都继承或实现了Serializable 还是不管用

问题补充:
lettoo 写道
at com.globalsight.cxe.adaptermdb.BaseAdapterMDB.publishToJMS(BaseAdapterMDB.java:320)  
6.    at com.globalsight.cxe.adaptermdb.BaseAdapterMDB.onMessage(BaseAdapterMDB.java:242)  


看椎栈显示是在这个地方出错。应该是将Object转成JMS message的时候出错了。


对啊 就是这里
ObjectMessage om = session.createObjectMessage(myObject);

就是因为这个myObject的HashMap里多加了这个GeneralException才报错的 不加就没问题
2011年11月14日 13:42

6个答案 按时间排序 按投票排序

0 0

重新序列化下,应该就没有问题了

2011年11月15日 18:07
0 0

Exception类本身就不支持序列化。
父类不支持序列化,子类只是简单地实现Serializable接口是没用的。
如果真有必要序列化,必须重写writeObject,readObject方法。

具体怎么做可以去看effective java。

2011年11月15日 16:52
0 0

如果确认是因为添加了GeneralException才导致报错的,楼主可以试着用排除法测试下,先精简下GeneralException对象,先做成一个最简单的对象传递试试,然后一点一点试。

2011年11月14日 18:16
0 0

at com.globalsight.cxe.adaptermdb.BaseAdapterMDB.publishToJMS(BaseAdapterMDB.java:320)  
6.    at com.globalsight.cxe.adaptermdb.BaseAdapterMDB.onMessage(BaseAdapterMDB.java:242)  


看椎栈显示是在这个地方出错。应该是将Object转成JMS message的时候出错了。

2011年11月14日 14:42
0 0

在对可序列化类中的属性进行序列化时,如果遇到不可序列化的对象变量,此时会针对不可序列化的类抛出NotSerializableException异常

public String getMessage(Locale p_uiLocale)
    {
        // Old stuff. Should be removed once old codes are removed.
        if (m_messageId != DEFAULT_MSG_ID)
        {
            ResourceBundle resourceBundle = SystemResourceBundle.getInstance()
                    .getResourceBundle(
                            ResourceBundleConstants.EXCEPTION_RESOURCE_NAME,
                            p_uiLocale);


ResourceBundle 这个类是不是能够序列化?

2011年11月14日 14:22
0 0

你把报错的堆栈贴上来看看吧,就这样看不出来什么东西。

2011年11月14日 14:22

相关推荐

    javax.jms.jar

    javax.jms.MessageFormatException.class javax.jms.IllegalStateException.class javax.jms.JMSSecurityException.class javax.jms.ResourceAllocationException.class javax.jms.TransactionInProgressException....

    javax.jms.jar下载

    javax.jms.MessageFormatException.class javax.jms.MessageListener.class javax.jms.MessageNotReadableException.class javax.jms.MessageNotWriteableException.class javax.jms.MessageProducer.class javax....

    javax.activation.UnsupportedDataTypeException: no object DCH for MIME type

    javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multipart/mixed; boundary="----=_Part_0_1760344884.1407394057461" 第一步:需要先grantq权限: EXEC dbms_java.grant_...

    javax.jms-1.1.jar

    `javax.jms-1.1.jar` 是一个Java Message Service(JMS)的API库,它属于Java标准版(Java Standard Edition, Java SE)的一部分。JMS是Java平台上的一个规范,用于在分布式环境中进行异步消息传递。这个库主要用于...

    javax.naming.NamingException: Cannot create resource instance

    javax.naming.NamingException: Cannot create resource instance类加载异常,希望可以帮助跟我一样错误的人。

    javax.jms-1.1.jar.7z

    内含javax.jms-1.1.jar 安装包下载以及Maven手动安装命令 Maven官方仓库下载不下来资源,只能手动安装 <!-- https://mvnrepository.com/artifact/javax.jms/jms --> <groupId>javax.jms <artifactId>jms ...

    javax包下的javax.jms.jar及servlet-api.jar

    这里我们关注的是两个特定的JAR文件:`javax.jms.jar`和`servlet-api.jar`,它们分别与Java消息服务(Java Message Service,JMS)和Java Servlet API相关。 **Java消息服务(JMS)**是Java平台上的一个标准接口,...

    javax.jms.jar包与JMS实例代码

    `javax.jms.jar` 包是实现JMS规范的核心库,包含了JMS接口和实现类,使得开发者可以轻松地在Java应用程序中集成消息服务。 JMS主要包含两种消息模型:点对点(Point-to-Point,P2P)和发布/订阅(Publish/Subscribe...

    图片处理 javax.imageio.IIOException: Unsupported Image Type

    在Java编程环境中,图片处理是一项常见的任务,但有时可能会遇到“javax.imageio.IIOException: Unsupported Image Type”的错误。这个异常通常表示Java的`ImageIO`类库无法识别或支持所尝试读取或写入的图像格式。...

    javax.servlet-3.0.0.v201112011016-API文档-中英对照版.zip

    赠送jar包:javax.servlet-3.0.0.v201112011016.jar; 赠送原API文档:javax.servlet-3.0.0.v201112011016-javadoc.jar; 赠送源代码:javax.servlet-3.0.0.v201112011016-sources.jar; 赠送Maven依赖信息文件:...

    javax.annotation-api-1.3.2-API文档-中文版.zip

    赠送jar包:javax.annotation-api-1.3.2.jar; 赠送原API文档:javax.annotation-api-1.3.2-javadoc.jar; 赠送源代码:javax.annotation-api-1.3.2-sources.jar; 赠送Maven依赖信息文件:javax.annotation-api-...

    javax.servlet-3.0.0.v201112011016-API文档-中文版.zip

    赠送jar包:javax.servlet-3.0.0.v201112011016.jar; 赠送原API文档:javax.servlet-3.0.0.v201112011016-javadoc.jar; 赠送源代码:javax.servlet-3.0.0.v201112011016-sources.jar; 赠送Maven依赖信息文件:...

    javax.jms包,sun的JMS接口规范包

    9. **异常处理**:`javax.jms`包中还包括一系列的异常类,如`JMSException`、`MessageFormatException`、`IllegalStateException`等,这些异常帮助开发者处理在消息传递过程中可能出现的问题。 10. **JMS 1.1规范**...

    javax.mail-1.5.6-API文档-中文版.zip

    赠送jar包:javax.mail-1.5.6.jar; 赠送原API文档:javax.mail-1.5.6-javadoc.jar; 赠送源代码:javax.mail-1.5.6-sources.jar; 赠送Maven依赖信息文件:javax.mail-1.5.6.pom; 包含翻译后的API文档:javax.mail...

    ActiveMQ 中javax.jms的源码 javax.jms-sources-1.1.zip

    《深入解析ActiveMQ中的javax.jms源码》 在Java消息服务(Java Message Service,简称JMS)领域,javax.jms是核心API,它定义了应用程序与消息中间件进行交互的一组接口和类。ActiveMQ作为开源的消息中间件,广泛...

    javax.servlet-api-4.0.1.jar中文文档.zip

    javax.servlet-api-***.jar中文文档.zip,java,javax.servlet-api-***.jar,javax.servlet,javax.servlet-api,***,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,javax,servlet,api,中文API文档,手册,开发...

    javax.mail-1.6.2-API文档-中英对照版.zip

    赠送jar包:javax.mail-1.6.2.jar; 赠送原API文档:javax.mail-1.6.2-javadoc.jar; 赠送源代码:javax.mail-1.6.2-sources.jar; 赠送Maven依赖信息文件:javax.mail-1.6.2.pom; 包含翻译后的API文档:javax.mail...

    com.springsource.javax.media.jai.core-1.1.3.jar

    import javax.media.jai.JAI; import javax.media.jai.RenderedOp; jai_core-1.1.3.jar jai_codec-1.1.3.jar

    javax.activation-api-1.2.0-API文档-中文版.zip

    赠送jar包:javax.activation-api-1.2.0.jar; 赠送原API文档:javax.activation-api-1.2.0-javadoc.jar; 赠送源代码:javax.activation-api-1.2.0-sources.jar; 赠送Maven依赖信息文件:javax.activation-api-...

    android DES加密解密 javax.crypto.IllegalBlockSizeException: last block incomplete in

    本话题将围绕在Android中使用DES加密和解密时遇到的一个常见问题展开:`javax.crypto.IllegalBlockSizeException: last block incomplete in decryption`。 这个异常通常发生在解密过程中,当输入的数据块大小与DES...

Global site tag (gtag.js) - Google Analytics