开发者

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.开发者_StackOverflow中文版blogspot.com/2010/09/jaxb-collection-properties.html


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;
}


This worked for me. The names of the XmlRootElement and the list are the same.

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

@XmlAccessorType(XmlAccessType.FIELD)
public class UserDefinedType {
    @XmlElement(name = "id")
    public String someId;

    @XmlElement(name = "id2")
    public String someId2;
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