通过JaxB读取XML出错



这是我的类结构:

@XmlRootElement(name="System")
public class SystemDTO () {
  @XmlElement(name="ID")
  public void setId(String id) {
      this.id = id;
  }
  @XmlElement(name="Source")
  public void setSource(SourceDTO source) {
      this.source = source;
  }
}
@XmlRootElement(name="Source")
class SourceDTO {
  @XmlElement(name="Name")
  public void setName(String name) {
      this.name = name;
  }
}

我的XML文件:

<System>
   <ID>e5b160d0</ID>
   <Source>
     <Name>Kron</Name>
   </Source>
</System>

问题是源总是空的。我没有得到异常,结果是空。我试图只使用源标记,它拾取名称很好,但是当我将其添加为System类的一部分时,它似乎不起作用。

另外,我尝试这样做,并在System中为name:

添加一个字符串成员变量。
@XmlElementWrapper(name="Source")
@XmlElement(name="Name")

但是这会导致一个异常。什么好主意吗?

测试类

    public class JaxbTest {
        public static void main(String[] args) {
            String xml = "<System>n" +
                    "   <ID>e5b160d0</ID>n" +
                    "   <Source>n" +
                    "     <Name>Kron</Name>n" +
                    "   </Source>n" +
                    "</System>";
            SystemDTO systemDTO;
            try {
                JAXBContext jaxbContext = JAXBContext.newInstance(SystemDTO.class);
                StringReader reader = new StringReader(xml);
                Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
                systemDTO = (SystemDTO) jaxbUnmarshaller.unmarshal(reader);
                System.out.println(systemDTO.getSource().getName());
            } catch (JAXBException e) {
                e.printStackTrace();
            }
        }
    }

源DTO

    @XmlRootElement(name = "Source")
    class SourceDTO {
        private String name = null;
        public String getName() {
            return name;
        }
        @XmlElement(name = "Name")
        public void setName(String name) {
            this.name = name;
        }
    }

System DTO

    @XmlRootElement(name = "System")
    public class SystemDTO {
        private String id;
        private SourceDTO source;
        public String getId() {
            return id;
        }
        public SourceDTO getSource() {
            return source;
        }
        @XmlElement(name = "ID")
        public void setId(String id) {
            this.id = id;
        }
        @XmlElement(name = "Source")
        public void setSource(SourceDTO source) {
            this.source = source;
        }
    }

我看到的一个可能的问题是,您在XML中声明了2个"根"元素。在源类上尝试@XmlType:

    @XmlType(name="Source")
    class SourceDTO {
       ...
    }

相关内容

最新更新