1

という名前のクラスがあるとしましょう

// with respect.
public class BlaiseDoughan {
}

このように要素の名前を変更できることを知っています。

@XmlRootElement
public class MyRoot {

    @XmlElement(name = "blaise-doughan") // I want this
    private BlaiseDoughan blaiseDoughan
}

属性のないすべてまたは任意の出現でのターゲット要素名を永続的に設定する方法はありBlaiseDoughanますか?blaise-doughanname

つまり

@XmlRootElement
public class SomeOtherRoot {

    @XmlElement // without the [name = "blaise-doughan"] part?
    private BlaiseDoughan blaiseDoughan
}

これには何かpackage-levelテクニックはありますか?

4

1 に答える 1

1

あなたがすることができます:

Java モデル

ブレイズドーハン

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="blaise-doughan")
public class BlaiseDoughan {

}

マイルート

そして、それへのすべての参照は でマッピングできます@XmlElementRef

import javax.xml.bind.annotation.*;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class MyRoot {

    @XmlElementRef
    private BlaiseDoughan blaiseDoughan;

    public void setBlaiseDoughan(BlaiseDoughan blaiseDoughan) {
        this.blaiseDoughan = blaiseDoughan;
    }

}

デモコード

デモ

import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(MyRoot.class);

        MyRoot myRoot = new MyRoot();
        myRoot.setBlaiseDoughan(new BlaiseDoughan());

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(myRoot, System.out);
    }

}

出力

<?xml version="1.0" encoding="UTF-8"?>
<myRoot>
    <blaise-doughan/>
</myRoot>

なぜこれが機能するのか

@XmlElementRefref要素定義での使用に対応します。

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <xsd:complexType name="blaiseDoughan"/>
   <xsd:complexType name="myRoot">
      <xsd:sequence>
         <xsd:element ref="blaise-doughan"/>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:element name="myRoot" type="myRoot"/>
   <xsd:element name="blaise-doughan" type="blaiseDoughan"/>
</xsd:schema>
于 2013-08-22T19:10:27.537 に答える