2

我正在使用 SimpleXML 库。我需要获取 rss 提要并将其转换为 java 对象。这里是我需要映射到对象的 XML

<rss xmlns:lj="http://www.livejournal.org/rss/lj/1.0/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:atom10="http://www.w3.org/2005/Atom" version="2.0">
<channel>
<title>Всегда! Везде! Со всеми! и ни с кем!</title>
<link>http://xuma.livejournal.com/</link>
<description>
Всегда! Везде! Со всеми! и ни с кем! - LiveJournal.com
</description>
<lastBuildDate>Thu, 17 Mar 2011 10:08:33 GMT</lastBuildDate>
<generator>LiveJournal / LiveJournal.com</generator>
<lj:journal>xuma</lj:journal>
<lj:journalid>5295048</lj:journalid>
<lj:journaltype>personal</lj:journaltype>
<copyright>NOINDEX</copyright>
<image>
<url>http://l-userpic.livejournal.com/104864030/5295048</url>
<title>Всегда! Везде! Со всеми! и ни с кем!</title>
<link>http://xuma.livejournal.com/</link>
<width>66</width>
<height>100</height>
</image>
<item>
<guid isPermaLink="true">http://xuma.livejournal.com/7831.html</guid>
<pubDate>Thu, 17 Mar 2011 10:08:33 GMT</pubDate>
<title>Япония. Поможем пострадавшим.</title>
<link>http://xuma.livejournal.com/7831.html</link>
<description>...</description>
<comments>http://xuma.livejournal.com/7831.html</comments>
<lj:security>public</lj:security>
<lj:reply-count>0</lj:reply-count>
</item>
<item>
<guid isPermaLink="true">http://xuma.livejournal.com/7575.html</guid>
<pubDate>Sat, 16 Oct 2010 12:36:48 GMT</pubDate>
<link>http://xuma.livejournal.com/7575.html</link>
<description>
<h1>Тест личности</h1><br /><a href="http://teh-nomad.livejournal.com/667478.html"><img border="0" src="http://www.ljplus.ru/img4/a/s/astro_nomad/chtree_6.jpg" alt="" /></a><br /><br /><a href="http://teh-nomad.livejournal.com/667478.html">Выбрать себе дерево</a>
</description>
<comments>http://xuma.livejournal.com/7575.html</comments>
<lj:music>I chase the Devil</lj:music>
<media:title type="plain">I chase the Devil</media:title>
<lj:mood>опаздываю...</lj:mood>
<lj:security>public</lj:security>
<lj:reply-count>0</lj:reply-count>
</item>
</channel>
</rss>

这是我定义的bean:

@Root
public class RssType {

    @Element(name="channel")
    private ChannelType channel;

    @Attribute
    private String version;

    public ChannelType getChannel() {
        return channel;
    }

    public void setChannel(ChannelType channel) {
        this.channel = channel;
    }

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }


}



@Element(name="channel")
public class ChannelType {

    @Element
    private String title;

    @Element
    private String link;

    @Element
    private String description;

    @Element
    private String lastBuildDate;

    @Element
    private String generator;

    @Element
    @Namespace(reference="http://www.livejournal.org/rss/lj/1.0/", prefix="lj")
    private String journal;

    @Element
    @Namespace(reference="http://www.livejournal.org/rss/lj/1.0/", prefix="lj")
    private String journalid;

    @Element
    @Namespace(reference="http://www.livejournal.org/rss/lj/1.0/", prefix="lj")
    private String journaltype;

    @Element
    private ImageType image;

    @ElementList(inline=false)
    private List<ItemType> item;

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getLink() {
        return link;
    }

    public void setLink(String link) {
        this.link = link;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getLastBuildDate() {
        return lastBuildDate;
    }

    public void setLastBuildDate(String lastBuildDate) {
        this.lastBuildDate = lastBuildDate;
    }

    public String getGenerator() {
        return generator;
    }

    public void setGenerator(String generator) {
        this.generator = generator;
    }

    public String getJournal() {
        return journal;
    }

    public void setJournal(String journal) {
        this.journal = journal;
    }

    public String getJournalid() {
        return journalid;
    }

    public void setJournalid(String journalid) {
        this.journalid = journalid;
    }

    public String getJournaltype() {
        return journaltype;
    }

    public void setJournaltype(String journaltype) {
        this.journaltype = journaltype;
    }

    public ImageType getImage() {
        return image;
    }

    public void setImage(ImageType image) {
        this.image = image;
    }

    public List<ItemType> getItem() {
        return item;
    }

    public void setItem(List<ItemType> item) {
        this.item = item;
    }


}


@Element(name="image")
public class ImageType {

