Axis客户端,省略(RPC /编码样式)SOAP请求xml

时间:2016-06-07 13:03:33

标签: java xml soap axis soap-rpc-encoded

我们的供应商(我们无法更改)使用“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中?

由于

0 个答案:

没有答案