Pio*_*ski 6 java xsd soap web-services
我的网络服务有一个奇怪的问题.我有对象OrderPosition有一个价格(xsd:decimal,fractionDigits = 9).Apache CXF为我生成代理类,这个字段是BigDecimal.当我想发送大于10000000.00000的值时,soap消息中的这个字段有科学记数法(例如1.1423E + 7).
如何强制该值未以科学记数法发送.
这是实现此目的的一种方法。
BigDecimal有一个构造函数,它将输入数字作为字符串。.toString()使用此方法时,会在调用其方法时保留输入格式。例如
Run Code Online (Sandbox Code Playgroud)BigDecimal bd = new BigDecimal("10000000.00000"); System.out.println(bd);
将打印10000000.00000.
这可以在Jaxb XmlAdapters. Jaxb XmlAdapters 提供了一种控制/自定义编组/解编过程的便捷方法。典型的适配器BigDecimmal如下所示。
public class BigDecimalXmlAdapter extends XmlAdapter{
@Override
public String marshal(BigDecimal bigDecimal) throws Exception {
if (bigDecimal != null){
return bigDecimal.toString();
}
else {
return null;
}
}
@Override
public BigDecimal unmarshal(String s) throws Exception {
try {
return new BigDecimal(s);
} catch (NumberFormatException e) {
return null;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这需要在 Jaxb 上下文中注册。这是带有完整示例的链接。