编组子类对象 - 同名属性

时间:2016-01-22 12:29:18

标签: xml groovy jaxb

我一直在尝试使用JAXB来继续进行继承。对于我的生活,我似乎无法封送来自Employee对象的XML字符串。我期待XML有点像这样:

<Employee>
    <Name>Max</Name>
    <ID>1199-4973-5323</ID>
</Employee>

我使用的类定义如下:

Person.groovy

@XmlRootElement(name = 'Person')
class Person {
    @XmlElement(name = 'Name')
    String name
}

Employee.groovy

@XmlRootElement(name = 'Employee')
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = '', propOrder = ['name', 'id'])
class Employee extends Person {
    @XmlElement(name = 'ID')
    String id
}

这会引发错误:

  • 关于Employee的propOrder,是Property name appears in @XmlType.propOrder, but no such property exists,这是非常明显的。有没有办法指定订单,包括来自父类的字段?
  • groovy.lang.MetaClass is an interface, and JAXB can't handle interfaces
  • Class has two properties of the same name "name"

这是我用于编组的代码片段:

static String createXML(Object o) {
    JAXBContext context = JAXBContext.newInstance(o.getClass())
    Marshaller marshaller = context.createMarshaller()

    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true)

    StringWriter writer = new StringWriter()
    marshaller.marshal(o, writer)
    writer.toString()
}

另一方面,我没有测试过这段代码。我在这里有一个更大的项目,我这样做是为了更简单地解释我的情况。但是从this例子来看,应该没事,对吧?

1 个答案:

答案 0 :(得分:0)

我想删除这篇文章,但后来我觉得有人可能和我有同样的问题。

我能够通过在父类中添加@XmlTransient注释来解决此问题。