Nodejs 调用webservice

Nodejs 调用webservice

我使用var soap = require(‘soap’) 来调用java的webservice接口,代码如下: var url = ‘http://xx.x.xx.xx:xxxx/IAMService/webservice/service?wsdl’; var args = new Array(‘test’,‘test’,‘xxx’, ‘’, ‘xml’, ‘’); soap.createClient(url, function(err, client) { client.IfService(args, function(err, result) { console.log("err: "+err); console.log("result: "+result); }); }); 调用出现错误: err: Error: Invalid response: 500 Body: <soap:Envelope xmlns:soap=“http://schemas.xmlsoap.org/soap/envelope/” xmln s:xsd=“http://www.w3.org/2001/XMLSchema” xmlns:xsi=“http://www.w3.org/2001/XMLSc hema-instance”>soap:Bodysoap:Fault<faultcode>soap:Client</faultcode><faultst ring>Not enough message parts were received for the operation.</faultstring></so ap:Fault></soap:Body></soap:Envelope> 哪位大牛指导下,看看是怎么回事。


2 回复

在 Node.js 中调用 Web Service 是一个常见的需求。根据你提供的错误信息,我们可以通过分析 WSDL 文件和请求参数来找出问题所在。

错误分析

从错误信息来看,500 Internal Server Error 表示服务器端发生了内部错误。而 Not enough message parts were received for the operation 则表明客户端发送的数据格式或数量不符合服务端的要求。

示例代码及解释

让我们通过一个简单的例子来说明如何正确地调用 Web Service,并确保传递正确的参数。

安装依赖包

首先需要安装 soap 包,可以使用以下命令进行安装:

npm install soap

示例代码

const soap = require('soap');

// Web Service 的 URL
const wsdlUrl = 'http://xx.x.xx.xx:xxxx/IAMService/webservice/service?wsdl';

// 准备请求参数
const args = {
    param1: 'test',
    param2: 'test',
    param3: 'xxx',
    param4: '',
    param5: 'xml',
    param6: ''
};

// 创建客户端
soap.createClient(wsdlUrl, (err, client) => {
    if (err) {
        console.error('Error creating SOAP client:', err);
        return;
    }

    // 调用 Web Service 方法
    client.IfService(args, (err, result) => {
        if (err) {
            console.error('Error calling IfService:', err);
        } else {
            console.log('Result:', result);
        }
    });
});

注意事项

  1. 参数格式:确保传递给 Web Service 的参数格式与 WSDL 文件中定义的一致。WSDL 文件描述了 Web Service 可以接受哪些操作以及这些操作所需的参数。

  2. 参数名称:注意参数名称必须与 WSDL 文件中的参数名称完全匹配。如果参数名称不一致,服务端将无法识别这些参数,从而导致错误。

  3. 错误处理:在实际应用中,应添加更详细的错误处理逻辑,以便更好地调试和定位问题。

总结

通过上述示例代码,你可以看到如何正确地创建 SOAP 客户端并调用 Web Service 方法。关键是确保传递的参数格式和名称符合服务端的要求。希望这能帮助你解决问题!


根据你提供的错误信息,Not enough message parts were received for the operation. 表明服务端期望接收到更多的参数或者参数格式不正确。这通常与 WSDL 定义的服务操作参数定义有关。

你可以通过检查 WSDL 文件来确定具体需要哪些参数以及它们的数据类型。以下是一些解决方法和建议:

  1. 检查 WSDL 文件:查看 WSDL 文件中的 <operation> 元素下的 <input> 部分,确保传入的参数数量、顺序和数据类型正确。

  2. 确保参数正确传递:如果 WSDL 定义的参数是 xs:string 类型,确保你传递的参数也是字符串类型。

  3. 处理错误:增加错误处理逻辑,以更好地理解问题所在。

示例代码调整:

const soap = require('soap');
const url = 'http://xx.x.xx.xx:xxxx/IAMService/webservice/service?wsdl';
const args = {
    param1: 'test',
    param2: 'test',
    param3: 'xxx',
    param4: '',
    param5: 'xml',
    param6: ''
};

soap.createClient(url, (err, client) => {
    if (err) {
        console.error('Error creating client:', err);
        return;
    }

    client.IfService(args, (err, result) => {
        if (err) {
            console.error('Error calling service:', err);
        } else {
            console.log('Result:', result);
        }
    });
});

在这个示例中,将参数改为对象形式,这有助于更清晰地看到每个参数。同时,增加了错误处理的逻辑,以便更好地调试。

确保你提供的参数和 WSDL 文件中定义的参数完全一致。如果还有问题,请提供 WSDL 文件的具体内容,以便进一步分析。

回到顶部