java – 如何在JMX中表示多态?
发布时间:2020-12-15 02:22:04 所属栏目:Java 来源:网络整理
导读:我有这样的类型: public interface Numbering { ListNumberingComponent getComponents();}public interface NumberingComponent { Object getValue();}public interface StringNumberingComponent extends NumberingComponent { String getValue();}public
我有这样的类型:
public interface Numbering { List<NumberingComponent> getComponents(); } public interface NumberingComponent { Object getValue(); } public interface StringNumberingComponent extends NumberingComponent { String getValue(); } public interface IntegerNumberingComponent extends NumberingComponent { Integer getValue(); } 这一切都很好,除非您尝试注册碰巧使用此类型的MXBean,并且您得到: ...top of exception chain omitted ... Caused by: javax.management.openmbean.OpenDataException: Cannot convert type: class com.acme.NumberingComponent at com.sun.jmx.mbeanserver.OpenConverter.openDataException(OpenConverter.java:1411) at com.sun.jmx.mbeanserver.OpenConverter.toConverter(OpenConverter.java:264) at com.sun.jmx.mbeanserver.OpenConverter.makeArrayOrCollectionConverter(OpenConverter.java:315) at com.sun.jmx.mbeanserver.OpenConverter.makeParameterizedConverter(OpenConverter.java:393) at com.sun.jmx.mbeanserver.OpenConverter.makeConverter(OpenConverter.java:296) at com.sun.jmx.mbeanserver.OpenConverter.toConverter(OpenConverter.java:262) ... 57 more Caused by: javax.management.openmbean.OpenDataException: Cannot convert type: interface java.io.Serializable at com.sun.jmx.mbeanserver.OpenConverter.openDataException(OpenConverter.java:1411) at com.sun.jmx.mbeanserver.OpenConverter.toConverter(OpenConverter.java:264) at com.sun.jmx.mbeanserver.OpenConverter.makeCompositeConverter(OpenConverter.java:467) at com.sun.jmx.mbeanserver.OpenConverter.makeConverter(OpenConverter.java:293) at com.sun.jmx.mbeanserver.OpenConverter.toConverter(OpenConverter.java:262) ... 61 more Caused by: javax.management.openmbean.OpenDataException: Can't map java.io.Serializable to an open data type at com.sun.jmx.mbeanserver.OpenConverter.makeCompositeConverter(OpenConverter.java:454) at com.sun.jmx.mbeanserver.OpenConverter.makeConverter(OpenConverter.java:293) at com.sun.jmx.mbeanserver.OpenConverter.toConverter(OpenConverter.java:262) ... 64 more 字符串和整数在JMX中是可表示的,但Object不是,因为类中至少需要有一个getter才能将其识别为可用类型.我知道任何添加抽象层的尝试都没有帮助,因为NumberingComponent本身已经是这样一个层.接口的原始版本也有泛型,但我删除它们以使其更简单,并且无论是否有它们都以相同的方式失败. 还有其他方法可以将其映射到复合类型吗?我用Google搜索了异常消息,基本上没有点击. (!!) 解决方法
您可以使StringNumberingComponent和IntegerNumbering接口也扩展为
CompositeDataView.假设MBean的MBeanInfo指示属性的正确CompositeType,MBeanServer将“渲染”该属性作为将正确序列化的CompositeData实例.
具体实现需要实现的方法相当简单,因为您的CompositeType只有一个字段: public CompositeData toCompositeData(CompositeType ct) 在JavaDoc有一个很好的例子. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |