2012-10-21 13 views
5

Używam jaxb w strukturze spring-mvc do generowania xml. Jest to przykład elementu głównego:Jaxb wygenerował xml - usuń domyślny prefiks przestrzeni nazw elementu głównego

<ns2:urlset xmlns:ns2="http://www.example.com"> 

To jest to, co chcę:

<urlset xmlns="http://www.example.com"> 

Próbowałem użyć następującego package-info.java usunąć domyślny przedrostek „NS2”.

@javax.xml.bind.annotation.XmlSchema( 
    namespace = "http://www.example.com", 
    xmlns = {@javax.xml.bind.annotation.XmlNs(namespaceURI = "http://www.example.com", prefix="")}, 
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.UNQUALIFIED) 
package com.example.code 

Prefiks można zmienić na inną wartość, jeśli ustawi się prefiks na inny ciąg. Przedrostka nie można jednak usunąć, ustawiając wartość prefiksu na "". Wciąż pokazuje domyślny "ns2". Czy istnieje sposób na usunięcie domyślnego prefiksu "ns2"?

Kolejnym pytaniem jest to, że jeśli można również usunąć "samodzielny" atrybut w nagłówku pliku xml? Jeśli tak, czy można to zrobić za pomocą package-info.java?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
+0

sam problem = ( – ekitru

Odpowiedz

2

Spróbuj tego:

package-info.java

@XmlSchema(
    namespace="http://www.sitemaps.org/schemas/sitemap/0.9", 
    elementFormDefault=XmlNsForm.QUALIFIED) 
package com.example.model; 
import javax.xml.bind.annotation.XmlSchema; 
import javax.xml.bind.annotation.XmlNsForm; 

XmlUrlSet.java

@XmlAccessorType(value = XmlAccessType.NONE) 
@XmlRootElement(name = "urlset", namespace = "http://www.sitemaps.org/schemas/sitemap/0.9") 
public class XmlUrlSet {...} 
0

jeśli końcówka Alex nie działa, może znalazłeś błąd (przynajmniej myślę, że to jeden) w implementacji referencyjnej jaxb. Właśnie miałem ten sam problem: Jeśli dodałem JaxbElement do mojej klasy modelu, RI jaxb zaczął ignorować mój domyślny obszar nazw. Nie mogłem znaleźć innego rozwiązania niż przejście na Eclipse MOXy (bez żadnych innych modyfikacji) i zadziałało. (Uwaga: należy zwrócić uwagę na another bug w Moxy)

również do drugiego pytania, użyj tego:

JAXBContext jc = JAXBContext.newInstance(...); 
Marshaller m = jc.createMarshaler(); 
m.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE); 
Powiązane problemy