我有一种奇怪的情况,即类中的getter返回一个原始int类型,而setter采用Integer类。
当jaxb将一个元素解组为此类时,它找不到它正在寻找的setter:
public class Foo {
int bar;
public int getBar() {
return this.bar;
}
public void setBar(Integer bar) {
this.bar = bar.intValue();
}
}
我尝试过添加:
@XmlElement ( type = java.lang.Integer.class, name = "bar" )
到getter(和setter),来改变模式中字段的类型,但这没有帮助。
在解组期间我收到此错误:该属性有一个getter“public int com.example.getBar()”但没有setter。对于解组,请定义setter。
我无法修改类,因为我无法将条形图更改为整数或添加具有基本类型的新setter,但我可以添加注释。
答案 0 :(得分:3)
从手机发帖所以请耐心等待! 该属性与javabeans规范不匹配,因此您可能知道这是问题所在。您是否可以使用新名称添加新的setter / getter对,它们都使用Integer,并将XML标记放在该新属性上?新方法只会委托现有方法。 HTH
答案 1 :(得分:2)
您可以通过将JAXB配置为使用字段访问来解决此问题。这是通过@XmlAccessorType
注释完成的:
package forum8334195;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.*;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Foo {
int bar;
public int getBar() {
return this.bar;
}
public void setBar(Integer bar) {
this.bar = bar.intValue();
}
/**
* Put logic to update domain object based on bar field here. This method
* will be called after the Foo object has been built from XML.
*/
private void afterUnmarshal(Unmarshaller unmarshaller, Object parent) {
System.out.println(bar);
}
}
了解更多信息
答案 2 :(得分:0)
真的很遗憾你不能引入任何额外的方法。如果您可以添加额外的私有方法,则可以执行以下操作:
@XmlAccessorType(XmlAccessType.NONE)
public class Foo {
int bar;
public int getBar() {
return this.bar;
}
@XmlElement
private Integer getBar() {
return this.bar;
}
public void setBar(Integer bar) {
this.bar = bar.intValue();
}
}
如果这不起作用,您可能会使用@XmlJavaTypeAdaptor
和XmlAdaptor<Foo, YourAdaptedFoo>
,但那非常讨厌。