java – xsd:datetime和XmlGregorianCalendar导致NullPointerException
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – xsd:datetime和XmlGregorianCalendar导致NullPointerException,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2434字,纯文字阅读大概需要4分钟。
内容图文
![java – xsd:datetime和XmlGregorianCalendar导致NullPointerException](/upload/InfoBanner/zyjiaocheng/751/a33d0d384a3c4e86b864ecb0919f1a10.jpg)
以下作品:
public Date getDate() {
return date;
}
并产生类似的东西:
<date>2010-03-23T17:43:50.879Z</date>
我可以使用XmlGregorianCalendar返回xsd:date或xsd:time类型:
@XmlSchemaType(name="date")
public XmlGregorianCalendar getDate() {
return date;
}
它产生的东西如下:
<date>2010-03-23</date>
但尝试返回xsd:datetime如下:
@XmlSchemaType(name="datetime")
public XmlGregorianCalendar getDate() {
return date;
}
导致此堆栈跟踪:
java.lang.NullPointerException
at com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl.checkXmlGregorianCalendarFieldRef(RuntimeBuiltinLeafInfoImpl.java:864)
at com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl.access$200(RuntimeBuiltinLeafInfoImpl.java:111)
at com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl$13.print(RuntimeBuiltinLeafInfoImpl.java:536)
...snip...
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
根本没有提到我的代码.
我正在使用tomcat 6.0.24,java 1.6.0_16-b01
解决方法:
我找到了基本的问题:它应该是“dateTime”而不是“datetime”,但是有很多更深层次的方面.
首先,跟踪给了我很少的帮助,我花了一些时间找到正确的来源(jaxb-ri-2_2.src.zip). 864行是这样的:
int bitField = xmlGregorianCalendarFieldRef.get(type);
和xmlGregorianCalendarFieldRef定义为:
private static final Map<QName, Integer> xmlGregorianCalendarFieldRef =
new HashMap<QName, Integer>();
static {
Map<QName, Integer> f = xmlGregorianCalendarFieldRef;
f.put(DatatypeConstants.DATETIME, 0x1111111);
f.put(DatatypeConstants.DATE, 0x1111000);
f.put(DatatypeConstants.TIME, 0x1000111);
f.put(DatatypeConstants.GDAY, 0x1001000);
f.put(DatatypeConstants.GMONTH, 0x1010000);
f.put(DatatypeConstants.GYEAR, 0x1100000);
f.put(DatatypeConstants.GYEARMONTH, 0x1110000);
f.put(DatatypeConstants.GMONTHDAY, 0x1011000);
}
因此xmlGregorianCalendarFieldRef本身不能为null,但是如果使用地图中不存在的键调用get(),则它将返回null,并且当JVM尝试将其取消时,将抛出NullPointerException.
这段代码有点草率;不检查类型值,这就是为什么我们得到这个相当神秘的消息.
显然,我然后查找了DatatypeConstants.DATETIME的值,发现了大小写错误.
这也让我相信我应该使用类似的东西:
@XmlSchemaType(name=DatatypeConstants.DATETIME)
public XmlGregorianCalendar getDate() {
return date;
}
为了增加保护,但该常量是QName而不是字符串.
内容总结
以上是互联网集市为您收集整理的java – xsd:datetime和XmlGregorianCalendar导致NullPointerException全部内容,希望文章能够帮你解决java – xsd:datetime和XmlGregorianCalendar导致NullPointerException所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。