首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JaxB绑定XMLGregorianCalendar

JaxB绑定XMLGregorianCalendar
EN

Stack Overflow用户
提问于 2011-07-14 13:57:46
回答 3查看 9.2K关注 0票数 4

将不正确的日期格式绑定到XMLGregorianCalendar时,JaxB不会引发异常。取而代之的是赋值为null。可能的问题是什么?

代码语言:javascript
复制
@XmlAttribute(name = "travelEndDate", required = true)
@XmlSchemaType(name = "date")
protected XMLGregorianCalendar travelEndDate;

<xs:complexType name="SearchCriteria">
<xs:attribute name="travelStartDate" type="xs:date" use="required"/>
<xs:attribute name="travelEndDate" type="xs:date" use="required"/>
</xs:complexType>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-14 22:02:46

注意:我是EclipseLink JAXB (MOXy)的负责人,也是JAXB2.x (JSR-222)专家组的成员。

这种行为在不同的JAXB实现中会略有不同。例如,如果值不正确,MOXy将抛出以下异常:

代码语言:javascript
复制
Exception in thread "main" javax.xml.bind.UnmarshalException
 - with linked exception:
[Exception [EclipseLink-3003] (Eclipse Persistence Services - 2.4.0.qualifier): org.eclipse.persistence.exceptions.ConversionException
Exception Description: Incorrect date format: [2011-02-50] (expected [YYYY-MM-DD])]
    at org.eclipse.persistence.jaxb.JAXBUnmarshaller.unmarshal(JAXBUnmarshaller.java:225)
    at forum254.Demo.main(Demo.java:18)
Caused by: Exception [EclipseLink-3003] (Eclipse Persistence Services - 2.4.0.qualifier): org.eclipse.persistence.exceptions.ConversionException
Exception Description: Incorrect date format: [2011-02-50] (expected [YYYY-MM-DD])
    at org.eclipse.persistence.exceptions.ConversionException.incorrectDateFormat(ConversionException.java:103)
    at org.eclipse.persistence.internal.oxm.XMLConversionManager.convertStringToXMLGregorianCalendar(XMLConversionManager.java:689)
    at org.eclipse.persistence.internal.oxm.XMLConversionManager.convertObjectToXMLGregorianCalendar(XMLConversionManager.java:278)
    at org.eclipse.persistence.internal.oxm.XMLConversionManager.convertObject(XMLConversionManager.java:249)
    at org.eclipse.persistence.oxm.XMLField.convertValueBasedOnSchemaType(XMLField.java:712)

解决方法

要获得任何JAXB实现的错误报告,您可以在解组程序上设置一个XML模式来执行验证:

  • http://bdoughan.blogspot.com/2010/12/jaxb-and-marshalunmarshal-schema.html

或者,您可以自己实现一个XmlAdapter来控制转换(并在必要时抛出异常):

  • http://bdoughan.blogspot.com/2011/05/jaxb-and-joda-time-dates-and-times.html
票数 4
EN

Stack Overflow用户

发布于 2011-07-14 15:37:21

也许这个链接对你有帮助:

http://eskatos.wordpress.com/2007/11/24/jaxb-custom-binding-for-joda-time/

它描述了如何使用定制的Java数据类型(此处: JodaTime)处理XML中的日期。

票数 1
EN

Stack Overflow用户

发布于 2011-07-14 14:18:23

使用此命令,它将捕获异常:

代码语言:javascript
复制
try {
   String date = "your date here"
   XMLGregorianCalendar xmlGCal = DatatypeFactory.newInstance().newXMLGregorianCalendar(date);
    } catch (DatatypeConfigurationException ex) {
       //DO STUFF
      }

更新:

在您添加代码之后,我不确定您将如何捕捉到这一点。为此,我认为你需要做一个空检查,然后做任何你想做的事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6689023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档