jaxb unmarshall localDateTime многопоточная среда - PullRequest
0 голосов
/ 28 мая 2018

Заранее прошу прощения за мой плохой английский.

У меня возникла проблема при демонтаже строки в LocalDateTime в многопоточной среде.Я сгенерировал java classe (ActivityData) с org.apache.cxf версии 2.7.7

Когда я время от времени отлаживал приложение, год строки был поврежден с каким-то странным значением в началегод (например, 722008-01-01, A2008-01-01, 12008-01-01), когда я звоню клиенту, например мылу, дата хорошо отформатирована.LocalDateAdapter вызывается несколькими потоками в пакетном приложении.Когда я перезапускаю пакет, одни и те же вызовы успешно выполняются, а другие терпят неудачу, ошибка анализа непредсказуема.Проблема возникает только для начальной даты. Конечная дата в java-объекте всегда хорошо отформатирована

Я пытался синхронизировать метод, но это ничего не меняет.

Заранее спасибо заваша помощь

Вот код моего LocalDateTimeAdapter

public class LocalDateTimeAdapter extends XmlAdapter<String, LocalDateTime> {
    public synchronized LocalDateTime unmarshal(String v) {
        if (StringUtils.isNotBlank(v)) {
            try {
                return LocalDateTime.parse(v, DateTimeFormatter.ISO_DATE_TIME);
            } catch (Exception exception) {
throw new IllegalArgumentException("Parsing problem in the localDateTime for string : " + v);
            }

        }
        return null;
    }

    public String marshal(LocalDateTime v) {
        if (v != null) {
            return v.toString();
        }
        return StringUtils.EMPTY;
    }
}

Сгенерированный класс:

файл привязки:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxb:bindings
        xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:annox="http://annox.dev.java.net"
        xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_1.xsd"
        jaxb:extensionBindingPrefixes="xjc annox"
        version="2.1">

    <jaxb:globalBindings>
        <jaxb:serializable uid="1"/>
        <xjc:javaType
                name="java.time.LocalDate"
                xmlType="xs:date"
                adapter="be.fgov.minfin.vies.adapter.LocalDateAdapter"/>
        <xjc:javaType
                name="java.time.LocalDateTime"
                xmlType="xs:dateTime"
                adapter="be.fgov.minfin.vies.adapter.LocalDateTimeAdapter"/>
    </jaxb:globalBindings>
</jaxb:bindings>

сгенерированный класс:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "ActivityData", propOrder = {
    "beginDate",
    "endDate"
})
public class ActivityData
    implements Serializable
{

    private final static long serialVersionUID = 1L;
    @XmlElement(type = String.class)
    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
    @XmlSchemaType(name = "dateTime")
    protected LocalDateTime beginDate;

    @XmlElement(type = String.class)
    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
    @XmlSchemaType(name = "dateTime")
    protected LocalDateTime endDate;


    /**
     * Gets the value of the beginDate property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public LocalDateTime getBeginDate() {
        return beginDate;
    }

    /**
     * Sets the value of the beginDate property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setBeginDate(LocalDateTime value) {
        this.beginDate = value;
    }


    /**
     * Gets the value of the endDate property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public LocalDateTime getEndDate() {
        return endDate;
    }

    /**
     * Sets the value of the endDate property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setEndDate(LocalDateTime value) {
        this.endDate = value;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...