JaxB 无法转换为 java.lang.Integer。

3
我有一个抽象类:
@MappedSuperclass
public abstract class BaseEntity<K> 
{

@Temporal(value = TemporalType.TIMESTAMP)
private Date cadastrado;
@Temporal(value = TemporalType.TIMESTAMP)
private Date modificado;
@Column(length = 30)
private String ip;
private String autorModificacao;

public abstract K getId();

public abstract void setId(K id);

以及一个派生类:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Pessoa extends BaseEntity<Integer> implements Serializable {

    @Id
    @ColumnGridPF
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "pessoa")
    private Integer id;

....

@Override
Integer getId() {
  return id;
}

    @Override
    public void setId(Integer id) {
        this.id = id;
    }

当我的应用程序尝试反序列化对象时,我遇到了一个错误。

**

严重: RuntimeException无法映射到响应,重新抛出到HTTP容器
java.lang.ClassCastException: com.sun.org.apache.xerces.internal.dom.ElementNSImpl无法转换为java.lang.Integer
    at br.com.sigmaonline.entity.cadastro.pessoa.Pessoa.setId(Pessoa.java:46)
    at br.com.sigmaonline.entity.common.generic.BaseEntity$JaxbAccessorM_getId_setId_java_lang_Object.set(MethodAccessor_Ref.java:60)

**

有没有人能帮帮我?


你使用的是哪个版本的JAXB实现?这段代码在JDK(6&7)的JAXB实现中运行良好(除非您在id元素中看到命名空间定义)。 - Laksitha Ranasingha
1个回答

3
默认情况下,当您的JAXB (JSR-222)实现为Pessoa创建元数据时,它也会为父类BaseEntity创建元数据。由于JAXB默认将属性视为映射,因此它将认为它具有一个名为idObject类型属性。当JAXB不知道属性的类型时,它将将其转换为DOM Element。这导致了ClassCastException解决方案 解决方案实际上取决于您是否希望BaseEntity被视为继承层次结构的一部分(请参见:http://blog.bdoughan.com/2011/06/ignoring-inheritance-with-xmltransient.html)。但我建议在BaseType上利用@XmlTransient@XmlAccessorType(XmlAccessType.NONE)来删除问题属性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接