- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个声明 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/
我有两门课: public class A implements Serializable { ... @OneToMany(cascade = CascadeType.ALL, ma
编码时是否可以在不使用@XmlTransient的情况下忽略某些元素 JAXBContext jc = JAXBContext.newInstance(Customer.class);
@XmlTransient 阻止将 JavaBeans 属性映射到 XML 表示。是否存在与此相反的情况,这意味着即使 WebService 未使用的方法也会被映射?如果这不可能,是否存在解决方法?
有没有一种方法可以配置 @XmlTransient JPA2.0 注释,它只会在 Java 对象序列化为 xml 时阻止 JAXB 机制,而不是在传入的 XML 转换为 java 对象时阻止 JAXB
我的实体有一个属性, @Embedded @XmlTransient private ReleaseTraits traits; @XmlTransient public ReleaseTraits
我在我的项目中使用 Spring 和 Apache CXF,该项目以首次代码风格实现 Java Web 服务。 我有一个定义的变量: @XmlTransient public String word;
我正在尝试使用 JAXB 解码以下 XML: Basement Jaxx Back 2 the Wild B
@JsonIgnore @Xmltransient private int id 我想了解在某些属性/字段 @JsonIgnore 之上使用这两个注释的目的& @Xmltransient举个例子。 我
自从有一天我陷入了这个问题。但首先我想描述一下,为什么我要按照所示的方式进行: 我们正在使用 EE7 和 Glassfish4 在 Java 中构建 RESTful API。身份验证和授权必须自己构建
我有一个声明 Joda Time DateTime 字段的类。 但是,这个值不是由解码过程设置的,而是稍后在 afterUnmarhsal 方法中设置的。 因此,该字段被标记为XmlTransient
使用 JXC 模式生成 ant 任务,我似乎无法让它忽略枚举。我有几个内部使用的枚举来表示与生成的 XML 无关的类型或次要配置值。 我可以使用枚举作为 @XmlTransient 来排除该字段,以将
我正在尝试将 XML 解码为一个我期望应该具有特定字段的对象。但是,我不想将该对象编码到包含它的 XML 中。我喜欢的类似于: @XmlRootElement(name = "User") publi
我的应用程序在后端使用多个 POJO 将数据从后端编码到 UI。数据以字符串形式来自数据库,使用 Jackson 将其映射到我们的 POJO,然后我们使用 @Produces(MediaType.AP
我有代表用户的类。用户被分为两组,具有不同的id。我可以制作类似“if statements”的内容,以便 if (id==1) 在字段 @XMLTransient 上设置注释 或者唯一的一种方法是创
我有一个 XSD,想要将一些属性标记为 XmlTransient,以便 XJC 在 Java 中生成这些属性,并通过 JAXB 编码和解编码忽略这些属性。 我可以修改 XSD,但不知道应该在 xs:a
我正在使用 Jackson (jaxb) 进行 JSON 编码和解码。 例如,我在这里注释了地址字段 XmlTransient,因为我不希望在列出人员记录时映射它(安全和速度问题),地址字段无论如何都
我像这样注释了一个 XmlAdapter 类: @XmlTransient public class DateTimeXmlAdapter extends XmlAdapter { 但 schemag
我正在使用 JAXB 将一些 xml 解码到对象中。 我有一个继承自抽象类的类。我已将抽象类标记为@XmlTransient。然后使用 XMLType PropOrder 我可以访问抽象类中的属性,如
我正在使用 JAX-RS 和 JAXB 开发 RESTful 服务。我有一个Complain类,以下是它的精简版本: @Entity @Table(name = "complain") @XmlRoo
我有一个实体类: public class Customer implements Serializable { private static final long serialVersionUID
我是一名优秀的程序员,十分优秀!