JAXB如何在XmlElementRef中传递XmlRootElement名称

时间:2013-01-31 07:43:57

标签: xml jaxb annotations

我试图找到适合我的问题的解决方案,但没有成功。 这是问题所在:

我有以下部分XML结构(我没有影响)

<users>
  <array>
    <item>
      <username></username>
      <email></email>
    </item>
    ...
    <item>
      ...
    </item>
  <array>
</users>

我有以下XML部分的类结构:

@XmlRootElement(name = "users")
public class XmlUsers extends XmlData
{
    @XmlElement
    public XmlArray array;
}

@XmlRootElement(name = "array")
public class XmlArray
{
    @XmlElementRef(name = "item")
    public List<XmlItemData> items;
}

@XmlSeeAlso({ XmlUserData.class })
public abstract class XmlItemData
{
}

@XmlRootElement
public class XmlUserData extends XmlItemData
{
...
}

我想用&#39; item&#39;来包装XmlUserData。或者&#39;用户&#39;标签,所以我不想注释XmlUserData根元素名称。

如何在XmlArray级别执行此操作? 正如您所看到的,我试图命名XmlElementRef,但这导致项目为null ...

修改 我猜我没有意外删除用户的评论(我不记得他/她的名字)。请原谅我。这是关于使用XmlElement而不是XmlElementRef。它还与XmlTransient一起在XmlItemData类中添加了它。但是,现在我已经获得了null元素列表。这是我的XmlUserData类:

@XmlRootElement
public class XmlUserData extends XmlItemData
{
    @XmlElement(name = "username")
    public String        username;

    @XmlElement(name = "first_name")
    public String        firstName;

    @XmlElement(name = "last_name")
    public String        lastName;

    @XmlElementWrapper(name = "links", required = false)
    @XmlElements({ @XmlElement(name = "delete"), @XmlElement(name = "next"),
            @XmlElement(name = "self"), @XmlElement(name = "users"),
            @XmlElement(name = "watched") })
    public List<XmlLink> links;

    @XmlElement(name = "url")
    public String        url;

    @XmlElement(name = "id")
    public int           id;

    @XmlElement(name = "fullname")
    public String        fullname;

    @XmlElement(name = "email")
    public String        email;
}

EDIT2: 不明信息的用户,您可以再次发布您的回复,我可以将其标记为有用的吗?

我仍然有XmlItemData元素列表的问题,它应该是XmlUserData类型,但它们是null ... 任何想法,我做错了什么......?

提前致谢!

EDIT3: 我用JAXB编组了我的类结构,如下所示:

<rsp>
  <total_results>0</total_results>
  <users>
    <array>
      <item xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xmlUserData">
        <id>0</id>
      </item>
    </array>
  </users>
</rsp>

unmarshaller可以期待item标签的这一行吗?它的存在是否会对未编组的消息产生任何影响......?

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xmlUserData"

0 个答案:

没有答案