JAXB – Exceção de vinculação de dados

Ontem, ao tentar converter uma string XML em um POJO, encontrei este erro:

javax.xml.bind.DataBindingException:    com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
Class has two properties of the same name "entries"
this problem is related to the following location:
at
....
this problem is related to the following location:
at
....
at
....
etc
...

Aqui estão meus códigos POJO:

@XmlRootElement
public class EntryMappings {
@XmlElement(name="entryMapping")
private List<EntryMapping> entries;

public List<EntryMapping> getEntries() {
return this.entries;
}
}

Acontece que o tipo de acesso de ligação padrão JAXB, XmlAccessType.PUBLIC_MEMBER , tentará ligar todos os campos públicos, campos anotados e propriedades. No meu caso, ele tentou a vinculação no campo de entradas e no campo getEntries () .

A solução é escolher o XmlAccessType de forma que a ligação ocorra apenas uma vez.

Exemplo 1 – Vincular por campos:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class EntryMappings {
@XmlElement(name="entryMapping")
private List<EntryMapping> entries;

public List<EntryMapping> getEntries() {
return this.entries;
}
}

Exemplo 2 – Vincular por propriedades:

@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
public class EntryMappings {
private List<EntryMapping> entries;

@XmlElement(name="entryMapping")
public List<EntryMapping> getEntries() {
return this.entries;
}
}

Exemplo 3 – Vincular por campos anotados ou propriedades anotadas

@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class EntryMappings {
@XmlElement(name="entryMapping")
private List<EntryMapping> entries;

public List<EntryMapping> getEntries() {
return this.entries;
}
}

créditos e referências:
http://blog.bdoughan.com/2011/06/using-jaxbs-xmlaccessortype-to.html
http://docs.oracle.com/javaee/5/api/javax/xml/bind/annotation /XmlAccessType.html