После поиска по всей документации jaxb и по многим учебным пособиям, я не нашел ответа, который мог бы настраивать даты помимо того, что мы жестко программируем в XMLAdapter.
Я поместил файл свойств в classpath с форматами даты, например:
DateFormat = мм-дд-гггг * * 1 001
Теперь ваша реализация XMLAdapter выглядит следующим образом:
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class ConfigurableAdapterForDate extends XmlAdapter<String, Date>{
private static final String FORMAT = "yyyy-mm-dd";
private String formatFromFile = null;
private SimpleDateFormat format = new SimpleDateFormat();
private void setFormatFromFile() throws IOException {
//load property file
Properties prop = new Properties();
InputStream is = this.getClass().getResourceAsStream("<path to your property file>");
prop.load(is);
//get the format from loaded property file
formatFromFile = prop.getPropertyValue("dateFormat");
if(formatFromFile != null) {
format.applyPattern(formatFromFile);
}
else {
format.applyPattern(FORMAT );
}
}
@Override
public Date unmarshal(String v) throws Exception {
this.setFormatFromFile();
return format.parse(v);
}
@Override
public String marshal(Date v) throws Exception {
this.setFormatFromFile();
return format.format(v);
}
}
Теперь вы можете использовать @XmlJavaTypeAdapter (ConfigurableAdapterForDate.class) для объектов даты, которые вы хотите сериализовать / десериализовать.
Можно использовать Spring также для загрузки файла свойств. Выше код настроит вашу дату соответственно.