HI there! Could anyone help me with following error ?
I am using a WSDL file to create server. And I call my endpoint from SOAPUI. On my server console, I end up with error -
TypeError: Cannot read property 'description' of undefined
at SAXParser.p.onopentag (C:\Codebase\sample-domo\strong-soap-demo\node_modules\soap\lib\wsdl\index.js:238:37)
at emit (C:\Codebase\sample-domo\strong-soap-demo\node_modules\sax\lib\sax.js:624:35)
at emitNode (C:\Codebase\sample-domo\strong-soap-demo\node_modules\sax\lib\sax.js:629:5)
at openTag (C:\Codebase\sample-domo\strong-soap-demo\node_modules\sax\lib\sax.js:825:5)
at SAXParser.write (C:\Codebase\sample-domo\strong-soap-demo\node_modules\sax\lib\sax.js:1391:13)
at WSDL.xmlToObject (C:\Codebase\sample-domo\strong-soap-demo\node_modules\soap\lib\wsdl\index.js:443:11)
at Server._process (C:\Codebase\sample-domo\strong-soap-demo\node_modules\soap\lib\server.js:251:29)
at Server._processRequestXml (C:\Codebase\sample-domo\strong-soap-demo\node_modules\soap\lib\server.js:166:18)
at IncomingMessage.<anonymous> (C:\Codebase\sample-domo\strong-soap-demo\node_modules\soap\lib\server.js:235:25)
I have done the same process for another WSDL, worked fine. But this time, its just weird. ANY help is appreciated!! Please reach out if you know anything about the issue.
var soap = require('soap');
var url = './DocumentiWCFService.wsdl';
soap.createClientAsync(url).then((client) => {
var loginData = { username: MYUSER, password: MYPASS, domain: MYDOMAIN, workstation: MYWS };
client.setSecurity(new soap.NTLMSecurity(loginData));
return client.Documents_GetAll();
}).then((result) => {
console.log(result);
});
node-soap
changes the shape of the object to put the value in $value
and the attributes in attributes
, but, when it doesn't, this object is not formed. Is there any way to make this function consistently one way or the other (either with the $value object or without the $value object, preferably without)?
rawRequest
to inspect what I'm sending and I noticed that for example "date of birth" (which is in format 1979-11-24T23:00:00.000Z) is empty - any ideas why this gets omitted ?
Any idea why the overrideRootElement
option might sometimes not work?
const options = {
namespaceArrayElements: false, // This works!
envelopeKey: 'SOAP-ENV', // This works!
overrideRootElement: {
namespace: 'ns1', // This DOES NOT work!
xmlnsAttributes: [{ // This DOES NOT work!
name: 'xmlns:ns1',
value: "http://some.domain"
}]
}
}
const client = await soap.createClientAsync(MyWsdlUrl, options);
client.myApiMethod(params, (result) => {
console.log(client.lastRequest);
});
This is the XML it generates:
<?xml version="1.0" encoding="utf-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<impl:myApiMethod>
Name space and xmlns attributes are not changing!
</impl:myApiMethod>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Hey! Can someone tell me if Node-Soap follows redirects, HTTP Status Code 301? And if so how I go about enabling that feature?
I should be a little more specific. I am specifically asking when making the SOAP calls if the client will handle the redirects or do I have to do something special to make this happen. Currently, it is not following the redirects and and I can't quite figure out how to accommodate for this.
Hi! This is my first time using SOAP, I have a node.js application that needs to integrate with an application that provides a SOAP api. They only have Java documentation so I am trying to figure out how to do this...
I have managed to create the client but I get an error going any further. I am trying to authenticate, I have the 3 required params and an example Java snippet. The Java snippet is:
IntimeServiceV3_0Stub.Authenticate auth=new IntimeServiceV3_0Stub.Authenticate();
auth.setAgencyRefCode("<supplied_credentials>");
auth.setUsername("<supplied_credentials>");
auth.setPassword("<supplied_credentials>");
IntimeServiceV3_0Stub.AuthenticateResponse authResp=stub.authenticate(auth);
String ticket=authResp.get_return();
System.out.println("Authentication token:" + ticket);
I am wondering how I go about converting that to using node-soap, I have at present:
client.authenticateAsync("agencyRefCode", "username", "password")
.then(res => {
console.log("SUCCESS");
console.log(res);
})
.catch(err => {
console.log("ERROR");
console.log(err);
})
I have tried a few variations of the aboe. There is also an authenticate
method available on the client for non-async requests but the same error is returned each time. Any help would be greatly appreciated!
const express = require('express')
const { soap } = require('express-soap')
const db = require('./db')
const app = express()
const port = 3000
app.use(
'/soap/transaction',
soap({
services: {
TransactionService: {
Transaction(
{
idTransaccion, idCuenta, codigoRespuesta, codigoAutorizacion, importe, importeDevolucion, moneda,
},
res
) {
db.query(
`INSERT INTO transaction (idTransaccion, idCuenta, codigoRespuesta, codigoAutorizacion, importe, importeDevolucion, moneda) VALUES (?,?,?,?,?,?,?)`,
[
idTransaccion, idCuenta, codigoRespuesta, codigoAutorizacion, importe, importeDevolucion, moneda,
],
(err, results) => {
if (err) {
console.log(err)
res({
TransactionResult:
'error for not have camps',
})
} else {
console.log(results)
if (results.insertId !== null) {
res({
TransactionResult: '00',
})
}
}
}
)
},
},
},
wsdl: `<wsdl:definitions xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:tns="http://www.italcred.com"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
targetNamespace="http://www.italcred.com">
<wsdl:types>
<s:schema elementFormDefault="qualified" targetNamespace="http://www.italcred.com">
<s:complexType name="Transaction">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="idTransaccion" type="s:string" />
<s:element minOccurs="1" maxOccurs="1" name="idCuenta" type="s:string" />
<s:element minOccurs="1" maxOccurs="1" name="codigoRespuesta" type="s:string" />
<s:element minOccurs="1" maxOccurs="1" name="codigoAutorizacion" type="s:string" />
<s:element minOccurs="1" maxOccurs="1" name="importe" type="s:double" />
<s:element minOccurs="1" maxOccurs="1" name="importeDevolucion" type="s:double" />
<s:element minOccurs="1" maxOccurs="1" name="moneda" type="s:string" />
</s:sequence>
</s:complexType>
<s:element name="TransactionResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="TransactionResult" type="tns:string" />
</s:sequence>
</s:complexType>
</s:element>
</s:schema>
</wsdl:types>
<wsdl:message name="TransactionSoapIn">
<wsdl:part name="parameters" element="tns:Transaction" />
</wsdl:message>
<wsdl:message name="TransactionSoapOut">
<wsdl:part name="parameters" element="tns:TransactionResponse" />
</wsdl:message>
<wsdl:portType name="TransactionService">
<wsdl:operation name="Transaction">
<wsdl:input name="Transaction" message="tns:TransactionSoapIn" />
<wsdl:output name="Transaction" message="tns:TransactionSoapOut" />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="TransactionService" type="tns:TransactionService">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="Transaction">
<soap:operation soapAction="http://localhost:3000/soap/transaction" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="Servicio">
<wsdl:port name="TransactionService" binding="tns:TransactionService">
<soap:address location="http://localhost:3000/soap/transaction" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>`, // or xml (both options are valid)
})
)
app.listen(port, () => {
console.log(`App listening on port ${port}`)
})
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<Transaction xmlns="http://localhost:3000/soap/transaction">
<idTransaccion>"123456"</idTransaccion>
<idCuenta>"1231"</idCuenta>
<codigoRespuesta>"00"</codigoRespuesta>
<codigoAutorizacion>"00"</codigoAutorizacion>
<importe>500.0</importe>
<importeDevolucion>500.0</importeDevolucion>
<moneda>"PESOS"</moneda>
</Transaction>
</soap:Body>
</soap:Envelope>
Obtain:<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="http://www.italcred.com" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/">
<soap:Body>
<soap:Fault>
<soap:Code>
<soap:Value>SOAP-ENV:Server</soap:Value>
<soap:Subcode>
<soap:Value>InternalServerError</soap:Value>
</soap:Subcode>
</soap:Code>
<soap:Reason>
<soap:Text>TypeError: Cannot read property 'outputName' of undefined</soap:Text>
</soap:Reason>
</soap:Fault>
</soap:Body>
</soap:Envelope>
Hey. Has someone experience using soap in an Angular App.
I do get a lot of errors like:
Error: ./node_modules/xml-crypto/lib/signed-xml.js
Module not found: Error: Can't resolve 'fs' in 'project-folder\node_modules\xml-crypto\lib'
Previously we used ngx-soap. But ngx-soap has no updates for angular11+
Hi,
I'm having problems with a WSDL File that has complex types that are extended from oneanthother.
in a operation it will then resolve all fields to be of the same namespace while they are actually from different namespaces.
A { a: string }, B extends A { b: number } - operation(B)
doing something like operation({ a: "1", b: "2" }) I would need the xml to be something like <A.a>1</A.a><B.b>2</B.b>. But the Result is then <B.a>1</B.a><B.b>2</B.b>
any Idea how I could best debug this within the code? Right now I'm trying to print out everything in WSD.objectToXML and just see that the nsPrefix is then always B (also for the ones that should have namespace A)
input: {
VUNr: 'VUNr|xsd:string|minLength,maxLength',
ClientId: 'xsd:string',
'TechnischeParameter[]': {
Key: 'xsd:string',
Value: 'xsd:string',
targetNSAlias: '__tns__',
targetNamespace: 'urn:CommonServiceTypes-1-1-0'
},
Hi, I'm trying to use v0.43, but it ships with a very old version of Axios 0.21, because of this it fails typescript checks when I pass it an AxiosInstance 0.26 using options.request. A couple of thoughts, I can work around it by making axios: any, not optimal.
Is there a way to not bundle axios but refer to a dependency? Or alternatively, could you just upgrade to a newer release? I believe 0.21 has security issues. https://snyk.io/vuln/npm:axios@0.21.1
Error occurred in handler for 'MSSANTE_LIST_EMAILS': TypeError: Cannot read property 'description' of undefined
at SAXParser.p.onopentag (/Users/myUser/Saturn/dist/webpack:/node_modules/soap/lib/wsdl/index.js:238:1)
at emit (/Users/myUser/Saturn/dist/webpack:/node_modules/sax/lib/sax.js:624:1)
at emitNode (/Users/myUser/Saturn/dist/webpack:/node_modules/sax/lib/sax.js:629:1)
at openTag (/Users/myUser/Saturn/dist/webpack:/node_modules/sax/lib/sax.js:825:1)
at SAXParser.write (/Users/myUser/Saturn/dist/webpack:/node_modules/sax/lib/sax.js:1391:1)
at WSDL../node_modules/soap/lib/wsdl/index.js.WSDL.xmlToObject (/Users/myUser/Saturn/dist/webpack:/node_modules/soap/lib/wsdl/index.js:443:1)
at parseSync (/Users/myUser/Saturn/dist/webpack:/node_modules/soap/lib/client.js:289:1)
at /Users/myUser/Saturn/dist/webpack:/node_modules/soap/lib/client.js:496:1
at /Users/myUser/Saturn/dist/webpack:/node_modules/soap/lib/http.js:199:1
at processTicksAndRejections (internal/process/task_queues.js:93:5) {
I am trying to use WSSecurityCert. And I am using additionalReferences :['was:To'] to sign the tag but I am getting
Error: the following xpath cannot be signed because it was not found: //*[name(.)='wsa:To']
and also
TypeError: Cannot read property 'setSecurity' of undefined
exports.findAll = (req, res, next) => {
let server = req.body.server;
let agencyCode = req.body.agencyCode;
let branchCode = req.body.branchCode;
let transactionCode = req.body.transactionCode;
let userId = req.body.userId;
let ic = req.body.input_ic;
var date = new Date(); // Or the date you'd like converted.
var reqDate = new Date(date.getTime() - (date.getTimezoneOffset() * 60000)).toISOString();
reqDate = reqDate.substring(0, reqDate.length - 5);
const soapRequest = require('easy-soap-request');
const fs = require('fs');
const xml2js = require('xml2js');
const url = `${server}`;
const header = {
'user-agent': 'SSIPR',
'Content-Type': 'text/xml;charset=UTF-8',
};
const xml = `<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:crs="http://tempuri.org/CRSService">
<soapenv:Header/>
<soapenv:Body>
<crs:retrieveCitizensDataReq>
<AgencyCode>${agencyCode}</AgencyCode>
<BranchCode>${branchCode}</BranchCode>
<UserId>${userId}</UserId>
<TransactionCode>${transactionCode}</TransactionCode>
<RequestDateTime>${reqDate}</RequestDateTime>
<ICNumber>${ic}</ICNumber>
<RequestIndicator>A</RequestIndicator>
</crs:retrieveCitizensDataReq>
</soapenv:Body>
</soapenv:Envelope>`;
// usage of module
(async () => {
try{
const { response } = await soapRequest({ url: url, headers: header, xml: xml, timeout: 30000 }); // Optional timeout parameter(milliseconds)
const { headers, body, statusCode } = response;
xml2js.parseString(body.toString(),
{ tagNameProcessors: [ xml2js.processors.stripPrefix ]},
function (err, result) {
res.status(200).json(result);
})
}catch(err){
next(err);
}
})();
}
addHeaders
method of the client's security. I'm using a token which times out after 1h and refreshing that token could be done in the addHeaders
method but for that to work it would become async and the client would have to await it in its _inspect
method. Maybe we could add another optional method to the ISecurity interface called addHeadersAsync
to be backwards-compatible.
Hello, I'm having this error in a Firebase Function using soap that was working fine for the last past two years
Error: socket hang up
> at connResetException (node:internal/errors:692:14)
> at TLSSocket.socketOnEnd (node:_http_client:478:23)
> at TLSSocket.emit (node:events:539:35)
> at endReadableNT (node:internal/streams/readable:1345:12)
> at processTicksAndRejections (node:internal/process/task_queues:83:21) {
> code: 'ECONNRESET',
I made no code change no library update in the two weeks before having this issue.
I have posted on StackOverflow if you need more information :
https://stackoverflow.com/questions/73907048/firebase-functions-using-soap-finishing-with-econnreset-socket-hang-up