JAXB și timestamp-uri care nu pot fi citite

Am observat anumite formate de dată și timp care nu pot fi citite corecte cu api-ul JAXB din Java. Mai bine spus, nu pot fi citite, adică acel câmp mapat în clasa din aplicație  este null.

Un exemplu de format de dată și timp cu timezone ar fi acesta 2020-10-13T12:25:00+0200.

In aplicație, campul aferent timestamp-ului are ca tip de data XMLGregorianCalendar, o clasă destul de veche folosită pentru a reprezenta timestamp-uri. Clasă veche și un format de timp mai deosebit din punct de vedere al timezone-ului nu fac casă bună și când am pornit testul pentru a vedea dacă se poate citi acel fișier, a ieșit o foarte frumoasă exceție NullPointerException.

Soluția cea mai la îndemană a fost să înlocuiesc XMLGregorianCalendar cu String și astfel citirea se face corect, eventualele erori, cum ar fi lipsa timestamp-ului sau invaliditatea lui, rămânând de tratat la un nivel mai sus, al aplicației.

O altă soluție ar mai fi screrea unui XmlAdapter custom care poate fi folosit pentru a citi corect acel câmp de dată din fișier.

Un exemplu, în cazul problemei de față ar fi acesta:

Și se folosește ca adnotare pe campul respectiv din clasă

@XmlJavaTypeAdapter(DateTimeAdapter.class)
protected XMLGregorianCalendar timestamp;

 

 

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.