This module lets you connect to web services using SOAP. It also provides a server that allows you to run your own SOAP services.
Features:
- Very simple API
- Handles both RPC and Document schema types
- Supports multiRef SOAP messages (thanks to @kaven276)
- Support for both synchronous and asynchronous method handlers
- WS-Security (currently only UsernameToken and PasswordText encoding is supported)
- Slightly improved ability to handle SAP SOAP WSDLS
- Sequences nest a collection of objects beneath the parent object, instead of a collection of parent objects
Install with npm:
npm install soap
soap.createClient(url, callback) - create a new SOAP client from a WSDL url. Also supports a local filesystem path.
varsoap=require('soap');varurl='http://example.com/wsdl?wsdl';varargs={name: 'value'};soap.createClient(url,function(err,client){client.MyFunction(args,function(err,result){console.log(result);});});soap.listen(server, path, services, wsdl) - create a new SOAP server that listens on path and provides services.
wsdl is an xml string that defines the service.
varmyService={MyService: {MyPort: {MyFunction: function(args){return{name: args.name};}// This is how to define an asynchronous function. MyAsyncFunction: function(args,callback){// do some workcallback({name: args.name})}}}}varxml=require('fs').readFileSync('myservice.wsdl','utf8'),server=http.createServer(function(request,response){response.end("404: Not Found: "+request.url)});server.listen(8000);soap.listen(server,'/wsdl',myService,xml);If the log method is defined it will be called with 'received' and 'replied' along with data.
server=soap.listen(...)server.log=function(type,data){// type is 'received' or 'replied'};If server.authenticate is not defined no authentation will take place.
server=soap.listen(...)server.authenticate=function(security){varcreated,nonce,password,user,token;token=security.UsernameToken,user=token.Username,password=token.Password,nonce=token.Nonce,created=token.Created;returnuser==='user'&&password===soap.passwordDigest(nonce,created,'password');};This is called prior to soap service method If the method is defined and returns false the incoming connection is terminated.
server=soap.listen(...)server.authorizeConnection=function(req){returntrue;// or false};An instance of Client is passed to the soap.createClient callback. It is used to execute methods on the soap service.
client.describe()// returns{MyService: {MyPort: {MyFunction: {input: {name: 'string'}}}}}client.setSecurity(newWSSecurity('username','password'))client.MyFunction({name: 'value'},function(err,result){// result is a javascript object})client.MyService.MyPort.MyFunction({name: 'value'},function(err,result){// result is a javascript object})soapHeaderObject({rootName: {name: "value"}}) or strict xml-string
nameUnknown parameter (it could just a empty string)namespaceprefix of xml namespacexmlnsURI
WSSecurity implements WS-Security. UsernameToken and PasswordText/PasswordDigest is supported. An instance of WSSecurity is passed to Client.setSecurity.
newWSSecurity(username,password,passwordType)//'PasswordDigest' or 'PasswordText' default is PasswordText