tomcat Web应用程序中的Java RMI UnmarsharledException

时间:2013-11-19 17:18:28

标签: java tomcat serialization rmi jmx

我正在尝试查询在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

2 个答案:

答案 0 :(得分: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存根协议中不需要。
  • 如果方法哈希无效(即缺少方法)。
  • 如果在取消编组时无法为远程对象的存根创建远程引用对象。

答案 1 :(得分:2)

您的getAttributes()方法返回的类型StandardContext既不是Serializable也不是导出的远程对象。因此,当服务器写入返回值时,它会产生NotSerializableException.

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