2016-04-06 26 views
3

belirli bir düzen içinde aynı türden çok sayıda etiketler:JAXB: Ben oldukça sıradışı Ben Marshall'a gerek XML formatı ve unmarshall sahip

<a> 
    <b></b> 
    <c></c> 
    <d></d> 
    <c></c> 
    <d></d> 
</a> 

işe beklemiyordum ama is vermedi edildi kodu :

@XmlAccessorType(XmlAccessType.NONE) 
@XmlType(propOrder={"b", "eList"}) 
@XmlRootElement(name="a") 
public class A { 

    @XmlElement(name="b") 
    private String b; 

    @XmlElementRefs({ 
     @XmlElementRef(name="c", type=String.class), 
     @XmlElementRef(name="d", type=String.class) 
    }) 
    @XmlMixed 
    private List<String> eList; 
} 

sonucu ne yazık ki doğru sırada (I b, c, d, c, d düzeni mi) eksik: farklı güvenilir

<a> 
    <b></b> 
    <c></c> 
    <c></c> 
    <d></d> 
    <d></d> 
</a> 

@XmlMixed gibi şeyler, @XmlPath ile alt nesneler ama hiçbir şey benim için çalıştı. Herhangi bir ipucu veya bağlantı var mı? Şimdiden teşekkürler!

+0

Farklı bir JAXB sağlayıcı kullanmanın sakıncası yoktur. Yani MOXY vb kullanarak öneriler bekliyoruz! –

+0

Bu sorunu çözdünüz mü? Varsa, nasıl çözdünüz? – Xstian

cevap

0

ben çözümü

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "a", propOrder = { 
    "bs", 
    "cs", 
    "ds" 
}) 
@XmlRootElement(name = "a") 
public class A 
    implements Serializable 
{ 

    private final static long serialVersionUID = 1234567890L; 
    @XmlElement(name = "b") 
    protected List<String> bs; 
    @XmlElement(name = "c") 
    protected List<String> cs; 
    @XmlElement(name = "d") 
    protected List<String> ds; 

    public List<String> getBS() { 
     if (bs == null) { 
      bs = new ArrayList<String>(); 
     } 
     return this.bs; 
    } 

    public List<String> getCS() { 
     if (cs == null) { 
      cs = new ArrayList<String>(); 
     } 
     return this.cs; 
    } 


    public List<String> getDS() { 
     if (ds == null) { 
      ds = new ArrayList<String>(); 
     } 
     return this.ds; 
    } 

} 

aşağıda öneririm ve aynı zamanda bir xsd doğrulama geçerli olabilir.

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema elementFormDefault="qualified" 
    targetNamespace="http://yourNamespace" xmlns="http://yourNamespace" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="a" type="a" /> 
    <xs:complexType name="a"> 
     <xs:sequence> 
      <xs:element name="b" type="xs:string" minOccurs="0" maxOccurs="unbounded" /> 
      <xs:element name="c" type="xs:string" minOccurs="0" maxOccurs="unbounded" /> 
      <xs:element name="d" type="xs:string" minOccurs="0" maxOccurs="unbounded" /> 
     </xs:sequence> 
    </xs:complexType> 

</xs:schema>