说我有两个JavaBeans Person和Address.
如果我创建一个Person对象列表,我想编组这样的东西:
<persons>
<person>...</person>
</persons>
Run Code Online (Sandbox Code Playgroud)
可以使用此处描述的技术: 使用JAXB解组/编组List <String>
通过使用@XmlRootElement(name = "persons")和注释JaxbList,@XmlElement(name = "person")可以编组上面的XML.
但是,能够重用同一个JaxbList<T>类来编组Address对象列表会很好.实际上,我会有很多其他类型的豆子.我可以用以下的东西:
<list>
<item xsi:type="person" xmlns:xsi="http://www.w2.org/2001/XmlSchema-instance"></item>
</list>
Run Code Online (Sandbox Code Playgroud)
但是,理想情况下,将"list"替换为复数版本的类名称和"item"替换为类名称会很好.
那么,是否有可能在运行时以编程方式配置JaxbContext或其他东西,并基本上设置name内部的值@XmlRootElement和@XmlElement?
或者任何其他方式让这个工作,而不必JaxbList为每个bean类型编写单独的实现?也许XmlJavaTypeAdapter可以实现这种事情?
更新 @Blaise Doughan在下面接受的解决方案非常有用.对于我的用例,我需要直接从Java对象到XML,这里有用(注意这不是我的完整实现,它只是用于演示的伪代码):
//JAXBContext is thread safe and so create it in constructor or
//setter or wherever:
...
JAXBContext jc = JAXBContext.newInstance(Wrapper.class, clazz);
...
public String marshal(List<T> things, Class clazz) {
//configure JAXB and marshaller
Marshaller m = …Run Code Online (Sandbox Code Playgroud)