Как передать параметр конструктора адаптеру JAXB?

Я использую Spring 3 IOC и JAXB/JAX -WS в WebService, который я написал. У меня сейчас небольшая проблема с данными, которые должны быть округлены перед возвратом потребителю, поскольку они не способны обрабатывать значения с полной точностью.

Чтобы свести к минимуму влияние на дизайн и расчеты WS, я решил использовать Jaxb XmlAdapter для округления значений при упорядочивании моего ответа. Все работает нормально.

Моя проблема сейчас в том, что я хотел бы сделать его гибким. Т.е. :в некоторых случаях мне нужно округлить до 2 знаков после запятой, в некоторых до 4 и т. д. Прямо сейчас я должен создать TwoDecimalAdapter и FourDecimalAdapter и использовать соответствующий, где это необходимо, в моих определениях модели. Это означает дублирование кода.

Есть ли способ создать универсальный адаптер округления и передать ему параметр? Например, вместо:

@javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter(value=FourDecimalRoundingAdapter.class,type=java.math.BigDecimal.class)

Я хотел бы иметь возможность сделать что-то вроде:

@javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter(value=new RoundingAdapter(4),type=java.math.BigDecimal.class)

Очевидно, что это не работает, поскольку JAXB создает экземпляр самого адаптера, но есть ли какой-либо метод, который я могу использовать для передачи параметров адаптеру? Я хотел бы иметь возможность объявить адаптер округления в Spring и использовать его таким образом, но опять же, я не могу разработать решение для повторного использования.

Спасибо,

Эрик

10
задан Eric B. 12 July 2012 в 14:58
поделиться