首页 文章

使用JAXB进行解组

提问于
浏览
1

我是java新手(来自c#.net背景),并尝试上面的例子来编组和解组 .

点击以下链接Marshalling a List of objects implementing a common interface, with JaxB

使用Mr.Blaise Doughan先生提到的上述技术,我能够将java对象编组为xml . 但是当我保存这个xml并尝试将xml解组回java对象时,我在控制台上得到以下内容:

com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException:在两个地方找到2个IllegalAnnotationExceptions @javax.xml.bind.annotation.XmlElementRef注释计数;一个就够了 . 此问题与以下位置有关:在@javax.xml.bind.annotation.XmlElementRef(name = ## default,required = true,type = class javax.xml.bind.annotation.XmlElementRef $ DEFAULT,namespace =)at public java.util.List社区中的Community.getPeople()此问题与以下位置有关:at @javax.xml.bind.annotation.XmlElementRef(name = ## default,required = true,type = class javax.xml .bind.annotation.XmlElementRef $ DEFAULT,namespace =)at public void Community.setPeople(java.util.List)at Community ....

注意:我为Class Boy和Class Girl创建了getters / setter来实现解组 .

2 回答

  • 3

    看来你可能已经注释了getPeople和setPeople方法 . JAXB(和其他Java EE技术)只需要您注释一个 .

    public class Community {
    
        private List<Person> people;
    
        @XmlElementRef
        public List<Person> getPeople() {
            return people;
        }
    
        public void setPeople(List<Person> people) {
            this.people = people;
        } 
    
    }
    

    For More Information

  • 0

    如果你展示你的代码,它会更容易提供帮助......

    问题似乎是,你有getter和setter并且混淆了JAXB,因为它不知道如何使用它们来解组xml .

    尝试使用 FIELD 访问类型:

    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlRootElement(name="Blubb", namespace=ServiceConstants.XML_NAMESPACE)
    public class Blubb implements Serializable {
    
        @XmlElement(name="Bla", namespace=ServiceConstants.XML_NAMESPACE)
        private Bla bla;
    
        public Blubb () {
    
        }
    
        public void setBla(Bla bla) { this.bla = bla; }
    
        public Bla getBla() { return this.bla; }
    }
    

相关问题