0

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;
    }
}
Adriano
  • 1
  • 2

0 Answers0