Исключение класса Cast при попытке демонтировать xml? - PullRequest
48 голосов
/ 01 апреля 2009

Попытка обойти исключение приведения класса здесь:

FooClass fooClass = (FooClass ) unmarshaller.unmarshal(inputStream);

выдает это исключение:

java.lang.ClassCastException: javax.xml.bind.JAXBElement

Я не понимаю этого - поскольку класс был сгенерирован инструментом xjc.bat - и классы, которые он генерировал, я вообще не изменил - поэтому здесь не должно быть проблем с приведением типов - демон-маршаллер должен действительно давать мне обратно класс, который МОЖЕТ быть приведен к FooClass.

Есть идеи, что я делаю не так?

Ответы [ 14 ]

0 голосов
/ 06 ноября 2018

В моем случае я получаю сообщение об ошибке при попытке отправить мыльную петицию из приложения SOAPUI. Мне нужно установить для свойства 'strip whitespaces' значение true, чтобы пропустить эту ошибку.

При отладке полученного контента, это список со следующим контентом:

[0] = "\n"
[1] = JAXBElement
[2] = "\n"

Надеюсь помочь кому-нибудь.

0 голосов
/ 15 июля 2016

Попробуйте это:

JAXBContext jc = JAXBContext.newInstance(Foo.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
JAXBElement element = (JAXBElement) unmarshaller.unmarshal( new StringReader(xmlString));
Foo foo = (Foo)element;
0 голосов
/ 30 октября 2013

Я также столкнулся с ошибкой «Javax.xml.bind.JAXBElement не может быть приведен к» и нашел это очень простое решение:

FooClass fooClass = (FooClass) ((JAXBElement) u.unmarshal(new File("xml/foo.xml")) ).getValue();

Поскольку, по-видимому, возвращается объект типа JAXBElement, вам нужно вместо этого типизировать его значение.

Источник: https://forums.oracle.com/thread/1625944

0 голосов
/ 09 сентября 2011

Укажите @XmlRootElement (name = "defineName", namespace = "namespace") для трансформируемого объекта.

...