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.
- http://blog.bdoughan.com/2010/12/extending-jaxb-representing-annotations.html
- http://blog.bdoughan.com/2012/04/extending-jaxb-representing-metadata-as.html
Вы можете использовать XmlAdapter
обращаться с javax.sql.Date
а также javax.sql.Timestamp
типы: