【发布时间】:2014-07-29 00:32:15
【问题描述】:
当我尝试解析这样的消息时,我没有收到“通知”:
<?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,但它没有调用 Announcement.setMessageText() 方法。虽然我可以看到 time 属性是从 XML 设置的,并且我有一个数组 size=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;
}
}
还有 Announcement 类:
@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 参数似乎没有什么区别。我的提前感谢。
【问题讨论】:
-
@Blaise Dougan .. 我不认为这是重复的。有一个不同的 XML 数据包适用于:How to bind a xml-element-into an object member variable 问题。那是一种有效的方法。这个类应该是相同的,但事实并非如此。我解析属性,而不是 XmlValue。
-
@BlaiseDougan 同意 OP 这不是重复的。投票重新开放。