2011-12-06 12 views
5

Tutto funziona perfettamente con l'eccezione che non riesco a creare correttamente lo spazio dei nomi. Ogni aiuto è molto apprezzato!Come generare lo spazio dei nomi della sitemap corretto usando JAXB e Spring @ResponseBody nel controller?

mio regolatore:

@Controller 
@RequestMapping("/sitemap") 
public class SitemapController 
{ 
    public @ResponseBody XMLURLSet getSitemap(){ 
     XMLURLSet urlSet = new XMLURLSet(); 
     //populate urlList 
     urlSet.setUrl(urlList); 
     return urlSet; 
    } 
} 

mio urlset:

@XmlRootElement(name = "url") 
public class XMLURL { 
    String loc; 
    @XmlElement(name = "loc") 
    public String getLoc(){ 
     return loc; 
    } 
    public void setLoc(String loc){ 
    this.loc = loc; 
} 

}

mio elemento url:

@XmlRootElement(name = "urlset", namespace = "http://www.sitemaps.org/schemas/sitemap/0.9") 
    public class XMLURLSet{ 
     List<XMLURL> url; 
     public List<XMLURL> getUrl(){ 
      return url; 
     } 
     public void setUrl(List<XMLURL> url){ 
     this.url = url; 
    } 

} 

quello che mi aspettavo da generare:

<?xml version="1.0" encoding="UTF-8"?> 
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> 
<url> 
<loc>http://www.example.com/</loc> 
</url> 

cosa ma ho generato:

<ns2:urlset xmlns:ns2="http://www.sitemaps.org/schemas/sitemap/0.9"> 
<url> 
<loc>http://www.example.com/</loc> 
</url> 
</ns2:urlset> 
</urlset> 

Grazie!

risposta

5

È possibile utilizzare l'annotazione @XmlSchema per specificare elementFormDefault è qualificato. Questo dovrebbe aiutare con il tuo caso d'uso.

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

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

Per ulteriori informazioni

+0

Dove posso trovare il contenuto del file del pacchetto-info? – Pomario

+2

'package-info' è in realtà una classe in modo da avere un' package-info.java' nello stesso pacchetto delle classi di dominio con contenuti simili a quelli forniti nella mia risposta. –

+0

funziona. sullo stesso thread, come aggiungerebbe la codifica dell'XML per generare . Ho visto come farlo manipolare il Marshler, però, il mio codice non mi consente di farlo – Pomario

Problemi correlati