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

我的WSDL是有效的,但是这个错误(在title中)发生在soap.createClient 。 WSDL托pipe在服务器上。 在检查node-soap源码之后,看起来好像我是否可以禁用WSDL类中的“strict”标志,这个错误不会发生,但是我似乎无法弄清楚如何禁用它。 我尝试将选项传递给createClient方法,如下所示:

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

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

简短的答案是否定的,目前的代码库似乎是不可能的。 我会build议打开拉请求来添加你需要的function。

soap.createClient的代码soap.createClient最终使用了wsdl.js文件,当它parsingwsdl时,它将以_parse函数_parse 。 这个函数创buildsaxparsing器,但是严格模式( 代码链接 )的硬编码传递为true

 p = sax.parser(true), 

soap模块依赖于sax模块,它接受一个布尔值来确定是否应该启用严格模式( 链接到代码 ):

 sax.parser = function (strict, opt) { return new SAXParser(strict, opt) } 

因此,传递给createClient的选项不会用于创buildsaxparsing器,而是将其设置为严格模式。 然而,正如我上面所说的,一个拉请求可以解决这个问题,因为它看起来像选项一直传递到创buildWSDL对象,所以这只是一个创buildsaxparsing器的问题,通过该选项,而不是true

(请记住,代码另外在另一个函数xmlToObject ( 链接到源代码 )内创build一个saxparsing器,但是在这里再次硬编码严格模式)