2013-06-11 2 views
4

У меня есть простой XML-строку, как этотXML Дата Связывание Java Дата Объект

<table> 
    <test_id>t59</test_id> 
    <dateprix>2013-06-06 21:51:42.252</dateprix> 
    <nomtest>NOMTEST</nomtest> 
    <prixtest>12.70</prixtest> 
    <webposted>N</webposted> 
    <posteddate>2013-06-06 21:51:42.252</posteddate> 
</table> 

У меня есть класс Pojo для этого XML-строки, как этот

@XmlRootElement(name="test") 
public class Test { 
    @XmlElement 
    public String test_id; 
    @XmlElement 
    public Date dateprix; 
    @XmlElement 
    public String nomtest; 
    @XmlElement 
    public double prixtest; 
    @XmlElement 
    public char webposted; 
    @XmlElement 
    public Date posteddate; 
} 

Я использую JAXB для XML-привязки к java-объект. код

try { 
    Test t = new Test 
    JAXBContext jaxbContext = JAXBContext.newInstance(t.getClass()); 
    Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
    t = (Test) jaxbUnmarshaller.unmarshal(new InputSource(new StringReader(xml))); // xml variable contain the xml string define above 
} catch (JAXBException e) { 
    e.printStackTrace(); 
} 

Теперь мой вопрос заключается в том, что после связывания с объектом Java я получил нулевой для даты переменной (dateprix и posteddata), так как я мог получить значение для этого.

Если я использую «2013-06-06», я получил объект данных, но для «2013-06-06 21: 51: 42.252» у меня есть нуль.

+1

Проверить http://stackoverflow.com/questions/5775860/mapping-java-date-object-to-xml-schema-datetime-format для правильного формата даты. – SJuan76

ответ

4

JAXB ожидает дату в формате XML в формате xsd: date (yyyy-MM-dd) или xsd: dateTime (yyyy-MM-ddTHH: mm: ss.sss). 2013-06-06 21: 51: 42.252 недействительный формат даты DateTime 'T' (разделитель даты/времени) отсутствует. Вам нужен пользовательский XmlAdapter, чтобы JAXB конвертировал его в Java Date. Например

class DateAdapter extends XmlAdapter<String, Date> { 
    DateFormat f = new SimpleDateFormat("yyy-MM-dd HH:mm:ss.SSS"); 

    @Override 
    public Date unmarshal(String v) throws Exception { 
     return f.parse(v); 
    } 

    @Override 
    public String marshal(Date v) throws Exception { 
     return f.format(v); 
    } 
} 

class Type { 
    @XmlJavaTypeAdapter(DateAdapter.class) 
    public Date dateprix; 
... 
+0

это нормально для java.util.date, но как насчет java.sql.date ?? –

+1

, если это 2013-06-06 21: 51: 42.256, тогда это должна быть скорее отметка времени, а затем использовать Timestamp.valueOf (str); для синтаксического анализа и toString() для форматирования –

+0

спасибо за ваше время –

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