2012-03-02 15 views
7

Do wygenerowania klas Java użyłem pliku .xsd, a przy pliku XML muszę go usunąć.wyjątek JAXB Unmarshall - nieoczekiwany element

Używam tego kodu:

JAXBContext objJAXBContext = JAXBContext.newInstance("my.test"); 

// create an Unmarshaller 
Unmarshaller objUnmarshaller = objJAXBContext.createUnmarshaller(); 

FileInputStream fis = new FileInputStream("test.xml"); 

JAXBElement<Root> objMyRoot = (JAXBElement<Root>) objUnmarshaller.unmarshal(fis); 

Root mRoot = objMyRoot.getValue(); 

i otrzymuję ten błąd:

javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"Root"). Expected elements are (none) 

Widziałem wiele rozwiązań, ale nic nie działa w moim projekcie.

Co mogę spróbować zrobić?

+0

można rozpocząć pokazując nam zawartość 'test.xml'. – skaffman

+0

I plik xsd. –

Odpowiedz

16

Twój xml root nie ma atrybutu namespace (uri). Lepiej spróbować na XMLRootElement ...

@XmlRootElement(name = "root", namespace="") 
+0

namespace = "" było dla mnie ważne – dirkoneill

+0

masz na myśli zmianę automatycznie wygenerowanej klasy Java i dodanie do niej adnotacji? – Line

+0

Jeśli trzeba zmienić wygenerowany kod, dlaczego nie .. Mam na myśli, że może to być błędne ... –

4

Spróbuj

StreamSource streamSource = new StreamSource("test.xml") 
JAXBElement<Root> objMyRoot = (JAXBElement<Root>) objUnmarshaller.unmarshal(streamsource, Root.class); 
+0

Czy mogę go używać z ciągiem XML? – Line

+1

@Line StreamSource akceptuje tylko źródła InputStream, Reader i File. Ale możesz użyć 'StringReader', aby podłączyć ciąg znaków XML. 'StreamSource streamSource = new StreamSource (new StringReader (xmlText)); – Stroboskop

Powiązane problemy