在我的java项目中,我有一个用一些类生成的jar。我能够实例化我的jar中的类的实例:
Alert a = new Alert();
但是我试着这样做:
JAXBContext context = JAXBContext.newInstance(Alert.class);
我得到这样的运行时异常:
java.lang.InternalError: 在目标类上调用反射时发生错误。确保所有引用的类都在类路径上:interface javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter 例外:null
知道可能是什么问题吗? 谢谢
答案 0 :(得分:4)
这发生在我身上,因为我定义了XmlAdapter
实现,这些实现位于不同的JAR而不是类路径上。在尝试创建JAXBContext时,它需要JAXB类型使用的这些适配器。现在我想出来了,这个消息更有意义,但仍然非常神秘。 XmlJavaTypeAdapter
是注释接口,并且代码无法调用注释的value()
方法,因为它返回Class<? extends XmlAdapter>
,这是一种未在类路径上定义的类类型。
如果你看一下抛出异常的代码,这是不可能的:
public Class More ...getClassValue(Annotation a, String name) {
try {
return (Class)a.annotationType().getMethod(name).invoke(a);
} catch (IllegalAccessException e) {
// impossible
throw new IllegalAccessError(e.getMessage());
} catch (InvocationTargetException e) {
// impossible
throw new InternalError(e.getMessage());
} catch (NoSuchMethodException e) {
throw new NoSuchMethodError(e.getMessage());
}
}
如果异常的原因没有丢失,那就太好了。