1

XMLからいくつかのオブジェクトを作成したいのですが、試していると次のエラーが発生します。

[26/07/12 16:20:03:763 CEST] ERROR sitemap.SitemapXMLServlet:
javax.xml.bind.UnmarshalException: unexpected element (uri:"http://www.sitemaps.org/schemas/sitemap/0.9", local:"urlset"). Expected elements are <{}url>
javax.xml.bind.UnmarshalException: unexpected element (uri:"http://www.sitemaps.org/schemas/sitemap/0.9", local:"urlset"). Expected elements are <{}url>

問題が見つからず、なぜ問題が発生しているのかわかりません。これは私が試したものです:

XMLファイル

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <url>
        <loc>http://LINK/shop/hoofdcategorie</loc>
        <lastmod>2012-07-26</lastmod>
        <changefreq>daily</changefreq>
        <priority>0.5</priority>
    </url>
    <url>
        <loc>
            http://LINK/shop/hoofdcategorie/subcategorie
        </loc>
        <lastmod>2012-07-26</lastmod>
        <changefreq>daily</changefreq>
        <priority>0.5</priority>
    </url>
</urlset>

XMLをオブジェクトにアンマーシャリングするメソッド

public void getXML() {
    final JAXBContext context = JAXBContext.newInstance(SitemapXML.class);
    final Unmarshaller unmarshaller = context.createUnmarshaller();
    String xml = URLReader.readUrlHttpClient("http://LINK/shop/sitemap.xml");
    final UrlSet urlSet = (UrlSet) unmarshaller.unmarshal(new StreamSource(new StringReader(xml)));
}

UrlSetクラス

@XmlRootElement(name = "urlset")
public class UrlSet {

    @XmlAttribute
    String xmlns;
    @XmlElement(name = "url")
    ArrayList<SitemapXML> sitemaps;


    public ArrayList<SitemapXML> getSitemaps() {
        return sitemaps;
    }

    public void setSitemaps(ArrayList<SitemapXML> sitemaps) {
        this.sitemaps = sitemaps;
    }

    @XmlAttribute
    public String getXmlns() {
        return xmlns;
    }

    public void setXmlns(String xmlns) {
        this.xmlns = xmlns;
    }
}

SitemapXMLクラス私がURLにマッピングするもの

@XmlRootElement(name = "url")
public class SitemapXML {

    String loc;
    Date lastmod;
    String changefreq;
    Double priority;

    public String getLoc() {
        return loc;
    }
    public void setLoc(String loc) {
        this.loc = loc;
    }
    public Date getLastmod() {
        return lastmod;
    }
    public void setLastmod(Date lastmod) {
        this.lastmod = lastmod;
    }
    public String getChangefreq() {
        return changefreq;
    }
    public void setChangefreq(String changefreq) {
        this.changefreq = changefreq;
    }
    public Double getPriority() {
        return priority;
    }
    public void setPriority(Double priority) {
        this.priority = priority;
    }
}
4

2 に答える 2

1

xmlは名前空間を使用しますが、アノテーションは名前空間について言及していません。XmlRootElementアノテーションで名前空間を指定するか、パッケージレベルでXmlSchemaアノテーションを追加できます。

于 2012-07-26T15:04:17.677 に答える
0

名前空間の修飾を指定するにpackage-infoは、アノテーション付きのクラスを追加する必要があります。@XmlSchema

package-info

以下は、必要なアノテーションが付いたサンプルpackage-infoクラスです。@XmlSchemaドメインオブジェクトに一致するようにパッケージを変更する必要があります。

@XmlSchema(
    namespace = "http://www.sitemaps.org/schemas/sitemap/0.9",
    elementFormDefault = XmlNsForm.QUALIFIED)
package com.example.foo;

import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

詳細については

于 2012-07-26T15:07:46.537 に答える