带有CompositeData的JMX MXBean的java.io.InvalidObjectException

时间:2013-08-14 10:00:55

标签: jmx mbeans

我正在尝试将MXBean发布到JMX,但是当我启动程序并且正在发布bean时,我得到以下堆栈:

Caused by: java.io.InvalidObjectException: Do not know how to make a javax.management.openmbean.CompositeType from a CompositeData: no method from(CompositeData); no constructor has @ConstructorProperties annotation; does not have a public no-arg constructor; not an interface
        at com.sun.jmx.mbeanserver.OpenConverter.invalidObjectException(OpenConverter.java:1403)
        at com.sun.jmx.mbeanserver.OpenConverter$CompositeConverter.makeCompositeBuilder(OpenConverter.java:891)
        at com.sun.jmx.mbeanserver.OpenConverter$CompositeConverter.checkReconstructible(OpenConverter.java:897)
        at com.sun.jmx.mbeanserver.OpenConverter$CompositeBuilderCheckGetters.applicable(OpenConverter.java:1034)
        at com.sun.jmx.mbeanserver.OpenConverter$CompositeConverter.makeCompositeBuilder(OpenConverter.java:868)
        ... 48 more

现在我现在认为MXBeans只能按照the documentation使用OpenMbean类型,但我的类只使用java.lang.Stringjavax.management.openmbean.CompositeData,所以我不知道为什么它会失败。界面是:

import javax.management.MXBean;
import javax.management.openmbean.CompositeData;

@MXBean
public interface JmxAdministrationApi {

    String synchronize(CompositeData clientInfo);

}

值得注意的是,在我添加CompositeData参数(即没有参数)之前,bean正在正确发布,然后才发生此错误。

对此的任何帮助将不胜感激。

提前致谢,

罗布

编辑:另外,我们正在使用Spring JMX

1 个答案:

答案 0 :(得分:2)

即使文档听起来应该如此,也不应该直接使用CompositeDataMXBean将负责将专有数据类型转换为CompositeData实例并自动返回。

查看documentation中提供的示例,了解如何使用@ConstructorProperties注释使数据类型与复合数据和MXBeans完美匹配。

-JB -