我一直试图与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 interfacesClass 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()
}另外,我还没有测试过这段代码。我在这里有一个更大的项目,我这样做是为了更简单地解释我的情况。但是从这的例子来看,它应该是好的,对吗?
发布于 2016-01-22 12:45:45
我想删除这篇文章,但我想可能有人和我有同样的问题。
我能够通过在父类中放置一个@XmlTransient注释来解决这个问题。
https://stackoverflow.com/questions/34946774
复制相似问题