gpt4 book ai didi

java - JAXB 为 @XmlTransient 字段抛出零参数构造函数错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:14:07 26 4
gpt4 key购买 nike

我有一个声明 Joda Time DateTime 字段的类。

但是,这个值不是由解码过程设置的,而是稍后在 afterUnmarhsal 方法中设置的。

因此,该字段被标记为XmlTransient:

@XmlTransient
private DateTime startTime;

但是,在尝试启动时,我遇到了这个错误:

javax.xml.bind.JAXBException: Exception Description: The class org.joda.time.DateTime$Property requires a zero argument constructor or a specified factory method. Note that non-static inner classes do not have zero argument constructors and are not supported. - with linked exception: [Exception [EclipseLink-50001] (Eclipse Persistence Services - 2.2.0.v20110202-r8913) ...

为什么 JAXB 应该关心这个类,因为它对于编码和解码目的来说显然是 transient 的?

如何让 JAXB 忽略这个字段?我知道我可以在那里放一个工厂方法,但这似乎毫无意义,因为工厂将无法实例化该值(这就是它在 afterUnmarshal 中完成的原因)

最佳答案

EclipseLink 2.2.0 中似乎存在一个错误,该错误已在以后的 EclipseLink 版本中修复。如果您使用默认访问权限 (XmlAccessType.PUBLIC),您仍会在最新的 EclipseLink 版本中看到此异常,但要注释该字段:

package forum9610190;

import javax.xml.bind.annotation.XmlTransient;
import org.joda.time.DateTime;

public class Root {

@XmlTransient
private DateTime startTime;

public DateTime getStartTime() {
return startTime;
}

public void setStartTime(DateTime startTime) {
this.startTime = startTime;
}

}

选项 #1 - 注释属性

您可以使用 @XmlTransient 注释属性(get 方法),而不是注释字段:

package forum9610190;

import javax.xml.bind.annotation.XmlTransient;
import org.joda.time.DateTime;

public class Root {

private DateTime startTime;

@XmlTransient
public DateTime getStartTime() {
return startTime;
}

public void setStartTime(DateTime startTime) {
this.startTime = startTime;
}

}

选项#2 - 注释字段并使用@XmlAccessorType(XmlAccessType.FIELD)

如果您希望注释该字段,则需要在您的类中指定@XmlAccessorType(XmlAccessType.FIELD):

package forum9610190;

import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlTransient;
import org.joda.time.DateTime;

@XmlAccessorType(XmlAccessType.FIELD)
public class Root {

@XmlTransient
private DateTime startTime;

public DateTime getStartTime() {
return startTime;
}

public void setStartTime(DateTime startTime) {
this.startTime = startTime;
}

}

了解更多信息

关于java - JAXB 为 @XmlTransient 字段抛出零参数构造函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9610190/

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