将XML映射到Java,并为标记名称提供多个选项

时间:2015-03-23 14:11:48

标签: java jaxb

我需要解析XML文件,然后将其映射到Java对象。到目前为止,我使用带注释的POJO来实现:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {"title", "id", "eventList"})
@XmlRootElement(name = "MyClass")
public class MyClass {

  @XmlElement(name = "Title", required = true)
  protected String title;

  @XmlElement(name = "Id", required = false)
  protected String id;

  @XmlElement(name = "EventList", required = true)
  protected EventList eventList;
}

然后用JAXB取消它:

MyClass myObj = (MyClass) unmarshaller.unmarshal(new StreamSource(fis))

问题:有时,我的客户会发送标签名称略有不同的文件(例如,Eventlist而不是EventList

是否有选项允许标记的两个名称?到目前为止,我通过在POJO中提供2个属性来解决这个问题:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {"title", "id", "eventList"})
@XmlRootElement(name = "MyClass")
public class MyClass {

  @XmlElement(name = "Title", required = true)
  protected String title;

  @XmlElement(name = "Id", required = false)
  protected String id;

  @XmlElement(name = "EventList", required = false)
  protected EventList eventList;

  @XmlElement(name = "Eventlist", required = false)
  protected EventList eventlist;
}

这很难维护,禁止使用'required'属性。你有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

我不确定是否有添加多个名称的选项,但您可以做的是:

将字段设为私有,并为其添加getter和setter。您可以为eventlist-field创建2个getter和setter,并使用不同的名称对它们进行注释。由于不需要这个字段,我认为没有问题。

虽然我现在看到了,但问题实际上已经解决了。见这里:JAXB: unmarshalling xml with multiple names for the same element