【问题标题】:Java RMI UnmarsharledException in tomcat web applicationTomcat Web 应用程序中的 Java RMI UnmarsharledException
【发布时间】:2013-12-03 09:04:59
【问题描述】:

我正在尝试查询在 Tomcat WebApplication 中运行的 JMX MBeanServer。我在获取 MBean 的属性列表时看到以下错误

java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
    java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: org.apache.catalina.core.StandardContext
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:191)
    at com.sun.jmx.remote.internal.PRef.invoke(Unknown Source)
    at javax.management.remote.rmi.RMIConnectionImpl_Stub.getAttributes(Unknown Source)
    at javax.management.remote.rmi.RMIConnector$RemoteMBeanServerConnection.getAttributes(RMIConnector.java:927)

我在我的网络应用程序中做错了什么吗?我已经针对许多其他 Java 应用程序测试了我的 JMX 客户端,并且从未遇到过这个错误。如果有人已经遇到此异常,将会很有帮助。

编辑:

发现问题

Bean: Catalina:name="ajp-bio-8009",type=ThreadPool
~~~~~
Attributes
.....
maxThreads:200
sSLEnabled:false
keystorePass:null
localPort:8009
connectionCount:1
currentThreadCount:0
keepAliveTimeout:-1
threadPriority:5
keyPass:null
useComet:false
soLinger:-1
sslEnabledProtocolsArray:[Ljava.lang.String;@3d1a70a7
socketProperties:java.rmi.UnmarshalException: error unmarshalling
...
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: org.apache.tomcat.util.net.SocketProperties

【问题讨论】:

    标签: java tomcat serialization rmi jmx


    【解决方案1】:

    您的getAttributes() 方法返回一个类型StandardContext,它既不是Serializable,也不是导出的远程对象。所以当服务器去写返回值的时候,就产生了NotSerializableException.

    您似乎正在尝试远程获取应用程序上下文或其属性?

    【讨论】:

    • 谢谢。我终于能够弄清楚这一点。该异常是由 org.apache.tomcat.util.net.SocketProperties 引起的。使用单个 mbean 上的堆栈跟踪更新了我的问题
    【解决方案2】:

    形成这个链接:

    http://docs.oracle.com/javase/7/docs/api/java/rmi/UnmarshalException.html

    public class UnmarshalException
    extends RemoteException
    

    如果发生以下任何一种情况,在解组远程方法调用的参数或结果时可能会引发 UnmarshalException:

    • 如果在解组调用标头时发生异常
    • 如果返回值的协议无效
    • 如果发生 java.io.IOException 解组参数(在服务器端)或返回值(在客户端)。
    • 如果在解组参数或返回值期间发生 java.lang.ClassNotFoundException
    • 如果服务器端无法加载骨架;请注意,1.1 存根协议中需要骨架,但 1.2 存根协议中不需要。
    • 如果方法哈希无效(即缺少方法)。
    • 如果在解组时为远程对象的存根创建远程引用对象失败。

    【讨论】:

    • 有意义 java.io.WriteAbortedException 是 java.io.IOException 类型。将深入研究这一点。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    相关资源
    最近更新 更多