簡體   English   中英

如何鼓勵JAXB讀取XmlElement內容字符串?

[英]How can I encourage JAXB to read XmlElement content string?

嘗試解析此類消息時,我沒有收到“公告”:

 <?xml version="1.0" encoding="UTF-8"?>
 <message messageType="SUBSCRIBER" messageName="ANNOUNCEMENT">
     <announcement time="12:30">
         Lunchtime!
     </announcement>
     <announcement time="32:00">
         Good night ...
     </announcement>
     <errorText>Phone number missing, subscriber: Dick</errorText>
 </message>

JAXB Java類看起來非常簡單。 並且基於有效的類似消息。 在這種情況下,差異似乎在於我可以在主塊中具有兩種不同類型的嵌套元素(XmlElement)。

下面的代碼實際上解析XML,但未調用該公告。 setMessageText ()方法。 盡管我可以看到time屬性是從XML設置的,並且公告的數組大小為2,但它讀取並設置了單個errorText XmlElement。 順便說一句 ,我還從代碼和XML中刪除了標記-在處理messageText時,沒有更改。 歡迎想法!

 @XmlRootElement(name = "message")
 public class AnnouncementMessage 
 { 
      @XmlAttribute
      public String getMessageName(){
        return this.messageName;
      }
      public void   setMessageName( String name ){
        this.messageName = name;
      }

      @XmlAttribute
      public String getMessageType(){
          return messageType;
      }
      public void  setMessageType( String newMessageType ){
          this.messageType = newMessageType;
     }

      @XmlElement(name = "errorText")
      public String getErrorText(){
          return errorText;
      }
      public void setErrorText( String newMsg ){
          this.errorText = newMsg;
      }

     private     List<Announcement>  announcements   = new ArrayList<>();

  @XmlElement(name = "announcement")
  public List<Announcement> getAnnouncements(){
        return this.announcements;
  }
  public void setAnnouncements( List<Announcement> newAnnouncements ){
        this.announcements = newAnnouncements;
     }
 }

和公告類:

 @XmlRootElement(name = "announcement")
 public class Announcement 
 {

     private     String  messageText = "";
     private     String  time        = "12:00";

     XmlAttribute(name ="time")
     public  String  getTime(){
         return this.time;
     }
     public  void    setTime( String newMsg ){
         this.messageText = time;
     }

     @XmlElement(name="announcement")
     public  String  getMessageText(){
         return this.messageText;
     }
     public  void    setMessageText( String newMsg ){
         this.messageText = newMsg;
     }

     Announcement(){
     }
 }

在XmlElement中使用name參數似乎沒有什么區別。 預先謝謝

對消息文本使用@XmlValue批注:

@XmlValue
public  String getMessageText(){
    return this.messageText;
}

此外,如OP的相關答案中所述 ,如果Announcement類包含@XmlAccessorType(XmlAccessType.NONE)包含未映射到XML或從XML映射的getter / setter對且沒有@XmlTransient批注,則在Announcement類上需要@XmlAccessorType(XmlAccessType.NONE)

暫無
暫無

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

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