Java java .lang.ClassCastException: javax. xml .bind.JAXBElement не может быть приведено к исключению, когда код, сгенерированный с помощью IntelliJ - PullRequest
0 голосов
/ 29 февраля 2020

Я создал Java объекты из XSD, используя IntelliJ Tools> JAXB> Generate Java Code From XML Схема, используя JAXB ...

Я в основном пытаюсь сгенерировать Java объекты из XSD, а затем прочитайте XML, который будет совместим с этим XSD, в Java объекты.

Для моего упражнения я использую XSD на веб-сайте шести групп, связанном с версией кредита 1.10.

Однако, когда я пытаюсь запустить следующий код, я вижу исключение: Java .lang.ClassCastException: javax. xml .bind.JAXBElement не может быть приведен

public class Pain001Tester {

    public static void main(String[] args) throws IOException {

        String fileName = "pain_001_Beispiel_1.xml";
        ClassLoader classLoader = new Pain001Tester().getClass().getClassLoader();

        File file = new File(classLoader.getResource(fileName).getFile());

        //File is found
        System.out.println("File Found : " + file.exists());

        //Read File Content
        String content = new String(Files.readAllBytes(file.toPath()));
        System.out.println(content);


        JAXBContext jaxbContext;
        try
        {
            jaxbContext = JAXBContext.newInstance(ObjectFactory.class);

            Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

            ObjectFactory xmlMessage = (ObjectFactory) jaxbUnmarshaller.unmarshal(new StringReader(content));
            //ObjectFactory xmlMessage = (ObjectFactory) JAXBIntrospector.getValue(jaxbUnmarshaller.unmarshal(new StringReader(content)));

            //JAXBElement<ObjectFactory> userElement = (JAXBElement<ObjectFactory>) jaxbUnmarshaller.unmarshal(new StringReader(content));
            //ObjectFactory user = userElement.getValue();

            System.out.println(xmlMessage);
        }
        catch (JAXBException e)
        {
            e.printStackTrace();
        }

    }
}

Я думаю, что моя проблема связана с XMLRootElement, но я не уверен, что это проблема. Я понимаю, что следующий вопрос stackoverflow приближается к моей проблеме, но не смог решить мою проблему, используя пару решений, выделенных в случае stackoverflow: Нет @XmlRootElement, сгенерированный JAXB

Ответы [ 2 ]

0 голосов
/ 29 февраля 2020

Я думаю, что нашел проблему (Хери сначала нажал кнопку, чтобы он получил куки)

Я изменил следующее:

ObjectFactory xmlMessage = (ObjectFactory) JAXBIntrospector.getValue ( jaxbUnmarshaller.unmarshal (новый StringReader (содержимое)));

до

JAXBElement xmlMessage = (JAXBElement) jaxbUnmarshaller.unmarshal (новый StringReader (содержимое));

* 101 вместо получения ответа на класс ObjectFactory я использовал класс элемента root, сгенерированный JAXB, и он работал.

Я не уверен, почему аннотирование ObjectFactory с @XmlRootElement (name = "RootElement") не работает, но Теперь у меня есть рабочее решение.

0 голосов
/ 29 февраля 2020

Я предполагаю, что ошибка возникает в

ObjectFactory xmlMessage = (ObjectFactory) jaxbUnmarshaller.unmarshal(new StringReader(content));

jaxbUnmarshaller.unmarshal () не возвращает тип ObjectFactoryt, поэтому вы не можете привести результат к ObjectFactory. Он возвращает экземпляр сгенерированного класса, который соответствует элементу root файла xml.

...