首页 > 解决方案 > 是否有我可以参考的可能的 IllegalAnnotationExceptions 列表?

问题描述

我的任务是采用现有的对象结构并将其转换为 XML 我是 JAXB 的新手并希望使用它。但是,当我尝试编组数据时,如果抛出以下异常,“3 个 IllegalAnnotationExceptions 计数”

过去有 20 多个例外。但是,我能够研究并找出导致错误的未遵循的做法。但是,我似乎找不到这三个错误。是否有可能导致此异常的原因的列表?我会展示代码,但是,这些错误可能跨越 22 个类。

先感谢您。

编辑

这是下面的错误。代码是从命令行运行器执行的,所以请参考“Caused by:”异常。确实有大量代码需要梳理,在这里发布是不切实际的。这就是为什么我要求提供此异常的可能触发器的参考列表。这样的清单存在吗?

java.lang.IllegalStateException: Failed to execute CommandLineRunner
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:735) [spring-boot-1.5.12.RELEASE.jar:1.5.12.RELEASE]
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:716) [spring-boot-1.5.12.RELEASE.jar:1.5.12.RELEASE]
    at org.springframework.boot.SpringApplication.afterRefresh(SpringApplication.java:703) [spring-boot-1.5.12.RELEASE.jar:1.5.12.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:304) [spring-boot-1.5.12.RELEASE.jar:1.5.12.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) [spring-boot-1.5.12.RELEASE.jar:1.5.12.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) [spring-boot-1.5.12.RELEASE.jar:1.5.12.RELEASE]
    at com.xdome.XdomeApplication.main(XdomeApplication.java:14) [classes/:na]
Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 3 counts of IllegalAnnotationExceptions
    at com.sun.xml.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:106) ~[jaxb-impl-2.2.3-1.jar:2.2.3]
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:489) ~[jaxb-impl-2.2.3-1.jar:2.2.3]
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:319) ~[jaxb-impl-2.2.3-1.jar:2.2.3]
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1170) ~[jaxb-impl-2.2.3-1.jar:2.2.3]
    at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:145) ~[jaxb-impl-2.2.3-1.jar:2.2.3]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_144]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_144]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_144]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_144]
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:247) ~[na:1.8.0_144]
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:234) ~[na:1.8.0_144]
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:441) ~[na:1.8.0_144]
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:641) ~[na:1.8.0_144]
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:584) ~[na:1.8.0_144]
    at com.xdome.XMLGenerator.run(XMLGenerator.java:27) ~[classes/:na]
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:732) [spring-boot-1.5.12.RELEASE.jar:1.5.12.RELEASE]
    ... 6 common frames omitted

标签: javaxmljaxb

解决方案


在解决了这个问题之后,我想我会来晒晒太阳并留下一些快速的想法。不幸的是,这似乎是一个普遍的错误。据我所知,这个异常没有错误的集体列表,因为这意味着当所有其他方法都失败时,这是一个包罗万象的异常。但是,以下是我在处理项目时遇到的一些项目:

使用 JAXB 时,请确保您希望编组的所有所需类都具有默认的空参数构造函数。我假设 JAXB 只需要执行一些基本的 POJO 操作,并且没有无参数构造函数,这是不可能的。

public class A {

    public A(){}

}

我遇到的另一个问题涉及继承。许多以前的对象都继承自包含公共字段的抽象类。然而,这个抽象类并不是 XML 层次结构的直接部分。将抽象类作为超类包含似乎会引发 IllegalAnnotationsException。因此,如果 B 类是 XML 结构的一部分,请不要执行以下操作:

public abstract class A {
    ...
}


public class B extends A {

}

最后,可能会因滥用 JAXB 注释而引发 IllegalAnnotationsException。遇到上述异常时,请仔细检查以确保您正在注释预期的字段和类。由于我自己是 JAXB 的新手,所以我遇到了这个问题。您可以在 Oracle 网站上找到 JAXB 文档:https ://docs.oracle.com/javase/8/docs/technotes/guides/xml/jaxb/index.html

我希望这些信息至少可以帮助几个人。至少这是最后一个没有答案的堆栈溢出问题。


推荐阅读