我的任务是采用现有的对象结构并将其转换为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
答案 0 :(得分:0)
在解决了这个问题之后,我想我会晒太阳并留下一些简短的想法。不幸的是,这似乎是一个普遍错误。据我所知,没有针对此异常的错误的汇总列表,因为当其他所有方法均失败时,这意味着它是万能的异常。但是,这是我在处理项目时遇到的一些项目:
使用JAXB时,请确保希望编组的所有所需类均具有默认的空参数构造函数。我假设JAXB只需要执行一些基本的POJO操作,并且没有no args构造函数,那是不可能的。
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
我希望这些信息至少可以帮助几个人。至少这是最后一个没有答案的堆栈溢出问题。