我们有一个来自供应商的 SOAP Web 服务(我们无法更改),它使用“RPC/编码”样式。我们使用 Apache Axis(1.4 版)来生成和使用客户端。
其中一个方法的请求中有一个元素,如下所示:
<element maxOccurs="1" minOccurs="0" name="CRD_EXPIRY" nillable="false" type="xsd:dateTime" />
所以它是“可省略的”,但不是“可空的”。因此,当我将此参数留空时(当我们根本不调用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 中。即使它们不是“可空的”。
我是真的吗?如果是,为什么会这样(看起来不像是错误)?
主要是,我怎样才能实现请求 XML 中不出现空参数?
谢谢