I have an Element that's being used many times. This element is a List of a specific class. I created an Adapter for each item of this list and, considering it's inside of many nodes, I'd like to put the adapter at package-info level instead of replicating the XmlJavaTypeAdapter annotation on every single classes that has MyElement as child. I know it's possible to put the XMLAdapter at the MyElement.java, but I have all my other adapters at package-info and I'd like to keep all in one place.
Example code:
XML:
<root>
<node1>
<node1.1/>
<node1.N/>
<myElement/>
<myElement/>
<myElement/>
</node1>
<node2>
<node2.1/>
<node2.N/>
<myElement/>
<myElement/>
<myElement/>
</node2>
<nodeN>
<nodeN.1/>
<nodeN.N/>
<myElement/>
<myElement/>
<myElement/>
</nodeN>
</root>
Models:
public class Node1 {
@XmlElement(name = "node1.1")
protected String node11;
@XmlElement(name = "node1.N")
protected String node1N;
@XmlElement(name = "myElement")
protected List<MyElement> myElement;
...
}
public class Node2 {
@XmlElement(name = "node2.1")
protected String node21;
@XmlElement(name = "node2.N")
protected String node2N;
@XmlElement(name = "myElement")
protected List<MyElement> myElement;
...
}
public class NodeN {
@XmlElement(name = "nodeN.1")
protected String node21;
@XmlElement(name = "nodeN.N")
protected String nodeNN;
@XmlElement(name = "myElement")
protected List<MyElement> myElement;
...
}
package-info.java
@XmlJavaTypeAdapters({
@XmlJavaTypeAdapter(value=MyElementAdapter.class, type=List<MyElement.class>) //This is what I need to do and I don't know how
})
package com.xpto.model;
com.xpto.adapter.MyElementAdapter;
import javax.xml.bind.annotation.adapters.*;
import java.util.List;
MyElementAdapter:
public class MyElementAdapter extends XmlAdapter <MyElement, MyElement> {
@Override
public MyElement unmarshal(MyElement myElement) throws Exception {
myElement.doSomeStuffHere();
return myElement;
}
@Override
public MyElement marshal(MyElement myElement) throws Exception {
return myElement;
}
}