2013-07-02 10 views
5

die folgende XML-Wie binden Sie untergeordnete Elementattribute an Felder mit JAXB?

<mappings> 
    <map> 
    <source srcAttr="oof">foo</source> 
    <target trgAttr="rab">bar</target> 
    </map> 
    <map> 
    ... 

Ist es möglich Gegeben mit JAXB die <map> Elemente in einer einzigen Klasse Map mit Werten und Attribute <source> und <target> zu entpacken?

@XmlRootElement 
class Map { 

    @XmlElement 
    String source; 

    @??? 
    String srcAttr; 

    @XmlElement 
    String target; 

    @??? 
    String trgAttr; 
} 

Ich möchte keine zusätzlichen Klassen für Quelle und Ziel erstellen.

Antwort

2

Ja! Ersetzen Sie einfach ??? durch @XmlAttribute annotaion.

Auch könnte dies hilfreich sein jaxb example und dieser oracle examples

+0

Dadurch werden die XML-Attribute in das Element map statt in die Elemente source und target eingefügt. FYI - So können Sie diesen Anwendungsfall mit MOXys '@ XmlPath'-Erweiterung umgehen: http://Stackoverflow.com/a/17424618/383861 –

+0

Setzen Sie die XML-Attribute in das map-Element anstelle der Quell- und Zielelemente - sieht so aus, als ob Udo das will – Tala

+0

Da ich nur am Entpacken interessiert bin, ist das genau was ich will! Hätte nicht gedacht, dass es so einfach wäre :-) – Udo

4

Hinweis: Ich bin das EclipseLink JAXB (MOXy) Blei und Mitglied der JAXB (JSR-222) Expertengruppe.

Sie moxy die verwenden könnte @XmlPath Erweiterung diesen Anwendungsfall zu behandeln:

import javax.xml.bind.annotation.*; 
import org.eclipse.persistence.oxm.annotations.XmlPath; 

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
class Map { 

    String source; 

    @XmlPath("source/@srcAttr") 
    String srcAttr; 

    String target; 

    @XmlPath("target/@trgAttr") 
    String trgAttr; 

} 

Weitere Informationen

+2

Das ist echter Luxus ;-) Leider muss ich beim Javee-Standard bleiben – Udo

Verwandte Themen