Java JAXB在一个步骤中将一个集合打包成一个XmlElement和一个XmlAttribute
我想将集合打包为嵌套属性 现在我有:Java JAXB在一个步骤中将一个集合打包成一个XmlElement和一个XmlAttribute,java,xml,jaxb,Java,Xml,Jaxb,我想将集合打包为嵌套属性 现在我有: @XmlElement(name="entry") public Collection<Integer> getSizes(){ ... } @xmlement(name=“entry”) 公共集合getSizes(){…} 返回: <entry>1</entry> <entry>2</entry> 1 2. 但我想得到: <entry id="1"/> <entry id
@XmlElement(name="entry")
public Collection<Integer> getSizes(){ ... }
@xmlement(name=“entry”)
公共集合getSizes(){…}
返回:
<entry>1</entry>
<entry>2</entry>
1
2.
但我想得到:
<entry id="1"/>
<entry id="2"/>
如果没有新的类,这是可能的吗?如果没有新的类,这似乎是不可能的。使用
XmlAdapter
:
class EntryAdapter extends XmlAdapter<EntryAdapter.Entry, Integer>
{
public EntryAdapter.Entry marshal(Integer id) {
return new Entry(id);
}
public Integer unmarshal(Entry e) {
return e.getId();
}
static class Entry
{
private Integer id;
public Entry() {}
public Entry(Integer id) { this.id = id; }
@XmlAttribute
public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }
}
}
class EntryAdapter扩展了XmlAdapter
{
public EntryAdapter.Entry封送处理(整数id){
返回新条目(id);
}
公共整数解组(条目e){
返回e.getId();
}
静态类条目
{
私有整数id;
公共条目(){}
公共项(整数id){this.id=id;}
@XmlAttribute
公共整数getId(){return id;}
public void setId(整数id){this.id=id;}
}
}
-
@xmlement(name=“entry”)
@XmlJavaTypeAdapter(EntryAdapter.class)
公共集合getSizes(){…}
正如公认的答案所说,XmlAdapter
是标准的JAXB解决方案
但是,如果您使用EclipseLink MOXy作为JAXB提供程序,并且可以使用其扩展之一,即@XmlPath
,则可以使用它来实现相同的结果
要将集合值封送为属性,可以如下使用:
@XmlPath("entry/@id")
public Collection<Integer> getSizes(){ ... }
@XmlPath(“entry/@id”)
公共集合getSizes(){…}
@XmlPath("entry/@id")
public Collection<Integer> getSizes(){ ... }