2014-10-01 72 views
4

我使用JAXB来取消/封送来自服务器的XML消息。通常我会在字段中获取XMLGregorianCalendar值,这些字段在描述XSD文件中定义为xs:dateTime,因此转换为XMLGregorianCalendar由JAXB自动完成。串是这样的::xs:xs格式的字符串:DateTime格式为XMLGregorianCalendar

<xs:element minOccurs="1" maxOccurs="1" name="Value" type="xs:string" /> 

但我接收到应代表的dateTime一个值:

<Value>2014-08-31T15:00:00Z</Value> 
从XSD文件

<xs:attribute name="readouttime" use="required" type="xs:dateTime" /> 

然而一个字段被定义为XS

实施例

有什么不错的方法,如何将此字符串转换为XMLGregorianCallendar,还是应该使用Sim pleDateFormat并手动输入模式?我觉得这可能是一个危险的部分。

回答

5

一个快速谷歌搜索产生

String mydatetime = "2011-09-29T08:55:00"; 
XMLGregorianCalendar xgc = DatatypeFactory.newInstance().newXMLGregorianCalendar(mydatetime); 

现金去this blog post

2

我的想法

String time = "yourTimeStamp"; 
SimpleDateFormat f = new SimpleDateFormat("yourFormat"); 
Date myDate = f.parse(time); 
GregorianCalendar c = new GregorianCalendar(); 
c.setTime(myDate); 
XMLGregorianCalendar myDate2 = DatatypeFactory.newInstance().newXMLGregorianCalendar(c); 
1

您可以在现场使用@XmlJavaTypeAdapter这样的..

@XmlElement(name = "string", required = true) 
@XmlJavaTypeAdapter(DateAdapter.class) 
protected XMLGregorianCalendar value; 

DateAdapter.java

import java.text.SimpleDateFormat; 

import javax.xml.bind.annotation.adapters.XmlAdapter; 
import javax.xml.datatype.DatatypeFactory; 
import javax.xml.datatype.XMLGregorianCalendar; 

public class DateAdapter extends XmlAdapter<String, XMLGregorianCalendar> { 

    private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

    public String marshal(XMLGregorianCalendar v) throws Exception { 
     return dateFormat.format(v); 
    } 

    public XMLGregorianCalendar unmarshal(String v) throws Exception { 
     return DatatypeFactory.newInstance().newXMLGregorianCalendar(v); 
    } 

} 
+0

我得到一个NullPointerException 的com.sun .xml.bind.api.AccessorException:java.lang.NullPointerException \t在com.sun.xml.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:247) \t在com.sun.xml.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:262) \t在com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeAttributes(ClassBeanInfoImpl.java:390) \t在com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:689) \t在com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:158 – Aguid 2017-10-10 09:31:13

+0

@AyadiAkrem这将是最好有一个情况,以评估XML,POJO等 – Xstian 2017-10-11 11:07:32

+0

那是我做过什么 – Aguid 2017-10-12 08:15:17