node-soap:“第一个标记之前的非空格”。

时间:2014-07-03 18:16:46

标签: node.js soap wsdl sax

我的WSDL有效,但此错误(标题中)出现在soap.createClient上。 WSDL托管在服务器上。检查node-soap源后,看起来我是否可以禁用" strict"在WSDL类中标记此错误不会发生,但我似乎无法弄清楚如何禁用它。我尝试将选项传递给createClient方法,如下所示:

soap.createClient(wsdl, { strict: false }, callback);

但这似乎无法解决这个问题。不幸的是,我无法共享WSDL,但您可以确定它通过验证,并且没有"非空白"在开始标记之前。我相当肯定,如果我能以某种方式禁用wsdl类中的严格选项来解决问题。有人曾经发生过这种情况吗?

1 个答案:

答案 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

(请记住,代码还在另一个函数xmlToObjectlink to source)中创建了一个sax解析器,但这里再次硬编码严格模式)