4

我们有一个来自供应商的 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 中不出现空参数?

谢谢

4

0 回答 0