代码之家  ›  专栏  ›  技术社区  ›  Nimrod007

Java JMX调用方法返回javax.ws.rs.core.Response对象不工作(获取NotSerializableException)

  •  0
  • Nimrod007  · 技术社区  · 12 年前

    这是JMX bean调用(失败):

    import javax.management.remote.JMXConnector;
    import javax.management.remote.JMXConnectorFactory;
    import javax.management.remote.JMXServiceURL;
    import javax.ws.rs.core.Response;
    MBeanServerConnection mbeanConn
    
    //some code going on ...    
    ...
    
    response = (Response) mbeanConn.invoke(myBean,"example", null, null);
    

    它抛出异常:

    java.rmi.UnmarshalException: error unmarshalling return; nested exception is: 
        java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: org.apache.cxf.jaxrs.impl.ResponseIm
    

    在我的代码中查找时,调用的函数是:

      import javax.ws.rs.core.Response;
    
       @ManagedOperation
       public Response example() throws GeneralException {
        //do some things with the response object
        ...
        return response.build();
       }
    

    根据我的理解,我有一个问题,即抽象类javax.ws.rs.core.Response没有序列化。

    有什么办法绕过这个问题吗?

    1 回复  |  直到 12 年前
        1
  •  1
  •   Gary Russell    12 年前

    JMX使用java序列化来传输参数和操作结果。即使上课 Serializable 您需要在客户端的类路径中使用它。

    除了添加一个将对象渲染为字符串的操作之外,没有其他解决方案。如果你运气好,你可以使用 toString() 但是如果对象没有被覆盖 Object.toString() ,你必须自己滚。