    @Element
    private String url;

    @Element
    private String title;

    @Element
    private String link;

    @Element
    private String width;

    @Element
    private String height;


    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getLink() {
        return link;
    }

    public void setLink(String link) {
        this.link = link;
    }

    public String getWidth() {
        return width;
    }

    public void setWidth(String width) {
        this.width = width;
    }

    public String getHeight() {
        return height;
    }

    public void setHeight(String height) {
        this.height = height;
    }


}


@Element(name="item")
public class ItemType {

    @Element
    private GuidType guid;

    @Element
    private String pubDate;

    @Element
    private String title;

    @Element
    private String link;

    @Element
    private String description;

    @Element
    private String comments;

    @ElementList(inline=false)
    private List<String> category;

    @Element
    @Namespace(reference="http://www.livejournal.org/rss/lj/1.0/", prefix="lj")
    private String security;

    @Element
    @Namespace(reference="http://www.livejournal.org/rss/lj/1.0/", prefix="lj")
    private String replyCount;

    public GuidType getGuid() {
        return guid;
    }

    public void setGuid(GuidType guid) {
        this.guid = guid;
    }

    public String getPubDate() {
        return pubDate;
    }

    public void setPubDate(String pubDate) {
        this.pubDate = pubDate;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getLink() {
        return link;
    }

    public void setLink(String link) {
        this.link = link;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getComments() {
        return comments;
    }

    public void setComments(String comments) {
        this.comments = comments;
    }


    public List<String> getCategory() {
        return category;
    }

    public void setCategory(List<String> category) {
        this.category = category;
    }

    public String getSecurity() {
        return security;
    }

    public void setSecurity(String security) {
        this.security = security;
    }

    public String getReplyCount() {
        return replyCount;
    }

    public void setReplyCount(String replyCount) {
        this.replyCount = replyCount;
    }


}



@Element(name="guid")
public class GuidType {

    @Attribute
    public String isPermaLink;    

    public String text;   

    @Text
    public String getText() {
        return text;
    }

    @Text
    public void setText(String text) {
        this.text = text;
    }

    public String getIsPermaLink() {
        return isPermaLink;
    }

    public void setIsPermaLink(String isPermaLink) {
        this.isPermaLink = isPermaLink;
    }


}

执行此代码:

 String xmlData = retrieve("http://zuma.livejournal.com/data/rss");

        Serializer serializer = new Persister();            

        RssType example = serializer.read(RssType.class, xmlData);

得到这样的异常

org.simpleframework.xml.core.AttributeException: Attribute 'isPermaLink' does not have a match in class com.ljclient.xml.beans.ItemType at line 22

但是isPermaLink不是节点的属性<item>而是<guid>节点。

如果我isPermaLink成为一个属性,<item>在这种情况下,我会遇到以下异常:

org.simpleframework.xml.core.ValueRequiredException: Unable to satisfy @org.simpleframework.xml.ElementList(data=false, empty=true, entry=, inline=false, name=, required=true, type=void) on field 'category' private java.util.List com.ljclient.xml.beans.ItemType.category for class com.ljclient.xml.beans.ItemType at line 22

这很奇怪,因为每个类别节点都存在该值。有任何想法吗?

4

1 回答 1

5

这不是您问题的直接答案,但您是否尝试过创建RssType实例并将其写入 XML。这个练习的重点是,您可以看到您的标记如何针对任何明显的问题转换为 XML。

public static void main(String[] args) {
    RssType rss = new RssType();
    rss.setVersion("1.0");
    ChannelType channel = new ChannelType();
    channel.setTitle("Test title");
    // Set the rest of the variables
    rss.setChannel(channel);

    //do the same for you other types then
    //convert it to xml

    Serializer serializer = new Persister();
    File result = new File("rss.xml");

    serializer.write(rss, result);
}

我知道这并不能立即解决问题,但它应该引导您确定问题所在。


好的,我刚试过:

public static void main(String[] args) throws Exception {
    ItemType item = new ItemType();

    GuidType guid = new GuidType();
    guid.setIsPermaLink("true");
    guid.setText("http://zuma.livejournal.com/147000.html");    
    item.setGuid(guid);
    item.setPubDate("Sun, 07 Oct 2012 06:43:24 GMT");
    item.setTitle("tao machine");
    item.setLink("http://zuma.livejournal.com/147000.html");
    item.setDescription(">&lt;div class=&quot;qpp3&quot;&gt;&lt;div class=&quot;qpp4&quot;&gt;&lt;div class=&quot;qrbrdr1&quot;&gt;&lt;div class=&quot;qrbrdr2&quot;&gt;&lt;center&gt;&lt;img src=&quot;http://zuma.vip.warped.com/transparent_8x8.png&quot;&gt;&lt;br&gt;&lt;a title=&quot;http://stonedmotors.blogspot.com/2012/10/tao-machine.html&quot; href=&quot;http://stonedmotors.blogspot.com/2012/10/tao-machine.html&quot;&gt;&lt;img src=&quot;http://zuma.vip.warped.com/stonedmotors2.png&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;br&gt;&lt;img src=&quot;http://zuma.vip.warped.com/transparent_8x8.png&quot;&gt;&lt;/center&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src=&quot;http://zuma.vip.warped.com/transparent_8x8.png&quot;&gt;&lt;br&gt;&lt;div class=&quot;a720&quot;&gt;&lt;div class=&quot;b720&quot;&gt;&lt;span class=&quot;tnr&quot;&gt;midnight&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&quot;dirt-tired, greased &amp; wired, but the job&apos;s done, hey.&quot;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;the scattered tools upon the table, all in disarray. the wrenches, sockets, screwdrivers, extensions &amp; adaptors, nuts &amp; bolts &amp; washers scrounged from the floor and about all (mostly) gathered in coffee cans... the piles of parts; case halves, studs, con rods &amp; cranks, camshafts &amp; shims, heads, manifolds, oil radiators, fan housings, distributors, coils, voltage regulators, generators &amp; alternators, carbs &amp; pistons, fuel pumps, filters, trannies, CV joints, axles, brake shoes, fuses, spark plugs, batteries, mufflers, belts, pulleys, flywheels... the cans of mineral spirits, carb cleaner, oil &amp; gas; brake fluid... cleaning a set of wheel bearings w/ an air hose sets it spinning at umpteen hundred RPM. buckets of grease. pressure plates &amp; throw-out bearings. clamps &amp; hoses. breaker bars &amp; torgue wrenches. plastigauge. pedal clusters. cables. shifter plates &amp; bushings. tires, wheels, brake drums clanging, struck by a 5 pound sledge hammer. smoke from the ashtray curls up to the rafters. the coffee pot ticks. we laugh like mad children w/ dirt (like black soot) on our faces &amp; elbows &amp; old worn clothing in the midnight garage.&lt;/div&gt;&lt;/div&gt;&lt;img src=&quot;http://zuma.vip.warped.com/transparent_8x8.png&quot;&gt;&lt;div class=&quot;zim&quot;&gt;&lt;div class=&quot;im1&quot;&gt;&lt;div class=&quot;im2&quot;&gt;&lt;a title=&quot;960x640 version&quot; href=&quot;http://zuma.vip.warped.com/stomo8.png&quot;&gt;&lt;img src=&quot;http://zuma.vip.warped.com/stomo8_716x476.png&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src=&quot;http://zuma.vip.warped.com/transparent_8x8.png&quot;&gt;&lt;div class=&quot;a720&quot;&gt;&lt;div class=&quot;b720&quot;&gt;the eternal engine that moves us. forward.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&quot;i could carve one from a rock...&quot;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;crank it over. snick it in gear. let out the clutch. foot on the gas in Wide Open Throttle.&lt;br /&gt;&lt;br /&gt;stand on it.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;");
    item.setComments("http://zuma.livejournal.com/147000.html");
    item.setSecurity("public");
    item.setReplyCount("8");
    item.setCategory(new ArrayList<String>());

    Serializer serializer = new Persister();
    File result = new File("rss.xml");

    serializer.write(item, result);
}

并得到:

<itemType>
   <guid isPermaLink="true">http://zuma.livejournal.com/147000.html</guid>
   <pubDate>Sun, 07 Oct 2012 06:43:24 GMT</pubDate>
   <title>tao machine</title>
   <link>http://zuma.livejournal.com/147000.html</link>
   <description>&gt;&amp;lt;div class=&amp;quot;qpp3&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;qpp4&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;qrbrdr1&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;qrbrdr2&amp;quot;&amp;gt;&amp;lt;center&amp;gt;&amp;lt;img src=&amp;quot;http://zuma.vip.warped.com/transparent_8x8.png&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;a title=&amp;quot;http://stonedmotors.blogspot.com/2012/10/tao-machine.html&amp;quot; href=&amp;quot;http://stonedmotors.blogspot.com/2012/10/tao-machine.html&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://zuma.vip.warped.com/stonedmotors2.png&amp;quot; border=&amp;quot;0&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&amp;lt;img src=&amp;quot;http://zuma.vip.warped.com/transparent_8x8.png&amp;quot;&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;img src=&amp;quot;http://zuma.vip.warped.com/transparent_8x8.png&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;div class=&amp;quot;a720&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b720&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tnr&amp;quot;&amp;gt;midnight&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;i&amp;gt;&amp;quot;dirt-tired, greased &amp;amp; wired, but the job&amp;apos;s done, hey.&amp;quot;&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;the scattered tools upon the table, all in disarray. the wrenches, sockets, screwdrivers, extensions &amp;amp; adaptors, nuts &amp;amp; bolts &amp;amp; washers scrounged from the floor and about all (mostly) gathered in coffee cans... the piles of parts; case halves, studs, con rods &amp;amp; cranks, camshafts &amp;amp; shims, heads, manifolds, oil radiators, fan housings, distributors, coils, voltage regulators, generators &amp;amp; alternators, carbs &amp;amp; pistons, fuel pumps, filters, trannies, CV joints, axles, brake shoes, fuses, spark plugs, batteries, mufflers, belts, pulleys, flywheels... the cans of mineral spirits, carb cleaner, oil &amp;amp; gas; brake fluid... cleaning a set of wheel bearings w/ an air hose sets it spinning at umpteen hundred RPM. buckets of grease. pressure plates &amp;amp; throw-out bearings. clamps &amp;amp; hoses. breaker bars &amp;amp; torgue wrenches. plastigauge. pedal clusters. cables. shifter plates &amp;amp; bushings. tires, wheels, brake drums clanging, struck by a 5 pound sledge hammer. smoke from the ashtray curls up to the rafters. the coffee pot ticks. we laugh like mad children w/ dirt (like black soot) on our faces &amp;amp; elbows &amp;amp; old worn clothing in the midnight garage.&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;img src=&amp;quot;http://zuma.vip.warped.com/transparent_8x8.png&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;zim&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;im1&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;im2&amp;quot;&amp;gt;&amp;lt;a title=&amp;quot;960x640 version&amp;quot; href=&amp;quot;http://zuma.vip.warped.com/stomo8.png&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://zuma.vip.warped.com/stomo8_716x476.png&amp;quot; border=&amp;quot;0&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;img src=&amp;quot;http://zuma.vip.warped.com/transparent_8x8.png&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;a720&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b720&amp;quot;&amp;gt;the eternal engine that moves us. forward.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;i&amp;gt;&amp;quot;i could carve one from a rock...&amp;quot;&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;crank it over. snick it in gear. let out the clutch. foot on the gas in Wide Open Throttle.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;stand on it.&amp;lt;br /&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;</description>
   <comments>http://zuma.livejournal.com/147000.html</comments>
   <category class="java.util.ArrayList"/>
   <lj:security xmlns:lj="http://www.livejournal.org/rss/lj/1.0/">public</lj:security>
   <lj:replyCount xmlns:lj="http://www.livejournal.org/rss/lj/1.0/">8</lj:replyCount>
</itemType>

我注意到,如果未设置字段,我会遇到异常。所以我简单地设置了一切。然后我将 xml 编辑为如下所示:

<itemType>
   <guid isPermaLink="true">http://zuma.livejournal.com/147000.html</guid>
   <pubDate>Sun, 07 Oct 2012 06:43:24 GMT</pubDate>
   <title>tao machine</title>
   <link>http://zuma.livejournal.com/147000.html</link>
   <description>&gt;&amp;lt;div class=&amp;quot;qpp3&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;qpp4&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;qrbrdr1&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;qrbrdr2&amp;quot;&amp;gt;&amp;lt;center&amp;gt;&amp;lt;img src=&amp;quot;http://zuma.vip.warped.com/transparent_8x8.png&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;a title=&amp;quot;http://stonedmotors.blogspot.com/2012/10/tao-machine.html&amp;quot; href=&amp;quot;http://stonedmotors.blogspot.com/2012/10/tao-machine.html&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://zuma.vip.warped.com/stonedmotors2.png&amp;quot; border=&amp;quot;0&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&amp;lt;img src=&amp;quot;http://zuma.vip.warped.com/transparent_8x8.png&amp;quot;&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;img src=&amp;quot;http://zuma.vip.warped.com/transparent_8x8.png&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;div class=&amp;quot;a720&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b720&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tnr&amp;quot;&amp;gt;midnight&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;i&amp;gt;&amp;quot;dirt-tired, greased &amp;amp; wired, but the job&amp;apos;s done, hey.&amp;quot;&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;the scattered tools upon the table, all in disarray. the wrenches, sockets, screwdrivers, extensions &amp;amp; adaptors, nuts &amp;amp; bolts &amp;amp; washers scrounged from the floor and about all (mostly) gathered in coffee cans... the piles of parts; case halves, studs, con rods &amp;amp; cranks, camshafts &amp;amp; shims, heads, manifolds, oil radiators, fan housings, distributors, coils, voltage regulators, generators &amp;amp; alternators, carbs &amp;amp; pistons, fuel pumps, filters, trannies, CV joints, axles, brake shoes, fuses, spark plugs, batteries, mufflers, belts, pulleys, flywheels... the cans of mineral spirits, carb cleaner, oil &amp;amp; gas; brake fluid... cleaning a set of wheel bearings w/ an air hose sets it spinning at umpteen hundred RPM. buckets of grease. pressure plates &amp;amp; throw-out bearings. clamps &amp;amp; hoses. breaker bars &amp;amp; torgue wrenches. plastigauge. pedal clusters. cables. shifter plates &amp;amp; bushings. tires, wheels, brake drums clanging, struck by a 5 pound sledge hammer. smoke from the ashtray curls up to the rafters. the coffee pot ticks. we laugh like mad children w/ dirt (like black soot) on our faces &amp;amp; elbows &amp;amp; old worn clothing in the midnight garage.&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;img src=&amp;quot;http://zuma.vip.warped.com/transparent_8x8.png&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;zim&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;im1&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;im2&amp;quot;&amp;gt;&amp;lt;a title=&amp;quot;960x640 version&amp;quot; href=&amp;quot;http://zuma.vip.warped.com/stomo8.png&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://zuma.vip.warped.com/stomo8_716x476.png&amp;quot; border=&amp;quot;0&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;img src=&amp;quot;http://zuma.vip.warped.com/transparent_8x8.png&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;a720&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;b720&amp;quot;&amp;gt;the eternal engine that moves us. forward.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;i&amp;gt;&amp;quot;i could carve one from a rock...&amp;quot;&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;crank it over. snick it in gear. let out the clutch. foot on the gas in Wide Open Throttle.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;stand on it.&amp;lt;br /&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;</description>
   <comments>http://zuma.livejournal.com/147000.html</comments>
   <lj:security xmlns:lj="http://www.livejournal.org/rss/lj/1.0/">public</lj:security>
   <lj:replyCount xmlns:lj="http://www.livejournal.org/rss/lj/1.0/">8</lj:replyCount>
</itemType>

删除 ChannelType 值。当我试图读回它时:

ItemType read = serializer.read(ItemType.class, new File("rss.xml"));

我得到:

Exception in thread "main" org.simpleframework.xml.core.ValueRequiredException: Unable to satisfy @org.simpleframework.xml.ElementList(entry=, name=, inline=false, data=false, empty=true, type=void, required=true) on field 'category' private java.util.List ItemType.category for class ItemType at line 1
    at org.simpleframework.xml.core.Composite.validate(Composite.java:644)
    at org.simpleframework.xml.core.Composite.readElements(Composite.java:449)
    at org.simpleframework.xml.core.Composite.access$400(Composite.java:59)
    at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383)
    at org.simpleframework.xml.core.Composite.read(Composite.java:201)
    at org.simpleframework.xml.core.Composite.read(Composite.java:148)
    at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
    at org.simpleframework.xml.core.Persister.read(Persister.java:625)
    at org.simpleframework.xml.core.Persister.read(Persister.java:606)
    at org.simpleframework.xml.core.Persister.read(Persister.java:584)
    at org.simpleframework.xml.core.Persister.read(Persister.java:543)
    at org.simpleframework.xml.core.Persister.read(Persister.java:521)
    at org.simpleframework.xml.core.Persister.read(Persister.java:426)
    at Test.main(Test.java:31)

所以基本上它要求所有字段都在那里。因此,您需要将@Element@ElementList(inline=false)注释更改@Element(required=false)@ElementList(inline=false, required=false)任何可选字段。

于 2012-11-09T19:32:46.127 回答