我们的供应商(我们无法更改)使用“RPC /编码”样式的SOAP Web服务。我们使用Apache Axis(1.4版)来生成和使用客户端。
其中一个方法的请求中有一个元素,如下所示:
<element maxOccurs="1" minOccurs="0" name="CRD_EXPIRY" nillable="false" type="xsd:dateTime" />
所以它是“omittable”,但不是“nillable”。因此,当我将此参数留空时(当我们根本不调用setCRD_EXPIRY
时),我希望请求XML中根本没有CRD_EXPIRY
标记。
但Axis引擎仍将此标记放在请求中,并带有nil="true"
属性:
<CRD_EXPIRY xsi:nil="true" xsi:type="xsd:dateTime"/>
此外,我已经挖掘了资源,并在org.apache.axis.encoding.ser.BeanSerializer
类中找到了这些行,这似乎可以解决问题:
// . . .
if (propValue == null) {
// . . .
// if meta data says minOccurs=0, then we can skip
// it if its value is null and we aren't doing SOAP
// encoding.
if (isOmittable && !isEncoded) {
continue;
}
}
context.serialize(qname,
null,
propValue,
xmlType, javaType);
// . . .
对于“编码”样式的Web服务,空参数始终存在于具有nil
值的请求XML中。即使他们不是“无法支付”。
我是真的吗?如果是的话,为什么会这样(看起来不像是一个bug)?
主要是,如何实现那些空的参数不出现在请求XML中?
由于