2012-05-07 17 views
5

Sto cercando di unmarshal il seguente codice XML:Mappatura di un sub-bambino XML con annotazioni JAXB

<datas xmlns="http://www..." xmlns:atom="http://www.w3.org/2005/atom"> 
    <data> 
     <atom:link rel="data" type="application/xml" href="http://www.../ckp/data/1"/> 
    </data> 
    <data> 
     <atom:link rel="data" type="application/xml" href="http://www.../ckp/data/2"/> 
    </data> 
    <data> 
     <atom:link rel="data" type="application/xml" href="http://www.../ckp/data/3"/> 
    </data> 
    </datas> 

E ho scritto le seguenti classi di legame per aiutare ottenere marshalling/unmarshalling:

public class Links{ 

@XmlAttribute 
private String rel; 
@XmlAttribute 
private String type; 
@XmlAttribute 
private String href; 


public String getRel() { 
    return rel; 
} 

public void setRel(String rel) { 
    this.rel = rel; 
} 
public String getType() { 
    return type;  
} 

public void setType(String type) { 
    this.type = type; 
} 
public String getHref() { 
    return href;  
} 

public void setHref(String href) { 
    this.href = href; 
} 

seconda classe modello

@XmlAccessorType(XmlAccessType.FIELD) 
public class AuthorMeta { 

@XmlElement 
private Atomlink author; 

public Atomlink getLink() { 
    return author; 
} 

public void setLink(Atomlink link) { 
    this.author = link; 
} 

L'ultima classe di modello, questa sarà effettivamente associata con il xml recuperato

@XmlRootElement(name="datas") 
    @XmlAccessorType(XmlAccessType.FIELD) 
    public class Datas{ 



    @XmlAttribute 
    private String datas; 
    @XmlElement 
    private String data; 
    @XmlValue 
private List<DataMeta> link; 



public String getDatas() { 
    return datas; 
} 
public String getData() { 
    return data; 
} 

public List<DataMeta> getAtom() { 
    return link; 
} 

public void setDatas(String datas) { 
    this.datas= datas; 
} 

public void setData(String data) { 
    this.data= data; 
} 



public void setLink(List<DataMeta> link) { 
    this.link = link; 
} 




} 

Ma durante la deployement sto prendendo un errore che dice:

Caused by: com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 2 counts of IllegalAnnotationExceptions 
    If a class has @XmlElement property, it cannot have @XmlValue property. 
this problem is related to the following location: 
    at private java.util.List org.client.model.Datas.link 
    at org.client.model.Datas 
this problem is related to the following location: 
    at private java.lang.String org.client.model.Datas.data 
    at org.client.model.Datas 
    @XmlAttribute/@XmlValue need to reference a Java type that maps to text in XML. 
this problem is related to the following location: 
    at private java.util.List org.client.model.Datas.link 
    at org.client.model.Datas 

Non ho dimestichezza con le annotazioni ma chiunque potrebbe dire a me come usarli in questo specifico occasione. Voglio creare con le annotazioni qualcosa del genere:

<xmlattribute> 
    <xmlelement> 
    <xml sub-child/> 
    </xmlelement> 
    <xmlelement> 
    <xml sub-child/> 
    </xmlelement> 
</xmlattribute> 

risposta

5

L'eccezione contiene le risposte. Prova questo invece.

@XmlElement 
private List<AuthorMeta> link; 
Problemi correlati