如何从soap参数中省略/设置xmlns:xsd属性?

时间:2017-06-27 14:16:36

标签: node.js soap

我正在使用 strong-soap 模块与 Node.js ,我正在尝试将请求RPC发送到Web服务。

我创建了一个带有选项的客户端:

var wsdlOptions = {
    attributesKey: '$attributes',
    valueKey: '$value'
};

我将参数设置如下:

var args = {
        'para': {
            $attributes: {
                $xsiType: "xsd:string"
            },
            $value: 'a'
        },
        'parb': {
            $attributes: {
                $xsiType: "xsd:string"
            },
            $value: 'b'
        },
        'parc': {
            $attributes: {
                $xsiType: "xsd:string"
            },
            $value: 'c'
        }
    };

然而,当我调用该方法时,它会生成xml(信封):

    <ns1:query xmlns:ns1="http://<host>">
      <para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="" xsi:type="xsd:string">a</para>
      <parb xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="" xsi:type="xsd:string">b</parb>
      <parc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="" xsi:type="xsd:string">c</parc>
    </ns1:query>

我收到一条错误消息:

属性“prefix =”xmlns“,localpart =”xsd“,rawname =”xmlns:xsd“”的值无效。带前缀的命名空间绑定可能不为空。

我没有看到任何方法从方法调用中设置或删除此参数。 当我在参数中设置$ xsiType时,lib会自动设置一个空的xmlns:xsd。

我正在与之交互的Web服务有一个旧的soap实现,我认为这可能是问题所在。有什么建议?

1 个答案:

答案 0 :(得分:0)

指定$xsiType的值时,请尝试使用以下格式:

"{namespace uri}namespace:type"

例如,对于xsd命名空间,您可以指定以下内容:

$xsiType: "{http://www.w3.org/2001/XMLSchema}xsd:string"

以上内容应该产生以下内容:

<para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:type="xsd:string">a</para>