Where communities thrive

  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
Repo info
    I've had success doing this in C#, but Visual Studio created proxy objects automatically when I imported the WSDL file. Do I need to do that in Node.js too somehow?
    Jiří Pešík

    Hello, I have a .NET application with a SOAP client with the following custom binding. Is it possible to rewrite this custom binding using node-soap? I have tried Python libraries zeep and suds and it did not work, probably because it does not fully support the specified settings. Is it possible to configure the node-soap to be compliant with the following settings? I am especially concerned by the MutualCertificate mode. Thank you.

    <binding name="X">
    <security defaultAlgorithmSuite="Basic128" authenticationMode="MutualCertificate" enableUnsecuredResponse="true" requireDerivedKeys="false" includeTimestamp="true" messageProtectionOrder="EncryptBeforeSign" messageSecurityVersion="WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10" requireSignatureConfirmation="false">
    <localClientSettings detectReplays="false" />
    <localServiceSettings detectReplays="false" />
    <textMessageEncoding messageVersion="Soap11" />
    <httpsTransport authenticationScheme="Basic" />

    Hi can this module be used in react-native project?
    Matt St Jean
    Is it possible to use a string for port name with the client? The port for the service I am consuming is named "MyPort.1" but I keep getting errors when I try to call: client.MyService.MyPort.1.MyFunction(...). I've tried client.MyService.'MyPort.1'.MyFunction(...), and things like underscores etc. When I use client.describe() I get:
    { MyService: {
    MyPort: { MyFunction: [Object] },
    'MyPort.1': { MyFunction: [Object]},
    Matt St Jean
    Oh I missed the little bit about bracket notation, woops
    Hey. I'm attempting to develop something with node-soap and I'm having a weird issue
    When I call a method (no matter with methodAsync or method, or even with MyService.MyPort.method), I receive an empty response.
    The weird part is that if I use soapui and copy-and-paste the result from client.lastRequest, it works perfectly fine. node-soap just returns an empty response
    Any ideas?
    I'm using the soap module, how can I get the raw xml request in my service, not in the client , but in the soap server?
    mads | she/her
    how can we have multiple elements with the same name get returned?
    return { getMetadataResult: { index: 0, count: 1, total: 1, mediaCollection: { id: "trending", itemType: "container", title: "Trending", }, mediaCollection: { id: "new", itemType: "container", title: "New", }, }, };
    the last one just gets overtaken, but i need to have two or xml elements returned
    Is it possible to have a node-soap's wsdl server act as "middleware", rather than as listener to a different port?
    Maty Ramirez
    Hi people! I'm having a problem with the module
    I've fought a lot trying to mount the request correctly but when y finally did it, the services continues returning error 400
    that's my code:
    let client = await soap.createClientAsync(this.environmentUrl, {
                    ignoreBaseNameSpaces: true,
                    overrideRootElement: {
                        namespace: 'fac:',
                        xmlnsAttributes: [{
                            name: 'xmlns:fac',
                            value: "http://www.facturante.com.API"
                            name: 'xmlns:fac1',
                            value: "http://schemas.datacontract.org/2004/07/FacturanteMVC.API"
                        }, {
                            name: 'xmlns:fac2',
                            value: "http://schemas.datacontract.org/2004/07/FacturanteMVC.API.DTOs"
                    /*ignoredNamespaces: {
                        namespaces: ['targetNamespace', 'typedNamespace', 'tns', 'wsu', 'msc', 'i0'],
                        override: true
                client.addHttpHeader('Content-Type', 'application/soap+xml; charset=utf-8');
                client.addHttpHeader('Connection', 'Keep-Alive');
                let resp = await client.CrearComprobanteAsync({
                    //'fac:CrearComprobante': {
                        'fac:request': {
                            'fac1:Autenticacion': this.parseSecondLevelObj(data.Autenticacion),
                            'fac1:Cliente': this.parseSecondLevelObj(data.Cliente),
                            'fac1:Encabezado': this.parseSecondLevelObj(data.Encabezado),
                            'fac1:Items': [ ...data.Items.map((item, i) => { 
                                return { 'fac2:ComprobanteItem': this.parseSecondLevelObj(item) }
                            }) ]
                    Items: data.Items.map((item, i) => { 
                        return { ComprobanteItem: {...item} }
    If I copy the generated XML and put it into soap UI, it works well

    I tried to delete the next line too:

    client.addHttpHeader('Content-Type', 'application/soap+xml; charset=utf-8');

    But the service returns error 415

    Alexandre Tiertant
    hi ! i just install with 'npm install soap' and just execute 'var soap = require('soap');' throw an error: TypeError [ERR_INVALID_ARG_TYPE]: The "original" argument must be of type function
    is the last version of npm buggy ?
    How can i feed an wsdl string to soap client without saving it on filesystem?
    Luis Morales
    Hi people, nice to meet you
    I have a simple question, ¿How can we change default verb used by the request?
    My request is using POST, but i need yo use PUT
    Anyone using the latest npm soap lib run into issues with tons of extra xmlns being generated and used in the document?
    This message was deleted
    Lea Reimann
    Hello everyone, is possible to remove or exchange the package httpntlm from the dependencies? We're getting security warnings bc of httpntlms dependency underscore and unfortunately httpntlm wasn't updated the last 3 years so I don't think they're going to update their package any time soon. Any thoughts on this? Sorry if this has been posted already!
    Kelly Hilliard
    Just wanted to add my request along with @lkreimann . Updating/replacing the httpntlm dependency would be greatly appreciated to get rid of this vulnerability that was just reported for underscore (https://npmjs.com/advisories/1674)

    Hi Vinay,
    First, thank you for the great job you did with this library. I forked your code to add a test involving a very complex WSDL (WSDLs import, XSD with different namespace, complex types inheritence, etc.) :

    I'm not a JavaScript developer so it's hard to figure out the issue but the request seems not to be generated with the correct namespaces.
    The request XML is not generated as expect.
    Did you already face this kind of issue ?

    8 replies
    Jacob Page
    I believe that the version bump for the httpntlm package was recently merged: SamDecrock/node-http-ntlm#93
    1 reply
    Cliff Mayson

    Hi Guys, can't seem to get the unit tests running on the project on master with no changes, eg after npm i, then npm run test I get the folllow error:

    should allow customization of httpClient and the wsdl file download should pass through it: Uncaught AssertionError [ERR_ASSERTION]: The expression evaluated to a falsy value: ,

    currently running node 16.1.0

    1 reply
    Jan Kowalski
    hello, fellow, first of all I love node-soap! Amazing lib, helps a lot. But I still don't know and can't find an example of how to consume response with attachment that is of content-type type="application/xop+xml"
    and ideas?
    Jan Kowalski
    ok I see one proposition of solution in PR
    Mukhammad Pardaboev

    Hi James, @allout58 did you solved this issue? cause I am facing the same problem right now. Any one can help please!

    Hi, I've got a problem creating the client. I've been able to get it working with another WSDL, but on pointing it to the new WSDL, it crashes with the following stacktrace

    TypeError: Cannot read property 'postProcess' of undefined
    at subElement.OperationElement.postProcess (C:\Users\jhollowell\WebProjects\swampticket2-backend\node_modules\soap\lib\wsdl.js:651:12)
    at subElement.PortTypeElement.postProcess (C:\Users\jhollowell\WebProjects\swampticket2-backend\node_modules\soap\lib\wsdl.js:671:11)
    at subElement.BindingElement.postProcess (C:\Users\jhollowell\WebProjects\swampticket2-backend\node_modules\soap\lib\wsdl.js:685:14)
    at subElement.ServiceElement.postProcess (C:\Users\jhollowell\WebProjects\swampticket2-backend\node_modules\soap\lib\wsdl.js:721:17)
    at C:\Users\jhollowell\WebProjects\swampticket2-backend\node_modules\soap\lib\wsdl.js:1038:26
    at WSDL._processNextInclude (C:\Users\jhollowell\WebProjects\swampticket2-backend\node_modules\soap\lib\wsdl.js:1158:12)
    at WSDL.processIncludes (C:\Users\jhollowell\WebProjects\swampticket2-backend\node_modules\soap\lib\wsdl.js:1201:8)
    at C:\Users\jhollowell\WebProjects\swampticket2-backend\node_modules\soap\lib\wsdl.js:1028:10
    at _combinedTickCallback (internal/process/next_tick.js:73:7)
    at process._tickCallback (internal/process/next_tick.js:104:9)
    at new WSDL (C:\Users\jhollowell\WebProjects\swampticket2-backend\node_modules\soap\lib\wsdl.js:1021:11)
    at C:\Users\jhollowell\WebProjects\swampticket2-backend\node_modules\soap\lib\wsdl.js:2246:16
    at Request._callback (C:\Users\jhollowell\WebProjects\swampticket2-backend\node_modules\soap\lib\http.js:117:5)
    at Request.self.callback (C:\Users\jhollowell\WebProjects\swampticket2-backend\node_modules\request\request.js:188:22)
    at emitTwo (events.js:106:13)
    at Request.emit (events.js:191:7)
    at Request.<anonymous> (C:\Users\jhollowell\WebProjects\swampticket2-backend\node_modules\request\request.js:1171:10)
    at emitOne (events.js:96:13)
    at Request.emit (events.js:188:7)
    at IncomingMessage.<anonymous> (C:\Users\jhollowell\WebProjects\swampticket2-backend\node_modules\request\request.js:1091:12)
    at emitNone (events.js:91:20)
    at Request.init (C:\Users\jhollowell\WebProjects\swampticket2-backend\node_modules\request\request.js:191:10)
    at new Request (C:\Users\jhollowell\WebProjects\swampticket2-backend\node_modules\request\request.js:130:8)
    at HttpClient.request [as _request] (C:\Users\jhollowell\WebProjects\swampticket2-backend\node_modules\request\index.js:54:10)
    at HttpClient.request (C:\Users\jhollowell\WebProjects\swampticket2-backend\node_modules\soap\lib\http.js:112:18)
    at open_wsdl (C:\Users\jhollowell\WebProjects\swampticket2-backend\node_modules\soap\lib\wsdl.js:2242:16)
    at C:\Users\jhollowell\WebProjects\swampticket2-backend\node_modules\soap\lib\soap.js:21:7
    at _requestWSDL (C:\Users\jhollowell\WebProjects\swampticket2-backend\node_modules\soap\lib\soap.js:47:5)
    at createClient (C:\Users\jhollowell\WebProjects\swampticket2-backend\node_modules\soap\lib\soap.js:58:3)
    at C:\Users\jhollowell\WebProjects\swampticket2-backend\node_modules\soap\lib\soap.js:68:5
    at Promise._execute (C:\Users\jhollowell\WebProjects\swampticket2-backend\node_modules\bluebird\js\release\debuggability.js:303:9)
    at Promise._resolveFromExecutor (C:\Users\jhollowell\WebProjects\swampticket2-backend\node_modules\bluebird\js\release\promise.js:483:18)
    at new Promise (C:\Users\jhollowell\WebProjects\swampticket2-backend\node_modules\bluebird\js\release\promise.js:79:10)`

    Here is my error stack trace TypeError: Cannot read property 'postProcess' of undefined
    at OperationElement.postProcess (D:\MY_PROJECTS\NODE-SOAP\node-soap-ts\node_modules\soap\src\wsdl\elements.ts:874:15)
    at PortTypeElement.postProcess (D:\MY_PROJECTS\NODE-SOAP\node-soap-ts\node_modules\soap\src\wsdl\elements.ts:914:13)
    at BindingElement.postProcess (D:\MY_PROJECTS\NODE-SOAP\node-soap-ts\node_modules\soap\src\wsdl\elements.ts:968:16)
    at ServiceElement.postProcess (D:\MY_PROJECTS\NODE-SOAP\node-soap-ts\node_modules\soap\src\wsdl\elements.ts:1042:19)
    at D:\MY_PROJECTS\NODE-SOAP\node-soap-ts\node_modules\soap\src\wsdl\index.ts:112:30
    at WSDL._processNextInclude (D:\MY_PROJECTS\NODE-SOAP\node-soap-ts\node_modules\soap\src\wsdl\index.ts:1186:14)
    at WSDL.processIncludes (D:\MY_PROJECTS\NODE-SOAP\node-soap-ts\node_modules\soap\src\wsdl\index.ts:173:10)
    at D:\MY_PROJECTS\NODE-SOAP\node-soap-ts\node_modules\soap\src\wsdl\index.ts:101:12
    at processTicksAndRejections (internal/process/task_queues.js:75:11)
    1 reply
    Hello, maybe someone could assist me with the XML generation? I am trying to call the soap service and my root XML element inside the envelope body has the attribute "version" and two complex types "header" and "body". If I am adding the data using const message = { Header: { ... }, Details: { .... }, attributes: { version: 3.1 }, } my version attribute is added to the XML without the namespace. What am I doing wrong?
    4 replies

    Hi all - noob question here... trying to access a public url ('http://dataaccess.com/webservicesserver/NumberConversion.wso') and I've got the following code:

    const options = {
          wsdl_options: {
            forever: true,
            rejectUnauthorized: false,
            strictSSL: false,
          wsdl_headers: {
            'Content-Type': 'application/json; charset=utf-8',
            'Content-Length': 'length'
      let argument = {'ubiNum': '20'}
        soap.createClientAsync(url, options)
        .then((client) => {
          return client.NumberToWords(argument)
        .then((resp) => {
          console.log('hello again', resp)
        .catch((err) => {
          console.log('message', err.message)
          return err

    But I'm getting a 400 error stating Invalid WSDL URL: http://dataaccess.com/webservicesserver/NumberConversion.wso
    I was previously getting a 401 error with the same message until I added the quotes to the argument object.

    Any advice would be greatly appreciated, I'm pretty stuck :(

    8 replies
    Hi there!
    Is it possible to read response attachment (MTOM and/or SWA) with this lib?
    If not are there any workaround to solve this?
    Sean Winner

    Hello all. Brand new to SOAP and a little confused. I'm calling this function on my soap client CreateSecureSession it should be a POST request. For some reason I think this code is making a GET request based on result.request.method === "GET". Is there something I'm missing? Can I force it to run a POST request? The body is html but I expect this function to return a secure session token.

    Here is my code

        soap.createClient(url, opts, function (err, client) {
          client.CreateSecureSession(args, function (err, result, rawResponse, soapHeader, rawRequest) {
            console.log(JSON.stringify(result, null, 2))
            response = result
    4 replies
    Martin Lokaj

    Hi guys,
    please any suggestion how to set client so I can get ID attribute and namespace in Body tag

    <soap:Body wsu:Id="id-623" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">

    could not find anything in docs


    hi ! i just install with 'npm install soap' and just execute 'var soap = require('soap');' throw an error: TypeError [ERR_INVALID_ARG_TYPE]: The "original" argument must be of type function

    I had the same issue.
    It was only a matter of running with a recent node version. Version 9 won't do. But v14 would.

    Aidan Marshall

    Hi guys,
    New to the library, I have created a client with the appropriate URL and args, however, the options I have added are not getting implemented. The server I am trying to call does not work well with soap1.1 and so has to be done with 1.2. Therefore I have added the forceSoap12Headers tag to true, however looking at the client.last request, the soap XML isn't converted.


    const options: IOptions = {
        forceSoap12Headers: true,
    client.FnName(req, options, function (err, result) {

    Generated XML:

    <?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:tns="[...]" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/">
        [well made XML]

    Any help would be much appreciated!

    Mukhammad Pardaboev
    Hello everyone! How can I remove XML attributes from the response? I am getting response like this
    "ResponseInfo": {
                "attributes": {
                    "id": "id0",
                    "soapenc:root": "0",
                    "soapenv:encodingStyle": "http://schemas.xmlsoap.org/soap/encoding/",
                    "xsi:type": "ns3:OperationResponseInfo"
                "response_code": {
                    "attributes": {
                        "xsi:type": "xsd:integer"
                    "value": 0
                "EXTERNAL_SESSION_ID": {
                    "attributes": {
                        "xsi:type": "xsd:string"
                    "value": "1212dd0sk"
    I am using version 0.39.0. I am able to consume the soap service using node-soap. Transaction performance is very slow compared to other technologies. For example, the same soap request gets the response in SpringBoot or soap ui in less than 10 seconds whereas node-soap takes 25 seconds. Do I need to set up any options for increasing the performance ?
    1 reply
    Joseph Betts

    Hello Everybody,
    How can I make client.Function calls sequentially after receiving response from previous function.

    For example:

    client.orderlist(args, function(err, response){
    client.orderinfo(args, function(err, response){
    Actual output:
    - ordernumber
    - ordernumber
    - emailaddress
    - emailaddress
    Expected output:
    - ordernumber
    - emailaddress
    - ordernumber
    - emailaddress
    I am using 0.37.0 but I am getting an array as a response. The first and third element was null but I am getting a response in the second and forth element in XML. Anyone has idea why?
    Moacir Carlos Kurmann
    Hello, when creating a query from a WSDL I'm having parser error in the xml, this only happens in docker environment, is there any option or volume configuration that I need to create?
    Tristan Storch

    Hi. I'm new to node-soap. I have the following issue: A SOAP service is sending me back an XML response with escaped zero bytes (&x0;). Somehow node-soap seems to have problems with that it returns with an Error:
    Fault: {
    faultcode: 500,
    faultstring: 'Invalid XML',
    detail: 'Error: Invalid character entity\nLine: 0\nColumn: 19136\nChar: ;',
    statusCode: 500

    Is there a reason why the zero byte is not decoded, but things like CR (\r) or LF (\n) are?

    Tristan Storch
    Ok. I found the problem:
    Is there any chance, that this will be fixed somehow in node-soap?

    Any way to merge security WSSecurityCert and WSSecurity i want to authenticate with usernametoken and signature but setSecurity allows me only one