簡體   English   中英

通過JaxB讀取XML時出錯

[英]Error reading XML via JaxB

這是我的課程結構:

@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>

問題是Source始終為null。 我沒有例外,它只是空值。 我試圖僅使用Source標記,並且可以很好地拾取Name,但是當我將其添加為System類的一部分時,它似乎無法正常工作。

另外,我嘗試這樣做,並且在System中有一個字符串成員變量作為名稱:

@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;
        }

    }

系統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個“ Root”元素。 在您的Source類上嘗試@XmlType:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM