Исключение JAXB Unmarshall — неожиданный элемент

Я использовал файл .xsd для создания классов Java, а с файлом XML мне нужно распаковать.

Я использую этот код:

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();

и я получаю эту ошибку:

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

Я видел много решений, но ничего не работает в моем проекте.

Что я могу попробовать сделать?


person Vítor Nóbrega    schedule 02.03.2012    source источник
comment
Вы можете начать с демонстрации содержимого файла test.xml.   -  person skaffman    schedule 02.03.2012


Ответы (2)


В корне xml отсутствует атрибут пространства имен (uri). Лучше попробуйте это на XMLRootElement ...

@XmlRootElement(name = "root", namespace="")
person Waqas Memon    schedule 29.03.2012
comment
namespace= было для меня критично - person dirkoneill; 12.12.2013
comment
Вы имеете в виду изменение автоматически сгенерированного класса Java и добавление к нему этой аннотации? - person Line; 01.06.2017
comment
Если нужно изменить сгенерированный код, почему бы и нет... Я имею в виду, что он может глючить... - person Waqas Memon; 27.07.2017

Пытаться

StreamSource streamSource = new StreamSource("test.xml")
JAXBElement<Root> objMyRoot = (JAXBElement<Root>) objUnmarshaller.unmarshal(streamsource, Root.class);
person Stroboskop    schedule 23.09.2013
comment
Могу ли я использовать его со строкой XML? - person Line; 01.06.2017
comment
@Line StreamSource принимает только источники InputStream, Reader и File. Но вы можете использовать StringReader для подключения строки XML. StreamSource streamSource = new StreamSource(new StringReader(xmlText)); - person Stroboskop; 26.06.2017