gpt4 book ai didi

java.lang.NoSuchMethodException : JAXB Unmarshalling Interfaces

转载 作者:行者123 更新时间:2023-12-01 10:52:08 25 4
gpt4 key购买 nike

我现在正在关注与 JAXB 编码/解码相关的线程一段时间。

当我尝试将 Java 对象转换为 XML 时,我遇到了问题,其中有一些接口(interface)。后来我发现可以使用 EclipseLink 的 MOxy 来解决这个问题。 @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);

}

实现之一

任务步骤时间周期

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>

因此,当我尝试解码时,我收到此错误堆栈跟踪..

 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 --> [])

它说没有默认构造函数,但是在接口(interface)中?真的很感激一些关于我做错了什么的指示吗?

我是否错过了对类中的任何元素进行注释?

我的解码代码。!

 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);
}

最佳答案

请参阅https://jaxb.java.net/guide/Mapping_interfaces.html 。第 3.2.2 节和第 3.2.3 节是最相关的。

不过,也许您可​​以在 PlannedProgram 中指定具体类型,例如

private TaskStepTimePeriod taskStep;

关于java.lang.NoSuchMethodException : JAXB Unmarshalling Interfaces,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33806057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com