Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAXB在一个步骤中将一个集合打包成一个XmlElement和一个XmlAttribute_Java_Xml_Jaxb - Fatal编程技术网

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(){ ... }