Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using jaxb to represent a list as the root element

How can we marshal/unmarshal the root element in a JSON that contains a list using JAXB?

So it would the JSON as

{
    "tag" : [
        {
            "id" : "a",
            "id2": "aa" 
        },
        {
            "id" : "b",
            "id2" : "bb" 
        },
        {
            "id" : "c",
            "id2" : "cc" 
        } 
    ] 
}

I am using Apache CXF which supports JSON through Jettison.

The Java class could look like the one below. One could use a XmlList annotation for the list, and XmlValue for having that list in the root element. The problem is XmlValue would not take a user-defined type.

@XmlRootElement(name = "tag")
public class test
{
    @XmlList
    @XmlValue
    private List<UserDefinedType> testList;
}

Is there a way to get around this. I need this to work for un-marshalling an incoming JSON. Got this idea from here http://bdoughan.blogspot.com/2010/09/jaxb-collection-properties.html

like image 917
Hardy Avatar asked Dec 06 '25 16:12

Hardy


1 Answers

This should work for the JSON format you mentioned. However, it might not work if you want to marshall/unmarshall to a certain XML format too.

@XmlRootElement
public class Test {
    @XmlElement(name = "tag")
    private List<UserDefinedType> testList;
}

public class UserDefinedType {
    @XmlElement(name = "id")
    private String someId;

    @XmlElement(name = "id2")
    private String someId2;
}
like image 152
Vivek Thakyal Avatar answered Dec 08 '25 06:12

Vivek Thakyal



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!