У меня есть несколько типов, подобных этому:
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 - нет, так как в классе должен присутствовать хотя бы один метод получения, чтобы он распознал его как пригодный для использования тип.Я знаю, что любая попытка добавить слой абстракции не поможет, потому что сам NumberingComponent уже является таким слоем.В оригинальной версии интерфейсов были также и дженерики, но я удалил их, чтобы сделать их проще, и они не работают точно так же с ними или без них.это для составного типа?Я погуглил сообщение об исключении и по сути не получил ни одного хита.(!!)