1

我正在尝试将 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 只应该根据文档使用 OpenMbean 类型,但我的类只使用java.lang.Stringand javax.management.openmbean.CompositeData,所以我不知道它为什么会失败。界面是:

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

@MXBean
public interface JmxAdministrationApi {

    String synchronize(CompositeData clientInfo);

}

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

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

提前致谢,

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

4

1 回答 1

2

CompositeData即使文档听起来像您应该的那样,您也不应该直接使用。MXBean它将负责将专有数据类型转换为实例CompositeData并自动返回。

查看文档中提供的示例,了解应如何使用@ConstructorProperties注释来使您的数据类型与复合数据和 MXBean 很好地配合使用。

-JB-

于 2013-08-15T09:56:42.910 回答