XMLAdapter: настраиваемый формат даты
Я демарширую данные XML, используя JAXB (и немного Saxon для XSLT). В моем XML-документе у меня есть значение строки даты.
Я провел некоторые исследования и экспериментировал с XMLAdapter и @XMLJavaTypeAdapter. Я нашел полезные вопросы и ответы по Stackru здесь: jaxb unmarshal timestamp. Представленное здесь решение с использованием SimpleDateFormat, похоже, работает хорошо.
Вот моя проблема: формат строки даты в XML варьируется от документа к документу. Это может быть каждый раз в другом формате даты. В текущей системе (которую я заменяю всеми этими манипуляциями с XML) в таблицах базы данных есть форматы даты, которые извлекаются и применяются при разборе документа XML. Вручную. Построчно. (Теперь вы понимаете, почему я заменяю его на JAXB, да!)
Таким образом, вопрос будет следующим: как бы я изменил строку формата даты, которая подается в SimpleDateFormat в XMLAdapter для разных документов? Это вообще возможно? Обречен ли я считать строку даты как строку и затем преобразовать ее в дату где-нибудь еще позже?
Редактировать: я только собирался удалить этот вопрос, но за него проголосовали, так что я думаю, я напишу правильный ответ на него, что я в итоге сделал. Я задержусь на некоторое время, чтобы принять свой собственный ответ, на случай, если у кого-то есть понимание, которое приведет к еще лучшему ответу.
2 ответа
Вот что я закончил: я применил точное решение, найденное в вопросах и ответах, с которыми я столкнулся в своем вопросе, найденном здесь: jaxb unmarshal timestamp.
Вы можете подумать: "Кажется, у этого парня осталась та же проблема, что и у него изначально. У него все еще есть строка формата статической даты в его SimpleDateFormat
объект, но его строки даты все еще имеют переменный формат! Он ничего не решил! Какой идиот!"
Вот мое решение: я уже применяю XSLT к своему XML-документу; У меня есть разные XSLT для каждого типа документа XML. Поэтому я собираюсь взять XSLT, который у меня уже есть (и должен), и добавить в него функциональность, чтобы преобразовать строку даты в тот же формат даты, который указан в моем SimpleDateFormat
объект в моем XMLAdapter
,
Та да! Мне не нужно настраивать разъем сейчас. Моя конфигурация присуща XSLT, которую я уже (и всегда) применяю, прежде чем попытаться разархивировать.
Вы можете использовать XmlAdapter
обрабатывать формат даты. Поскольку форматы даты отличаются от документа к документу, вы можете воспользоваться указанием инициализированного экземпляра адаптера в Unmarshaller. Таким образом, вы можете установить формат даты, соответствующий документу, который вы хотите удалить.
пример