当前位置: 首页 > 知识库问答 >
问题:

Java . lang . nosuchmethodexception:JAXB解组接口

储法
2023-03-14

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

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

}

实现之一

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>

因此,当我尝试Unmarshall时,我得到这个错误堆栈跟踪。

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

它说没有默认构造函数,但在接口中?我真的很想知道我做错了什么?

我错过了注释类中的任何元素吗?

我的解编组代码!!

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

共有1个答案

慕弘伟
2023-03-14

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

不过,您可能只需要在<code>PlannedProgram</code>中指定具体类型,例如。

private TaskStepTimePeriod taskStep;
 类似资料:
  • 问题内容: 我有一些代码已经被转储并实际上被卡住了-之前我已经使用过RPC和JSON方面的东西,但是当它在本地运行良好时,我似乎无法使其在RPC上正常工作。 (也在这里,但没有可用的TCP!http: //play.golang.org/p/HmK-K09D2J ) 输出令人惊讶,因为它表明编组而不是实际数据出了点问题- 在Wireshark中运行它,我可以看到数据以正确的格式发送(我在另一个问题

  • 与marshall和unmarshall的读者和作者有争议。就是这样。这就是我如何向版画作者写东西的方式。 我是这样得到它的: 然后此解组操作将挂起。它没有给我任何东西,甚至没有例外。

  • 问题内容: 我通过Rabbitmq消息系统获得了。在发送之前, 我使用,将结果转换为并通过Rabbitmq发送。 我转换和发送的结构可以是:(更改了结构的名称和大小,但这没有关系) 要么 消息完全像a一样经过,并打印在另一面(某些服务器) 到目前为止,一切正常。现在,我试图将它们转换回它们的结构并声明类型。 第一次尝试是通过: 这是行不通的。当在拆封后打印它的类型时,我得到(?!?) 甚至比这更奇

  • 问题内容: 我有一个界面。 当我尝试创建这样的数组时会发生什么? 我如何实现此数组? 问题答案: 是的,有可能。您需要使用Type对象填充数组的字段 并且是实现Module接口的类。或者,您可以使用匿名内部类: 这回答了你的问题了吗?

  • ChartBuilder3.0版本的所有组件都提供JavaScript脚本编写和控制功能,ChartBuilder开放的组件控制接口包括如下几类: 组件样式控制 组件数据控制 辅助工具调用 组件动画控制 此文档适合ChartBuilder实施人员使用,在ChartBuilder工具上写JavaScript的时候,在输入this.之后,代码行也会给相应的API提示,选择API后再代码行里也会有辅助的

  • 问题内容: 我写了代码: 现在,我将类型输出为。但是,我无法遍历接口数组。我遇到错误:。有人可以解释一下为什么吗?另外,有什么解决方法? 问题答案: 在类型开关中,如果您希望访问强制转换为适当类型的变量,则只需使用类似的命令,并且在每种情况下,开关将具有适当的值。规范中有一个例子。您甚至可以这样做,并且在switch语句中将有v的阴影版本。 例如: 还要注意,当您只想打印变量的类型时,可以只使用“