gpt4 book ai didi

java - 使用 JAXB 将日期从 XML 字符串解码为实体

转载 作者:数据小太阳 更新时间:2023-10-29 02:12:20 24 4
gpt4 key购买 nike

当我使用 JAXB 时,出现了问题。

我将实体转换为 xml 字符串,一切正常。

但是当我将 xml 字符串转换回实体时,一些信息丢失了(所有信息都具有相同的类型 java.util.Date)。

在实体中:
public Date flightBaseDate;

在 xml 中:
<flightBaseDate>2013-09-16T00:00:00 08:00</flightBaseDate>

解码后,getFlightBaseDate()返回 null .

我用谷歌搜索。
根据一项建议,我在我的实体中使用了@。
然后是:

@XmlElement(name = "timestamp", required = true)
public Date flightBaseDate;

我相信它会很完美,
但是...抛出异常,如下所示:

com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptionsClass has two properties of the same name "flightBaseDate"    this problem is related to the following location:at public java.lang.String com.wonders.nlia.omms.vo.FlightServiceInfoVo.getFlightBaseDate()at com.wonders.nlia.omms.vo.FlightServiceInfoVo    this problem is related to the following location:at public java.lang.String com.wonders.nlia.omms.vo.FlightServiceInfoVo.flightBaseDateat com.wonders.nlia.omms.vo.FlightServiceInfoVo

Why JAXB could not distinguish between the property and its getMethod?

How to solve it?

Platform:jdk7 win7 eclipse tomcat wtp

My Unmarshalling code is:

JAXBContext context = JAXBContext.newInstance(FlightServiceInfoVo.class);
Unmarshaller unMarshaller = context.createUnmarshaller();
FlightServiceInfoVo flightServiceInfoVo =(FlightServiceInfoVo)unMarshaller.unmarshal(new StringReader(flightServiceInfoVoXml));

flightServiceInfoVoXml 是一个字符串。

最佳答案

您可以通过许多不同的方式配置 JAXB。您已选择注释来定义绑定(bind)(这没关系,不用担心)。

我强烈建议您先阅读该技术,因为其中存在很多陷阱。这是一个很好的链接 tutorial .这是教程中的部分,它解释了为什么绑定(bind)不起作用:XmlAccessorType part

至于您的具体问题:通常,您必须告诉 JAXB 什么以及如何将 java 对象绑定(bind)到它的 XML 表示形式。如果您什么都不做,那么默认情况下您类(class)的所有公共(public)成员都将被绑定(bind)(您可以阅读 here )。

此外,您还选择了对公共(public)成员的 getter 方法进行注释,然后它会将同一个变量推送到您的 XML 两次,这稍后会导致您看到的异常。

要修复您的错误,请为您的类指定不同的映射策略,例如: (@XmlAccessorType(XmlAccessType.NONE)) 在您的类声明之前或将注释从 getter 方法移动到属性。

顺便说一下:拥有一个 getter 方法和一个公共(public)成员变量根本没有意义。因此,将您的成员变量设为私有(private)也将解决您与 JAXB 相关的问题,并且有利于您的类设计。

关于java - 使用 JAXB 将日期从 XML 字符串解码为实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19628612/

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