我们从客户处获得WSDL。 (即,我们无法改变它们。)
其中一种类型的定义如下所示:
public void setBigdecimal(Double value) {
this.bigdecimal = value;
}
导致像
这样的事情<rpcOp:value>
<rpcOp:bigdecimal>10.0</rpcOp:bigdecimal> <!-- IN SPITE OF THE NAME, THIS IS A DOUBLE VALUE! -->
<rpcOp:string>N</rpcOp:string>
</rpcOp:value>
现在,当我们在其中发送具有此类型的请求时,它将生成如下内容:
{{1}}
客户希望显示的内容没有十进制数字,即10等。
我怀疑当从Java对象生成请求xml时,JAX-WS框架只调用Double.toString(),这将不可避免地添加小数点和十进制数字。
有没有办法在不修改WSDL的情况下改变它?为这种类型或类似的东西注册一些自定义数字格式化程序?
谢谢!
答案 0 :(得分:0)
与此同时,我找到了解决方案。它看起来像这样:(使用JAXB)
xjc-serializable.xml:
...
<jaxb:globalBindings>
<xjc:serializable />
<!-- ADDED THIS: -->
<xjc:javaType name="java.lang.Double" xmlType="xs:double"
adapter="util.MyDoubleAdapter" />
</jaxb:globalBindings>
...
然后是java类:
public class MyDoubleAdapter extends XmlAdapter<String, Double> {
@Override
public String marshal(Double doubleValue) throws Exception {
if (doubleValue == null) {
return null;
}
String string = doubleValue.toString();
if (string.endsWith(".0")) {
string = string.replaceAll("\\.0", "");
}
return string;
}
public Double unmarshal(String stringValue) throws Exception {
if (stringValue == null) {
return null;
}
return Double.valueOf(stringValue);
}
}
然后你去。