The SOAP connector enables LoopBack applications to interact with SOAP-based web services.Note: This page was generated from the loopback-connector-soap/README.md.
See also:
loopback-connector-soap
The SOAP connector enables LoopBack applications to interact withSOAP-based web services described usingWSDL.
For more information, see theLoopBack documentation.
Installation
In your application root directory, enter:
$ npm install loopback-connector-soap --save
This will install the module from npm and add it as a dependency to the application’s package.json file.
Overview
There are two ways to use the SOAP connector:
- Use the LoopBack CLI
lb soap
command to automatically create a set of models based on a SOAP service WSDL file. Often, this will be the easiest way to connect to a SOAP web service, but may not be suitable for all applications. For more information, see SOAP generator. - Write the code manually, calling the
loopback-connector-soap
and data source APIs directly. This is the approach illustrated here.While both approaches use theloopback-connector-soap
data source connector, they appear quite different.
SOAP data source properties
The following table describes the SOAP data source properties you can set in datasources.json
.
Property | Type | Description |
---|---|---|
url | String | URL to the SOAP web service endpoint. If not present, defaults to thelocation attribute of the SOAP address for the service/portfrom the WSDL document; for example below it is http://www.webservicex.net/periodictable.asmx :
|
wsdl | String | HTTP URL or local file system path to the WSDL file. Default is ?wsdl .In the example above, it would be http://www.webservicex.net/periodictable.asmx?wsdl . |
wsdl_options | Object | Indicates additonal options to pass to the SOAP connector, for example allowing self signed certificates.For example:
|
wsdl_headers | Object | Indicates additonal headers to pass to the SOAP connector, for example for sending http authorizations header.For example:
|
remotingEnabled | Boolean | Indicates whether the operations are exposed as REST APIs. To expose or hide a specific method, override with:
|
operations | Object | Maps WSDL binding operations to Node.js methods. Each key in the JSONobject becomes the name of a method on the model.See operations property below. |
security | Object | security configuration.See security property below. |
soapHeaders | Array of objects. | Custom SOAP headers. An array of header properties. For example:
|
operations property
The operations
property value is a JSON object that has a property (key) for eachmethod being defined for the model. The corresponding value is an object with thefollowing properties:
Property | Type | Description |
---|---|---|
service | String | WSDL service name |
port | String | WSDL port name |
operation | String | WSDL operation name |
Here is an example operations property for the periodic table service:
operations: {
// The key is the method name
periodicTable: {
service: 'periodictable', // The WSDL service name
port: 'periodictableSoap', // The WSDL port name
operation: 'GetAtomicNumber' // The WSDL operation name
}
}
IMPORTANT: When using the CLI data source generator, you must supply the “stringified JSON” value for this property.For example:
{"getAtomicWeight":{"service":"periodictable","port":"periodictableSoap","operation":"GetAtomicWeight"},"getAtomicNumber":{"service":"periodictable","port":"periodictableSoap","operation":"GetAtomicNumber"}}
To generate the stringified value, you can use the following code (for example):
var operations = {
"operations": {
"getAtomicWeight": {
"service": "periodictable",
"port": "periodictableSoap",
"operation": "GetAtomicWeight"
},
"getAtomicNumber": {
"service": "periodictable",
"port": "periodictableSoap",
"operation": "GetAtomicNumber"
}
}
};
var stringifiedOps = JSON.stringify (operations);
console.log(stringifiedOps);
security property
The security
property value is a JSON object with a scheme
property.The other properties of the object depend on the value of scheme
. For example:
security: {
scheme: 'WS',
username: 'test',
password: 'testpass',
passwordType: 'PasswordDigest'
}
Scheme | Description | Other properties |
---|---|---|
WS | WSSecurity scheme | - username: the user name- password: the password- passwordType: default is 'PasswordText' |
BasicAuth | Basic auth scheme | - username: the user name- password: the password |
ClientSSL | ClientSSL scheme | - keyPath: path to the private key file- certPath: path to the certificate file |
Creating a model from a SOAP data source
Instead of defining a data source with datasources.json
, you can define a data source in code; for example:
ds.once('connected', function () {
// Create the model
var PeriodictableService = ds.createModel('PeriodictableService', {});
// External PeriodTable WebService operation exposed as REST APIs through LoopBack
PeriodictableService.atomicnumber = function (elementName, cb) {
PeriodictableService.GetAtomicNumber({ElementName: elementName || 'Copper'}, function (err, response) {
var result = response;
cb(err, result);
});
};
...
}
Extending a model to wrap and mediate SOAP operations
You can extend a LoopBack model to wrap or mediate SOAP operationsand define new methods.The following example simplifies the GetAtomicNumber
operation:
periodictableperiodictableSoap.GetAtomicNumber = function(GetAtomicNumber, callback) {
periodictableperiodictableSoap.GetAtomicNumber(GetAtomicNumber, function (err, response) {
var result = response;
callback(err, result);
});
}
Creating a model from a SOAP data source
The SOAP connector loads WSDL documents asynchronously.As a result, the data source won’t be ready to create models until it’s connected.The recommended way is to use an event handler for the ‘connected’ event; for exampleas shown below.
Once you define the model, you can extend it to wrap or mediate SOAP operationsand define new methods. The example below shows adding a LoopBack remote methodfor the SOAP service’s GetAtomicNumber
operation.
...
ds.once('connected', function () {
// Create the model
var PeriodictableService = ds.createModel('PeriodictableService', {});
// External PeriodTable WebService operation exposed as REST APIs through LoopBack
PeriodictableService.atomicnumber = function (elementName, cb) {
PeriodictableService.GetAtomicNumber({ElementName: elementName || 'Copper'}, function (err, response) {
var result = response;
cb(err, result);
});
};
// Map to REST/HTTP
loopback.remoteMethod(
PeriodictableService.atomicnumber, {
accepts: [
{arg: 'elementName', type: 'string', required: true,
http: {source: 'query'}}
],
returns: {arg: 'result', type: 'object', root: true},
http: {verb: 'get', path: '/GetAtomicNumber'}
}
);
})
...
Example
For a complete example using the LoopBack SOAP connector, see loopback-example-connector. The repository provides examples in the soap
branch.
Tags: connectorsreadme