在我们的Spring Batch应用程序上,我为应用程序要拆封的XML文件的元素之一定义了一个BigDecimal适配器:
public class BigDecimalAdapter extends XmlAdapter<String, BigDecimal> {
@Override
public String marshal(BigDecimal v) throws Exception {
return v != null ? v.toString() : null;
}
@Override
public BigDecimal unmarshal(String v) throws Exception {
if(v == null || "".equals(v.trim())) {
return null;
}
return new BigDecimal(v.trim());
}
}
其架构如下:
<xs:element type="xs:decimal" name="COUPON_RATE" />
但是,即使定义了适配器,
@XmlElement(name = "COUPON_RATE")
@XmlJavaTypeAdapter(BigDecimalAdapter.class)
protected BigDecimal couponRate;
解析仍然失败:
[org.xml.sax.SAXParseException; lineNumber: 3; columnNumber: 620; cvc-datatype-valid.1.2.1: '' is not a valid value for 'decimal'.]]
我已经调试了应用程序,并确认正在调用适配器代码。我检查过的所有资源似乎都表明我的代码是正确的,因此我想知道可能是问题所在还是我只是误解了某些内容。
我也尝试过使用nillable
和required
属性,但是没有运气。
我在这里想念什么?