Я новичок, когда дело доходит до JAXB и маршаллинга / демаршаллинга, и я изо всех сил пытался, чтобы все заработало.
Пока что я написал свои XSD и сгенерировал свои POJO.используя xjc.Все это прекрасно работает.Кроме того, когда мне нужно удалить данные, поступающие в виде данных String или документа w3c, я использую JAXBContext.generateSchema () , чтобы создать схему сопоставления, относящуюся к ожидаемому классу, который я получаю.Все это прекрасно работает.
Моя проблема возникает, когда я анализирую схему, которую генерирует generateSchema ().Согласно JAXB документам , BigDecimal генерируется как десятичный тип xsd.
Мой ввод иногда содержит научную запись (например, 1.12E12).Когда я пытаюсь разобрать это с помощью схемы, сгенерированной JAXB, я получаю исключение javax.xml.bind.UnmarshalException:
[org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: '1.32400146520976E-4' is not a valid value for 'decimal'.]
Есть ли какой-то способ правильно проанализировать научную нотацию при использовании типа «десятичный»или это должно быть "double"?
Первоначально я думал, что мог бы использовать двойное представление, поскольку double может анализировать научную нотацию, однако я имею дело с финансовыми значениями (это для банковских расчетов) и, следовательно, японял, что использование двойного представления приведет к ошибкам округления из-за присущих ему ограничений.
Итак, я думаю, что возникает вопрос, как создать пользовательские привязки, которые позволили бы мне анализировать научные записи и сохранять данные в BigDecimal?Я посмотрел на XMLAdpater
, но я не понимаю, как использовать его для рассматриваемого случая.Если кто-то может предоставить понимание или пример (кроме вездесущего примера Карты, который я постоянно нахожу в Интернете), я был бы очень признателен.
Спасибо!
Эрик