相关疑难解决方法(0)

是否可以以编程方式配置JAXB?

说我有两个JavaBeans PersonAddress.

如果我创建一个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)

java jaxb

19
推荐指数
1
解决办法
9519
查看次数

标签 统计

java ×1

jaxb ×1