Untitled
unknown
javascript
3 years ago
1.9 kB
8
Indexable
const express = require("express");
const bodyParser = require("body-parser");
const xml2js = require("xml2js");
const soap = require("soap");
const app = express();
app.use(bodyParser.text({ type: "text/xml" }));
const service = {
Calculator: {
CalculatorService: {
add: (args) => {
const { a, b } = args;
return { result: a + b };
},
subtract: (args) => {
const { a, b } = args;
return { result: a - b };
},
multiply: (args) => {
const { a, b } = args;
return { result: a * b };
},
divide: (args) => {
const { a, b } = args;
return { result: a / b };
},
},
},
};
app.post("/calculator", (req, res) => {
soap.listen(app, "/calculator", service, xml => {
const parser = new xml2js.Parser();
parser.parseString(xml, (err, result) => {
const { Body } = result["soap:Envelope"];
const keys = Object.keys(Body);
const operation = keys[0];
const args = Body[operation]["0"];
const response = service.Calculator.CalculatorService[operation](args);
const builder = new xml2js.Builder();
const xmlResponse = builder.buildObject({
"soap:Envelope": {
"$": {
"xmlns:soap": "http://schemas.xmlsoap.org/soap/envelope/",
"soap:encodingStyle": "http://schemas.xmlsoap.org/soap/encoding/",
},
"soap:Body": [
{
[`${operation}Response`]: [
response,
],
},
],
},
});
res.status(200).type("text/xml").send(xmlResponse);
});
});
});
const port = process.env.PORT || 3000;
app.listen(port, () => {
console.log(`SOAP service listening on http://localhost:${port}/calculator`);
});
Editor is loading...