Заранее прошу прощения за мой плохой английский.
У меня возникла проблема при демонтаже строки в 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;
}
}