2014-10-01 3 views
4

Я использую JAXB для un/marshaling XML-сообщений, которые я получаю с сервера. Обычно я получаю значения XMLGregorianCalendar в полях, которые относятся к xs: dateTime в описании XSD-файлов, поэтому преобразование в XMLGregorianCalendar выполняется автоматически JAXB.xs: String в xs: формат DateTime для XMLGregorianCalendar

Пример из файла XSD

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

Однако одно поле определяется как хз: строки, например так:

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

, но я получаю значение, которое должно представлять DateTime:

<Value>2014-08-31T15:00:00Z</Value> 

Есть ли хороший способ, как преобразовать эту строку в XMLGregorianCallendar, или я должен использовать Sim pleDateFormat и введите шаблон вручную? Я чувствую, что это может быть опасной частью.

ответ

5

быстрый поиск Google дает

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 at com.sun.xml.bind.v2.runtime.XMLSerializer.reportError (XMLSerializer.java:247) \t at 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

+0

@AyadiAkrem было бы лучше иметь дела сценарий для оценки XML, POJO и т.д. – Xstian

+0

это то, что я сделал – Aguid

Смежные вопросы