Skip to content

Instantly share code, notes, and snippets.

@lancehudson
Created November 7, 2014 22:46
Show Gist options
  • Save lancehudson/bfd25d7931cc17a90707 to your computer and use it in GitHub Desktop.
Save lancehudson/bfd25d7931cc17a90707 to your computer and use it in GitHub Desktop.
Loopback.io autoexpose soap services

How to

  • Add a datasource for each soap service
  • Install debug and async npm install --save async debug
  • Add boot script
  • Modify main server script to use call back
var debug = require('debug')('attachEmptyModelsToSOAPEndpoints'),
async = require('async'),
dsFound = [],
dsToHook = [];
module.exports = function attachEmptyModelsToSOAPEndpoints(server, cb) {
// Get list of Data Sources to Hook
Object.keys(server.dataSources).forEach(function(dsName) {
var ds = server.dataSources[dsName];
if(dsFound.indexOf(ds.settings.name) === -1 &&
(ds.settings.connector === 'soap' ||
ds.settings.connector === 'loopback-connector-soap') &&
ds.settings.remotingEnabled) {
debug('found soap datasource ' + ds.settings.name);
dsFound.push(ds.settings.name);
dsToHook.push(dsName);
}
});
async.each(dsToHook, function(dsName, callback) {
debug('hooking ' + dsName);
var ds = server.dataSources[dsName];
ds.once('connected', function () {
debug('creating model for ' + ds.settings.name);
server.model(ds.createModel(ds.settings.name, {}));
callback(null);
});
}, function(err) {
cb();
});
};
{
"AdGroupAdService": {
"name": "AdGroupAdService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/AdGroupAdService?wsdl",
"remotingEnabled": true
},
"AdGroupBidModifierService": {
"name": "AdGroupBidModifierService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/AdGroupBidModifierService?wsdl",
"remotingEnabled": true
},
"AdGroupCriterionService": {
"name": "AdGroupCriterionService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/AdGroupCriterionService?wsdl",
"remotingEnabled": true
},
"AdGroupFeedService": {
"name": "AdGroupFeedService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/AdGroupFeedService?wsdl",
"remotingEnabled": true
},
"AdGroupService": {
"name": "AdGroupService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/AdGroupService?wsdl",
"remotingEnabled": true
},
"AdParamService": {
"name": "AdParamService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/AdParamService?wsdl",
"remotingEnabled": true
},
"AdwordsUserListService": {
"name": "AdwordsUserListService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/rm/v201409/AdwordsUserListService?wsdl",
"remotingEnabled": true
},
"BiddingStrategyService": {
"name": "BiddingStrategyService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/BiddingStrategyService?wsdl",
"remotingEnabled": true
},
"BudgetOrderService": {
"name": "BudgetOrderService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/billing/v201409/BudgetOrderService?wsdl",
"remotingEnabled": true
},
"BudgetService": {
"name": "BudgetService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/BudgetService?wsdl",
"remotingEnabled": true
},
"CampaignAdExtensionService": {
"name": "CampaignAdExtensionService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/CampaignAdExtensionService?wsdl",
"remotingEnabled": true
},
"CampaignCriterionService": {
"name": "CampaignCriterionService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/CampaignCriterionService?wsdl",
"remotingEnabled": true
},
"CampaignFeedService": {
"name": "CampaignFeedService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/CampaignFeedService?wsdl",
"remotingEnabled": true
},
"CampaignService": {
"name": "CampaignService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/CampaignService?wsdl",
"remotingEnabled": true
},
"CampaignFeedService": {
"name": "CampaignFeedService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/CampaignFeedService?wsdl",
"remotingEnabled": true
},
"CampaignSharedSetService": {
"name": "CampaignSharedSetService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/CampaignSharedSetService?wsdl",
"remotingEnabled": true
},
"ConstantDataService": {
"name": "ConstantDataService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/ConstantDataService?wsdl",
"remotingEnabled": true
},
"ConversionTrackerService": {
"name": "ConversionTrackerService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/ConversionTrackerService?wsdl",
"remotingEnabled": true
},
"CustomerFeedService": {
"name": "CustomerFeedService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/CustomerFeedService?wsdl",
"remotingEnabled": true
},
"CustomerService": {
"name": "CustomerService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/mcm/v201409/CustomerService?wsdl",
"remotingEnabled": true
},
"CustomerSyncService": {
"name": "CustomerSyncService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/ch/v201409/CustomerSyncService?wsdl",
"remotingEnabled": true
},
"DataService": {
"name": "DataService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/DataService?wsdl",
"remotingEnabled": true
},
"ExperimentService": {
"name": "ExperimentService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/ExperimentService?wsdl",
"remotingEnabled": true
},
"FeedItemService": {
"name": "FeedItemService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/FeedItemService?wsdl",
"remotingEnabled": true
},
"FeedMappingService": {
"name": "FeedMappingService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/FeedMappingService?wsdl",
"remotingEnabled": true
},
"FeedService": {
"name": "FeedService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/FeedService?wsdl",
"remotingEnabled": true
},
"GeoLocationService": {
"name": "GeoLocationService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/GeoLocationService?wsdl",
"remotingEnabled": true
},
"LabelService": {
"name": "LabelService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/LabelService?wsdl",
"remotingEnabled": true
},
"LocationCriterionService": {
"name": "LocationCriterionService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/LocationCriterionService?wsdl",
"remotingEnabled": true
},
"ManagedCustomerService": {
"name": "ManagedCustomerService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/mcm/v201409/ManagedCustomerService?wsdl",
"remotingEnabled": true
},
"MediaService": {
"name": "MediaService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/MediaService?wsdl",
"remotingEnabled": true
},
"MutateJobService": {
"name": "MutateJobService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/MutateJobService?wsdl",
"remotingEnabled": true
},
"OfflineConversionFeedService": {
"name": "OfflineConversionFeedService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/OfflineConversionFeedService?wsdl",
"remotingEnabled": true
},
"ReportDefinitionService": {
"name": "ReportDefinitionService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/ReportDefinitionService?wsdl",
"remotingEnabled": true
},
"SharedCriterionService": {
"name": "SharedCriterionService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/SharedCriterionService?wsdl",
"remotingEnabled": true
},
"SharedSetService": {
"name": "SharedSetService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/SharedSetService?wsdl",
"remotingEnabled": true
},
"TargetingIdeaService": {
"name": "TargetingIdeaService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/o/v201409/TargetingIdeaService?wsdl",
"remotingEnabled": true
},
"TrafficEstimatorService": {
"name": "TrafficEstimatorService",
"connector": "soap",
"wsdl": "https://adwords.google.com/api/adwords/o/v201409/TrafficEstimatorService?wsdl",
"remotingEnabled": true
}
}
var loopback = require('loopback');
var boot = require('loopback-boot');
var app = module.exports = loopback();
// Set up the /favicon.ico
app.use(loopback.favicon());
// request pre-processing middleware
app.use(loopback.compress());
// -- Add your pre-processing middleware here --
// boot scripts mount components like REST API
boot(app, __dirname, function(err){
// -- Mount static files here--
// All static middleware should be registered at the end, as all requests
// passing the static middleware are hitting the file system
// Example:
// var path = require('path');
// app.use(loopback.static(path.resolve(__dirname, '../client')));
// Requests that get this far won't be handled
// by any middleware. Convert them into a 404 error
// that will be handled later down the chain.
app.use(loopback.urlNotFound());
// The ultimate error handler.
app.use(loopback.errorHandler());
app.start = function() {
// start the web server
return app.listen(function() {
app.emit('started');
console.log('Web server listening at: %s', app.get('url'));
});
};
// start the server if `$ node server.js`
if (require.main === module) {
app.start();
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment