我的WSDL有效,但此错误(标题中)出现在soap.createClient
上。 WSDL托管在服务器上。检查node-soap源后,看起来我是否可以禁用" strict"在WSDL类中标记此错误不会发生,但我似乎无法弄清楚如何禁用它。我尝试将选项传递给createClient方法,如下所示:
soap.createClient(wsdl, { strict: false }, callback);
但这似乎无法解决这个问题。不幸的是,我无法共享WSDL,但您可以确定它通过验证,并且没有"非空白"在开始标记之前。我相当肯定,如果我能以某种方式禁用wsdl类中的严格选项来解决问题。有人曾经发生过这种情况吗?
答案 0 :(得分:1)
简短的回答是否定的,在目前的代码库中似乎不可能。我建议打开pull request以添加您需要的功能。
您在上面引用的代码soap.createClient
最终使用wsdl.js
文件,当它解析wsdl时,最终会出现在函数_parse
中。此函数创建sax解析器,但硬件代码在true
传递严格模式(link to code):
p = sax.parser(true),
soap模块依赖于sax模块,它接受一个布尔值来确定是否应该启用严格模式(link to code):
sax.parser = function (strict, opt) { return new SAXParser(strict, opt) }
因此,传递给createClient
的选项不会用于创建sax解析器,而是设置为严格模式。但是,就像我上面所说的那样,pull请求可以解决这个问题,因为它看起来像是一直传递给WSDL对象的创建,所以它只是创建了传递了该选项的sax解析器,而不是true
。
(请记住,代码还在另一个函数xmlToObject
(link to source)中创建了一个sax解析器,但这里再次硬编码严格模式)