Parent
という名前のクラスがあり、xsdファイルから生成され、完全なJABXアノテートを保持しますList.
このクラスは変更できません。さらに、を使用してList
をHashMap
に変換したいChild extends Parent
クラスがあります。 HashMap
フィールドは、同じ名前を持ち、同じxsd要素にマップされます(可能性があります)。JAXB親クラスからの再利用アノテーションとアクセスプリセットフィールド
JAXBは同じ名前のフィールドを複数回設定できますか? JAXBは、子クラスのXmlAdapter
の入力として親クラスの既に埋め込まれたList
を使用しようとしますか?私はこれが私が望んでいるようにうまくいかないと推測します。
このタスクはどのようにすばやく行うことができますか?
EDIT:私の実際の質問は、実際にJAXB自動生成Beanを編集するべきではなく、まだハッシュマップを使用できるようにすることです。
ここに私のコードは動作しません。マップはnullのままです。悪いコードの書式設定をしてください。ここで
public class Adapter extends XmlAdapter<LinkedList<A>,HashMap<String,A>> {
@Override
public LinkedList<A> marshal(HashMap<String, A> v) throws Exception {
// TODO Auto-generated method stub
return null;
}
@Override
public HashMap<String, A> unmarshal(LinkedList<A> v) throws Exception {
HashMap<String, A> map = new HashMap<String, A>();
for(A a:v) {
map.put(a.k, a);
}
return map;
}
}
@XmlRootElement
public class Child extends Parent {
@XmlElement(name="a")
@XmlJavaTypeAdapter(Adapter.class)
HashMap<String,A> map;
}
@XmlRootElement
public class Parent {
@XmlElement(name="a")
LinkedList<A> values = new LinkedList<A>();
}
public class XmlTest {
public static void main(String[] args) throws ParserConfigurationException, JAXBException, SAXException, IOException {
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(new File("test.xml"));
JAXBContext jc = JAXBContext.newInstance(Child.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
Child instance = unmarshaller.unmarshal(doc,Child.class).getValue();
}
}
クラスAは、次のとおりです。ここで
public class A {
@XmlAttribute
String v;
@XmlAttribute
String k;
}
test.xml
:
<root>
<a v="1" k="a"/>
<a v="2" k="b"/>
</root>
(1) 'a'要素をJavaの2つのプロパティにマップすることはできません。これらの2つの異なるプロパティをXMLに戻す方法(2)クラス 'A'のマッピングがありません(3)' test.xml'を公開できますか? –
@dma_kありがとうございました。私は複数のフィールドに1つの名前を使用することが問題になるかもしれませんが、多分、階層構造内で最高クラスを使用するようJAXBに指示するためのスマートな方法があります。私は今、 'afterUnmarshall'メソッドを使ってハッシュマップを構築していますが、アダプタaproachはもっと良いでしょう。しかし、それは不可能と思われる? –