[java] जैक्सब unmarshal timestamp



Answers

जेएक्सबी मार्शल Date ऑब्जेक्ट्स सीधे नहीं कर सकता है, क्योंकि उनके पास पर्याप्त जानकारी नहीं है। इस उद्देश्य के लिए XmlGregorianCalendar ने XmlGregorianCalendar क्लास की शुरुआत की, लेकिन यह सीधे उपयोग करने के लिए बहुत अप्रिय है।

मैं आपके timestamp फ़ील्ड को XmlGregorianCalendar होने के लिए बदलने का सुझाव देता XmlGregorianCalendar , और जहां संभव हो, आपके पास पहले से मौजूद सार्वजनिक इंटरफ़ेस को बनाए रखते हुए इस फ़ील्ड को अपडेट करने के लिए अपने विभिन्न तरीकों को बदलना है।

यदि आप Date फ़ील्ड रखना चाहते हैं, तो आपको अपनी खुद की XmlAdapter क्लास को JAXB को बताने के लिए एक्सएमएल से अपनी Date को कैसे चालू करें।

Question

मैं JAXB को एक Resteasy JAX-RS सर्वर अनुप्रयोग में एक टाइमस्टैम्प unmarshal नहीं मिल सकता है।

मेरी कक्षा इस तरह दिखती है:

@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name = "foo")
public final class Foo {
    // Other fields omitted

    @XmlElement(name = "timestamp", required = true)
    protected Date timestamp;

    public Foo() {}

    public Date getTimestamp() {
        return timestamp;
    }

    public String getTimestampAsString() {
        return (timestamp != null) ? new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(timestamp) : null;
    }

    public void setTimestamp(final Date timestamp) {
        this.timestamp = timestamp;
    }

    public void setTimestamp(final String timestampAsString) {
        try {
            this.timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(timestampAsString);
        } catch (ParseException ex) {
            this.timestamp = null;
        }
    }
}

कोई विचार?

धन्यवाद।




इस एडाप्टर का उपयोग थ्रेड सुरक्षित होना चाहिए:

public class DateXmlAdapter extends XmlAdapter<String, Date> {

    /**
     * Thread safe {@link DateFormat}.
     */
    private static final ThreadLocal<DateFormat> DATE_FORMAT_TL = new ThreadLocal<DateFormat>() {

        @Override
        protected DateFormat initialValue() {
            return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
        }

    };

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

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

}





Links