我以前从未使用过JAXB。我正在做一个测试工具项目。我有大约20个不同的测试用例。当我运行我的测试时,我得到这个错误。
我的结构如下:
A是TestCase的基类。
B扩展了A。
C扩展了B。
基类A:
public class A {
public A(String t){
testName = t;
}
private String aData;
private String testName;
public void setAData(String a){
aData = a;
}
public void getAData(){
return aData;
}
public void setTestName(String t){
testName = t;
}
public void getTestName(){
return testName;
}
}B类:
public class B extends A{
public B(String testName){
super(testName);
}
private String bData;
public void setBData(String b){
bData = b.trim();
}
public String getData(){
return bData;
}
}C类:
@XmlRootElement(name="C")
public class C extends B{
public C(String testName){
super(testName);
}
private String cData;
public void setCData(String c){
cData = c;
}
public String getCData(){
return cData;
}
}用于解组我编写的xml文件
public C unmarshall(C test, String dir){
try {
JAXBContext jc = JAXBContext.newInstance(c.getClass);
Unmarshaller u = jc.createUnmarshaller();
test = (C)u.unmarshal(new FileInputStream(dir));
} catch (Exception e) {
System.out.println(e.getMessage());
}
return test;
}我的xml文件如下所示:
<C>
<aData> aaaa </aData>
<bData> bbbb </bData>
<cData> cccc </cData>
</C>当我运行我的代码时,我得到了3次IllegalAnnotationException计数。
发布于 2010-07-21 01:19:18
IllegalAnnotationExceptions是由于您在A、B和C上没有默认的零参数构造函数造成的。
添加到A:
public A() {
}添加到B:
public B() {
}并添加到C:
public C() {
}发布于 2018-06-13 19:09:32
这是因为您正在创建JAXBcontext实例的那个类的子元素与其中定义的元素名称不同。
示例:
@XmlType(name = "xyz", propOrder =
{ "a", "b", "c", "d" })
@XmlRootElement(name = "testClass")
public class TestClass
{
@XmlElement(required = true)
protected Status status;
@XmlElement(required = true)
protected String mno;
@XmlElement(required = true)
}在上面的类中,您没有"xyz“,但是如果您将放入不可用的属性名称,JAXBContext实例化将抛出IlligalAnnotationException。
这样你就有3个地方名字不匹配了。所以三次使用IllegalAnnotationExceptions。
https://stackoverflow.com/questions/3292483
复制相似问题