使用JAXB XmlAdapter在没有包装元素的情况下调整整个列表

Cor*_*y G 5 java xml jaxb unmarshalling xmladapter

我正在尝试使用一个XmlAdapterunmarshal XML到一个自定义集合类型(Collection由于另一个类的使用所施加的冲突限制,故意不实现接口,如果该类包含任何集合,这很可能会失败).难点在于XML放置在集合中的节点不会包装在包装元素中.

这是我的XML基本面貌:

<xml>
  <foo></foo>
  <bar>1</bar>
  <bar>2</bar>
</xml>
Run Code Online (Sandbox Code Playgroud)

我可以JAXB解决以下问题POJO:

class Naive {
  Foo foo;
  List<Bar> bar;
}
Run Code Online (Sandbox Code Playgroud)

但是,我想要做的是以下内容:

class Bars {
  // There will be a fixed number of these, known in advance
  Bar bar1;
  Bar bar2; 
}

class BarsAdapter extends XmlAdapter<ArrayList<Bar>, Bars> {
  ...
}

class Custom {
  Foo foo;
  @XmlJavaTypeAdapter(BarsAdapter.class)  // won't work
  Bars bar;
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我编写了一个XmlAdapter想要调整整个列表的内容,而不是单个元素,但它从不会被调用以进行解组.(它会被调用以进行编组.)

如果我XML<bar>元素周围包含一个包装器,那么我知道如何解决这个问题:

<xml>
  <foo></foo>
  <wrapper>
    <bar>1</bar>
    <bar>2</bar>
  </wrapper>
</xml>
Run Code Online (Sandbox Code Playgroud)

因为那时我可以用bars字段注释,@XmlElement(id="wrapper")并且适配器将被正确调用.但是,XML架构来自一个RFC并且完全不可更改,因此我不知道如何继续.任何想法赞赏!