Я следую за потоками, связанными с JAXB Marshalling/Unmarshalling некоторое время.java.lang.NoSuchMethodException: JAXB Unmarshalling Interfaces
У меня возникли проблемы, когда я пытался преобразовать объект Java в XML, в котором были некоторые интерфейсы. Позже я узнал, что это можно решить с помощью Mxy EclipseLink. @ Статьи Bdoughan здесь http://blog.bdoughan.com/2012/07/jaxb-no-annotations-required.html и ответы были очень полезными. Но теперь у меня проблемы, когда я пытаюсь развязать тот же XML-файл, сгенерированный обратно в объекты Java.
Это интерфейс.
public interface TimePeriod extends Serializable{
/**
* Return the end Time of the Time Period
*/
public Date getEndDate();
/**
* Return the startTime of the Time Period
*/
public Date getStartDate();
/**
* Sets the startTime of the Time period
*/
public void setStartDate(Date newStartDate);
/**
* Sets the endTime of the Time period
*/
public void setEndDate(Date newEndDate);
}
Один из Реализации
TaskStepTimePeriod
public class TaskStepTimePeriod implements TimePeriod {
private Date taskStartDate;
private Date taskEndDate;
@Override
public Date getEndDate() {
return taskEndDate;
}
@Override
public Date getStartDate() {
return taskStartDate;
}
public void setTaskStartDate(Date newVal) {
this.taskStartDate = newVal;
}
public void setTaskEndDate(Date newVal) {
this.taskEndDate = newVal;
}
@Override
public void setStartDate(Date newStartDate) {
this.taskStartDate = newStartDate;
}
@Override
public void setEndDate(Date newEndDate) {
this.taskEndDate = newEndDate;
}
}
выстроил XML
<?xml version="1.0" encoding="UTF-8"?>
<plannedProgram>
<taskStep>
<endDate>2014-07-31T12:00:00.262+05:30</endDate>
<startDate>2014-06-01T12:00:00.262+05:30</startDate>
</taskStep>
</plannedProgram>
Так что, когда я пытаюсь маршализацию, я получаю эту ошибку StackTrace ..
Exception in thread "main" Local Exception Stack:
Exception [EclipseLink-63] (Eclipse Persistence Services - 2.6.1.v20150916-55dc7c3): org.eclipse.persistence.exceptions.DescriptorException
Exception Description: The instance creation method [com.cts.axb.model.TimePeriod.<Default Constructor>], with no parameters, does not exist, or is not accessible.
Internal Exception: java.lang.NoSuchMethodException: com.cts.axb.model.TimePeriod.<init>()
Descriptor: XMLDescriptor(com.cts.axb.model.TimePeriod --> [])
В нем нет конструктора по умолчанию, но в интерфейсе? Было бы очень полезно понять, что я сделал неправильно?
Я пропустил аннотирование любых элементов в классах?
My Unmarshalling code.!
try {
context = JAXBContext.newInstance(PlannedProgram.class);
Unmarshaller jaxbUnmarshaller = context.createUnmarshaller();
newMaintProg = (PlannedProgram) jaxbUnmarshaller.unmarshal(file);
System.err.println("XML file succesffuly read");
} catch (JAXBException e) {
System.err.println("Error Reading/Unmarshalling the XML file "+ e);
}
Я не могу добавлять/удалять поля в основной модели PlannedProgram. Я собираюсь попробовать метод XMLAdapter в указанных вами ссылках! – Napster
Ну, это работало как реализация, упомянутая в 3.2.2, теперь я получаю ** null **, когда я отменяю эти значения даты. – Napster