<soap:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="_30d88595-86e5-446e-b779-60b13612fe62">
<xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" Id="ED-9cacd30b-e921-4f12-b13c-66618fd704b3" Type="http://www.w3.org/2001/04/xmlenc#Content">
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc" />
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<wsse:SecurityTokenReference xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsse11="http://docs.oasis-open.org/wss/oasis-wss-wssecurity-secext-1.1.xsd" wsse11:TokenType="http://docs.oasis-open.org/wss/oasis-wss-soap-message-security-1.1#EncryptedKey">
<wsse:Reference URI="#EK-e9aa9c0a-28cf-487a-81e9-a38f1e4079db" />
</wsse:SecurityTokenReference>
</ds:KeyInfo>
<xenc:CipherData>
<xenc:CipherValue>ghu/wEcFEkun4tImo++HWo3rpXU9jPw9qSA/uGhrqqAAR/LuE+6G8aFPNZ/QLDnocxvfAicieWoTlmJ5kpitjmJHW3lv95PKPyMoE/GymNVicG6qCp/HARBbk0uY+SkkSS91n7AOyGARO80aa4npggbUFdzaZlywKOMFZ6tSTDC/+0YZAfQTjecSm3xSl5C3zFX5fPgvXuVRT4AEeFnjwvja2lbJFOLc2Vhpd0tG3LGkKA111q99Qkt/o3S7/GUfimbZKQhInXioCw+t73PpKPu0JtG5YOdCuHBoJJUhW/T6DKcYdFx0exWxz7EFfa2RMK5emB9bJplPKS4fflMDpA==</xenc:CipherValue>
</xenc:CipherData>
</xenc:EncryptedData>
</soap:Body>
Hey everyone I am trying to create a soap server in my local that listens on https.
let key = fs.readFileSync('key.pem');
let cert = fs.readFileSync('cert.pem')
let soapServer = soap.listen(httpServer, {
path: urlPath,
services: processorService,
xml: xmlPath,
key : key,
cert : cert
});
When i am trying to make a request, I am always getting secure connection could not be established error. I have all the WSDL files and the server works properly without https ( i.e http ) .
Any pointers to help ?
hi everyone, does anybody have experience with using async with postProcess option?
i need to modify XML in postProcess, but first need to pull it through async method. postProcess just goes on without waiting.
example:postProcess: async (_xml) => {
_xml = await someMethod(_xml);
return _xml;
}
Hi! I'm getting the following error when trying to use an async client with ts-node
(node:21227) UnhandledPromiseRejectionWarning: Error: soapenv:server: java.lang.NullPointerException: {"message":null}
at finish (/Users/verner/Code/equifax/node_modules/soap/src/wsdl/index.ts:513:30)
at WSDL.xmlToObject (/Users/verner/Code/equifax/node_modules/soap/src/wsdl/index.ts:491:12)
at parseSync (/Users/verner/Code/equifax/node_modules/soap/src/client.ts:362:25)
at /Users/verner/Code/equifax/node_modules/soap/src/client.ts:575:16
at /Users/verner/Code/equifax/node_modules/soap/src/http.ts:214:7
at processTicksAndRejections (internal/process/task_queues.js:95:5)
Any ideas what could be wrong?
:point_up: Edit: Hello guys, I have updated my soap to 0.43 hence I have replaced the options.request in createClient by axiosInstance..
Below is my old code snippet =>
request.defaults({
strictSSL: true,
ca: caCert
});
and the new implementation using axios->
axiosInstance.defaults.httpsAgent = new https.Agent({
rejectUnauthorized: true,
ca: cacert
});
My options for soap.CreateClient ->
Options = {
url,
wsdl_options: {
rejectUnauthorized: true,
pfx,
passphrase,
strictSSL: true,
},
request:axiosInstance
}.
I get below error "Invalid WSDL 401 error".. Am I missing any paramter?
:point_up: Edit: Hello guys, I have updated my soap to 0.43 hence I have replaced the options.request in createClient by axiosInstance..
Below is my old code snippet =>
request.defaults({
strictSSL: true,
ca: caCert
});
and the new implementation using axios->
axiosInstance.defaults.httpsAgent = new https.Agent({
rejectUnauthorized: true,
ca: cacert
});
My options for soap.CreateClient ->
Options = {
url,
wsdl_options: {
rejectUnauthorized: true,
pfx,
passphrase,
strictSSL: true,
},
request:axiosInstance
}.
I get below error "Invalid WSDL 401 error".. Am I missing any paramter?
Code: 401
Response Body: <html><head><meta http-equiv="content-type" content="text/html; charset=windows-1252"><title>Anmeldung fehlgeschlagen
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>