Я генерирую XML, используя jaxbMarshaller для стороннего библиотечного класса. Поскольку библиотека XmlAdapter, которая преобразует объект Calendar в строку, не использует поле TimeZone, маршаллер генерирует неправильный xml для каждого поля Calendar класса pojo.
Сторонняя библиотека XmlAdapter использует приведенный ниже класс для преобразования календаря в строку:
public class DateConversion {
public static String printDate(Calendar value) {
if(value != null) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
return format.format(value.getTime());
}
return null;
}
}
Итак, я хочу переопределить поведение поля XmlAdapter for Calendar и попробовал приведенный ниже пример, но, похоже, он не работает:
мой пользовательский XmlAdapter использует приведенный ниже класс для конвертации:
public class DateConversion {
public static String printDate(Calendar value, TimeZone timeZone) {
if(value != null) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
format.setTimeZone(timeZone);
return format.format(value.getTime());
}
return null;
}
}
и тогда я сделал реестр как:
public @Nullable
String toPdxmlString(final @NotNull Deals input) {
try {
final Marshaller marshaller = jaxbContext.createMarshaller();
final DateFormatterAdapter dateFormatterAdapter = new DateFormatterAdapter(PdxmlDateTimeUtil.FXONLINE_DEFAULT_DEAL_TIMEZONE);
marshaller.setAdapter(dateFormatterAdapter);
StringWriter writer = new StringWriter();
marshaller.marshal(input, writer);
return writer.toString();
} catch (JAXBException exception) {
LOGGER.error("Unable to marshall the given input Deals: {}, into String using JAXB Context: {}, ... ", input, jaxbContext, exception);
}
return null;
}
Может ли кто-нибудь помочь мне узнать, выполнимо ли это или нет, если да, то где я иду не так?