@ Сантош Спасибо! XMLAdapter был тем, что мне нужно. Кроме того, как я сказал в своем вопросе, я генерирую клиентские классы с Apache CXF. В этой проблеме мне пришлось добавить следующий код в bindings.xjb (файл привязки, который используется для cxf-codegen-plugin в maven).
<jaxb:javaType name="java.math.BigDecimal" xmlType="xs:decimal"
parseMethod="sample.BigDecimalFormater.parseBigDecimal"
printMethod="sample.BigDecimalFormater.printBigDecimal" />
Это мой форматировщик код:
public class BigDecimalFormater {
public static String printBigDecimal(BigDecimal value) {
value.setScale(5);
return value.toPlainString();
}
public static BigDecimal parseBigDecimal(String value) {
return new BigDecimal(value);
}
}
Затем этот плагин генерирует адаптер для меня
public class Adapter1 extends XmlAdapter<String, BigDecimal> {
public BigDecimal unmarshal(String value) {
return (sample.BigDecimalFormater.parseBigDecimal(value));
}
public String marshal(BigDecimal value) {
return (sample.BigDecimalFormater.printBigDecimal(value));
}
}
В созданном классе BigDecimal поле имеет аннотацию @XmlJavaTypeAdapter (Adapter1 .class), и это разрешило проблему.
Какая привязка (например, jaxb и т. Д.) Вы используете? – Santosh
Я использую jaxb для привязки xml. И это поле имеет аннотацию: @XmlElement (name = "NetPrice", required = true) protected BigDecimal netPrice; –