无法获取JAXBContext?

时间:2014-01-08 19:28:28

标签: java jaxb

在我的java项目中,我有一个用一些类生成的jar。我能够实例化我的jar中的类的实例:

Alert a = new Alert();

但是我试着这样做:

JAXBContext context  = JAXBContext.newInstance(Alert.class);

我得到这样的运行时异常:

  

java.lang.InternalError:   在目标类上调用反射时发生错误。确保所有引用的类都在类路径上:interface javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter   例外:null

知道可能是什么问题吗? 谢谢

1 个答案:

答案 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());
  }
}

如果异常的原因没有丢失,那就太好了。