繁体   English   中英

jaxb解组衍生对象列表

[英]jaxb unmarshaling a list of derived objects

我正在尝试解组从通用基类派生的对象列表。 它们的定义如下:

public abstract class Par {
  @XmlTransient
  public String name;

  @XmlAttribute(name="name")
  public String getName() {
    return name;
  }

  public void setName(String n) {
    name = n;
  }
}

@XmlRootElement(name="int")
public class IntegerPar extends Par {
    @XmlTransient
    public int value;

    @XmlAttribute(name="value")
    public int getValue() {
      return value;
    }

    public void setValue(int v) {
      value = v;
    }
}

@XmlRootElement(name="string")
public class StringPar extends Par { ... }

现在,如果我创建一个List并将其编组为xml,它会按预期工作,产生整齐的效果

<root>
  <int name="x" value="1"/>
  <string name="s" value="hello"/>
</root>

但是如果我想将相同的xml解组到此类中

@XmlRootElement(name="root")
public class ParamRequest {
  @XmlAnyElement
  public ArrayList<Par> params;
}

我得到以下内容(取自Eclipse调试)

myRequest.params    [[int: null], [string: null]]

有什么帮助吗? 谢谢。

编辑:解封由泽西岛完成

@POST @Path("/params")
@Produces(MediaType.TEXT_PLAIN)
@Consumes(MediaType.APPLICATION_XML)
public String postParams(ParamRequest myRequest) {
    myRequest...
    ...
}

使用@XmlSeeAlso可以在marshall / unmarshall期间让JAXB了解有关子类的信息。

@XmlSeeAlso({IntegerPar.class,StringPar.class})
public abstract class Par {

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM