2017-06-30 1 views
1

Da so etwas wie:Parsing gewickelt Attribute mit jaxb

<root> 
    <wrapper> 
     <wrapped id="..."/> 
     <wrapped id="..."/> 
    </wrapper> 
</root> 

wie kann ich es auf diese POJO Karte:

public class Root { 
    public Set<UUID> myIds = new LinkedHashSet(); 
} 

frage ich mich seit @XmlElement(name = "wrapped") @XmlElementWrapper(name = "wrapper") Werke etwas ähnlich zu dem, was ich will, ist es etwas um das Attribut zu bekommen?

hinweis: ich benutze nicht moxy so weit ich weiß, kann ich nicht xpaths verwenden. Ich versuche, die @XmlJavaTypeAdapter Route zu vermeiden.

+0

Mögliche Duplikat https://stackoverflow.com/questions/5514752/xml-element-with-attribute-und-content-using-jaxb? rq = 1 –

+0

Das ist ein anderes Schema. – Aarjav

Antwort

0

Sie müssen Ihre Root-Klasse ein wenig ändern, , so dass es eine Set<Wrapped> anstelle einer Set<UUID> enthält.

@XmlRootElement(name = "root") 
public class Root { 

    @XmlElementWrapper(name = "wrapper") 
    @XmlElement(name = "wrapped") 
    public Set<Wrapped> myWrappeds = new LinkedHashSet<>(); 
} 

Und Sie brauchen eine eigene Klasse für die <wrapped> Elemente.
Überraschenderweise für mich, brauchen Sie kein @XmlJavaAdapter für id hier, weil JAXB bereits eine built-in converter zwischen java.util.UUID und String hat.

public class Wrapped { 

    @XmlAttribute(name = "id") 
    public UUID id; 
} 

Ich habe die oben mit dieser XML-Eingabedatei

<root> 
    <wrapper> 
     <wrapped id="550e8400-e29b-11d4-a716-446655440000"/> 
     <wrapped id="550e8400-e29b-11d4-a716-446655440001"/> 
    </wrapper> 
</root> 

und dieses main Methode geprüft, die die ursprüngliche XML wiedergibt:

public static void main(String[] args) throws Exception { 
    JAXBContext context = JAXBContext.newInstance(Root.class); 
    Unmarshaller unmarshaller = context.createUnmarshaller(); 
    File file = new File("root.xml"); 
    Root root = (Root) unmarshaller.unmarshal(file); 
    Marshaller marshaller = context.createMarshaller(); 
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
    marshaller.marshal(root, System.out); 
} 
+0

Hey danke für deine Zeit und schau dir das an. Nachdem ich 'Set ' anstelle von 'Set ' gefunden habe, bin ich auf der Suche nach dem Code für die Konvertierung zwischen 'UUID' und' Wrapped' Objekten. Für jetzt benutze ich, was Sie haben + '@ XmlJavaAdapter', um die Umwandlung zwischen' UUID' und 'Wrapped' Objekte zu machen, so dass das Pojo immer noch' Set 'hat – Aarjav