我正在尝试将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.String
和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
答案 0 :(得分:2)
即使文档听起来应该如此,也不应该直接使用CompositeData
。 MXBean
将负责将专有数据类型转换为CompositeData
实例并自动返回。
查看documentation中提供的示例,了解如何使用@ConstructorProperties
注释使数据类型与复合数据和MXBeans完美匹配。
-JB -