2013-07-02 12 views
5

Biorąc pod uwagę następujące XMLJak powiązać atrybuty elementu potomnego z polami za pomocą JAXB?

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

Czy to możliwe, z JAXB do unmarshal z <map> elementy do jednej klasy Map zawierających wartości i atrybuty <source> i <target>?

@XmlRootElement 
class Map { 

    @XmlElement 
    String source; 

    @??? 
    String srcAttr; 

    @XmlElement 
    String target; 

    @??? 
    String trgAttr; 
} 

Nie chcę tworzyć dodatkowych klas dla źródła i celu.

Odpowiedz

2

Tak! Wystarczy wymienić ??? z @XmlAttribute annotaion.

Również może to być pomocne jaxb example i to oracle examples

+0

To spowoduje umieszczenie atrybutów XML w elemencie 'map' zamiast elementów' source' i 'target'. FYI - Oto jak poradzić sobie z tym przypadkiem użycia używając rozszerzenia '@ XmlPath' w MOXy: http://stackoverflow.com/a/17424618/383861 –

+0

umieść atrybuty XML w elemencie mapy zamiast elementów źródłowych i docelowych - Wygląda na to, że Udo chce – Tala

+0

Ponieważ jestem zainteresowany tylko w unmarshalling, właśnie tego chcę! Nie myślałem, że to będzie takie łatwe :-) – Udo

4

Uwaga: Jestem EclipseLink JAXB (MOXy) ołowiu i członkiem grupy JAXB (JSR-222) ekspertów.

Można użyć Moxy za @XmlPath rozszerzenie obsłużyć ten przypadek użycia:

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; 

} 

Aby uzyskać więcej informacji

+2

To jest prawdziwy luksus ;-) Niestety muszę trzymać się standardu javee; – Udo

Powiązane problemy