2013-07-02 4 views
5

は値<source><target>属性を含む単一のクラスに<map>要素Map を非整列化するためにJAXBを持つことが可能ですか?子要素の属性をJAXBでフィールドにバインドする方法は?以下のXML</p> <pre><code><mappings> <map> <source srcAttr="oof">foo</source> <target trgAttr="rab">bar</target> </map> <map> ... </code></pre> <p>考える

@XmlRootElement 
class Map { 

    @XmlElement 
    String source; 

    @??? 
    String srcAttr; 

    @XmlElement 
    String target; 

    @??? 
    String trgAttr; 
} 

ソースとターゲットのために余分なクラスを作成したくありません。

答えて

2

はい!ちょうど???@XmlAttribute annotionに置き換えてください。

また、これは便利jaxb exampleかもしれないと、このoracle examples

+0

これは、XML属性を 'source'要素と' target'要素の代わりに 'map'要素に置きます。 FYI - ここでは、MOXyの '@XmlPath'拡張を使用してこのユースケースを処理する方法を示します:http://stackoverflow.com/a/17424618/383861 –

+0

source要素とtarget要素ではなくmap要素にXML属性を置きます。 Udoが望んでいるように見える – Tala

+0

私はアンマーシャリングにしか興味がないので、これはまさに私が望むものです! – Udo

4

注:私はEclipseLink JAXB (MOXy)リードとJAXB (JSR-222)専門家グループのメンバーです。

あなたはこのユースケースを処理するためにMOXYの@XmlPath拡張子を使用することができます。

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; 

} 

詳細情報

+2

これは本当の贅沢です;-) 残念ながら私はjaveeの標準に固執する必要があります – Udo

関連する問題