2015-01-28 7 views
6

Я пытаюсь использовать JAXB с полями типа LocalDateTime. Я написал адаптер для обработки преобразования:Использование LocalDateTime с JAXB

public class LocalDateTimeXmlAdapter extends XmlAdapter<String, LocalDateTime> { 
    @Override 
    public String marshal(LocalDateTime arg0) throws Exception { 
     return arg0.toString(); 
    } 

    @Override 
    public LocalDateTime unmarshal(String arg) throws Exception { 
     return LocalDateTime.parse(arg); 
    } 
} 

Я зарегистрировал адаптер в package-info.java так:

@XmlJavaTypeAdapters({ 
     @XmlJavaTypeAdapter(type=LocalDateTime.class, value=LocalDateTimeXmlAdapter.class) 
}) 
package xml; 

import java.time.LocalDateTime; 

import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; 
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters; 

Это, как представляется, достаточно согласно this page. Однако, я получаю следующее сообщение об ошибке:

com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions 
java.time.LocalDateTime does not have a no-arg default constructor. 

Я понимаю, причина выброса исключения, но я с трудом могу добавить конструктор по умолчанию java.time.LocalDateTime. Это, по-видимому, является недостатком класса/странного дизайнерского решения. Есть ли обходные пути?

ответ

2

Что вы должны работать. Один из следующих может быть неправильно:

  1. Поскольку вы указали @XmlJavaTypeAdapter на уровне пакета, он будет применяться только к свойствам на классы в вашем пакете под названием xml. Есть ли класс в вашей модели из другого пакета, который имеет сопоставленное свойство типа LocalDateTime?
  2. Возможно также, что ваш файл package-info.java не компилируется.
1

Было такое же поведение: IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions.

Мой pbm был: У меня есть несколько пакетов (три), где нужен файл package-info.java, как показано на рисунке following picture.

Я «решил» этот pbm, добавив package-info.java в каждый из трех каталогов. Пример пакета fr.gouv.agriculture.dal.ct.planCharge.metier.dao.charge.xml:

@XmlJavaTypeAdapter(type = LocalDate.class, value = LocalDateXmlAdapter.class) 
package fr.gouv.agriculture.dal.ct.planCharge.metier.dao.charge.xml; 

Если кто-то имеет лучшее представление о том, чем копировать/вставить в несколько package-info.java файлов, заранее спасибо.