JAXB демарширует пользовательские объекты без аннотации

У нас есть XML-файл, который нам нужно разобрать (преобразовать в Java-объект). Теперь объект Java принадлежит третьей стороне, и я не могу аннотировать его для демаршаллинга. Любая идея о том, как я могу Unmarshal без аннотации. Пожалуйста, найдите мой фрагмент кода ниже

JAXBContext context;
        try {
            context = JAXBContext.newInstance(Abc.class);
            Unmarshaller unMarshaller = context.createUnmarshaller();
            Abc abc= (Abc) unMarshaller.unmarshal(new FileInputStream("C:\\Documents and Settings\\sandeep.nair\\Desktop\\abc.xml"));
        } catch (JAXBException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (Exception e){

        }

Я получаю следующее исключение. Один для конструктора без аргументов (я знаю, что могу решить эту проблему, добавив аннотацию для адаптера, но я хочу узнать или увидеть образец фрагмента для обработки без аннотации)

Точно так же я получаю другое сообщение о том, что интерфейсы не могут быть обработаны JAXB.

com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 5 отсчетов исключений IllegalAnnotationExceptions java.sql.Timestamp не имеет конструктора по умолчанию без аргументов. эта проблема связана со следующим местоположением: в java.sql.Timestamp в публичном java.sql.Timestamp com.test.Abc.getSomeTimestamp() в com.riteaid.entities.customer.Customer com.test.Def не имеет Конструктор по умолчанию без аргументов. Эта проблема связана со следующим местоположением: на com.test.Def...

java.sql.Date не имеет конструктора по умолчанию без аргументов. Эта проблема связана со следующим местоположением: в java.sql.Date ... com.test.Ghi является интерфейсом, и JAXB не может обрабатывать интерфейсы. Эта проблема связана со следующим местоположением: ... com.test.Ghi не имеет конструктора по умолчанию без аргументов. эта проблема связана со следующим местоположением:..

1 ответ

Решение

Примечание: я являюсь лидером EclipseLink JAXB (MOXy) и являюсь членом экспертной группы JAXB (JSR-222).

JAXB - это конфигурация по исключению, поэтому вам нужно добавить аннотации только там, где вы хотите переопределить поведение отображения по умолчанию:

Стандартный способ предоставления метаданных - аннотации. В ситуациях, когда вы не можете аннотировать, например, сторонние классы, вас может заинтересовать расширение внешнего документа сопоставления MOXy.

Вы можете использовать XmlAdapter обращаться с javax.sql.Date а также javax.sql.Timestamp типы:

Другие вопросы по тегам