2012-05-07 12 views
5

Estoy tratando de unmarshal el siguiente xml:Registro de una sub-secundario XML con anotaciones 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> 

Y escribí las siguientes clases de vinculación para ayudar a lograr la serialización/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; 
} 

segunda clase de modelo

@XmlAccessorType(XmlAccessType.FIELD) 
public class AuthorMeta { 

@XmlElement 
private Atomlink author; 

public Atomlink getLink() { 
    return author; 
} 

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

La última clase de modelo, esto realmente se vinculará con el xml recuperado

@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; 
} 




} 

embargo, durante el despliegue de la 'estoy tomando un error que 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 

No estoy familiarizado con anotaciones, pero podría alguien decirme cómo usarlos en esta ocasión específica. Quiero crear con las anotaciones algo como esto:

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

Respuesta

5

La excepción contiene las respuestas. Prueba esto en su lugar.

@XmlElement 
private List<AuthorMeta> link; 
Cuestiones relacionadas