[英]CXF client SOAP message formatting
我用来创建CXF客户端的WSDL文件具有以下元素定义:
<xsd:element name="Rate">
<xsd:simpleType>
<xsd:restriction base="xsd:decimal">
<xsd:totalDigits value="18" />
<xsd:fractionDigits value="2" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
但是,当我尝试发送SOAP消息时,小数点后的位数超过最大值。 例如,我得到2.48862,而期望2.48。 为了解决这个问题,我计划实现一个XmlAdapter来编组值,但是我无法将WSDL中的元素映射到客户端,因为XmlAdapter的onyl类作为注释传递给字段decleration。
@XmlJavaTypeAdapter(CustomXmlAdapter.class)
似乎没有办法通知XmlAdapter该字段必须在小数点后有2位数。
小数位数从元素到元素的变化。 我也没有权限来更改WSDL。
有没有办法在观察WSDL中指定的小数点数时格式化这些元素?
我可能会建议在WSDL引用的模式上使用xQuery。 模式的名称和位置是WSDL的一部分,也可以通过XQuery检索。
模式是格式良好的XML,因此您只需要确定正确的XPath选择器来检索所需的值 - 在这种情况下,这将至少是...
//xsd:element[@name == 'Rate']//xsd:fractionDigits/@value
哪个应该产生值2。
请记住,最新的JDK中内置了一个XPath / XQuery解释器。 你只需要在它上面放一些前端,我相信它会很好地处理流。
执行上述操作将允许您在处理给定元素时动态查询架构,例如,允许您在处理速率时获取正确的小数位数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.