diff options
author | Benoit Foucher <benoit@zeroc.com> | 2006-09-19 10:19:04 +0000 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2006-09-19 10:19:04 +0000 |
commit | b2baf486cde6c1765e0e24fdf46b8fcaa8da18f5 (patch) | |
tree | 4669d447fafcacab589fa60f01adefa4aef2a85e /cpp/src/IceGrid/DescriptorHelper.cpp | |
parent | Added test for IceGrid/Query object (diff) | |
download | ice-b2baf486cde6c1765e0e24fdf46b8fcaa8da18f5.tar.bz2 ice-b2baf486cde6c1765e0e24fdf46b8fcaa8da18f5.tar.xz ice-b2baf486cde6c1765e0e24fdf46b8fcaa8da18f5.zip |
Fixes to prevent definition of duplicate parameters in templates
Diffstat (limited to 'cpp/src/IceGrid/DescriptorHelper.cpp')
-rw-r--r-- | cpp/src/IceGrid/DescriptorHelper.cpp | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/cpp/src/IceGrid/DescriptorHelper.cpp b/cpp/src/IceGrid/DescriptorHelper.cpp index 031d9b15a71..e897cd56d74 100644 --- a/cpp/src/IceGrid/DescriptorHelper.cpp +++ b/cpp/src/IceGrid/DescriptorHelper.cpp @@ -302,7 +302,19 @@ Resolver::Resolver(const ApplicationDescriptor& app, const Ice::CommunicatorPtr& } if(!t->second.descriptor) { - exception("invalid server template: server definition is empty"); + exception("invalid server template `" + t->first + "': server definition is empty"); + } + + Ice::StringSeq params = t->second.parameters; + sort(params.begin(), params.end()); + Ice::StringSeq wdups = params; + Ice::StringSeq dups; + set_difference(wdups.begin(), wdups.end(), params.begin(), unique(params.begin(), params.end()), + back_inserter(dups)); + if(!dups.empty()) + { + dups.erase(unique(dups.begin(), dups.end()), dups.end()); + exception("invalid server template `" + t->first + "': duplicate parameters " + toString(dups)); } } for(t = _application->serviceTemplates.begin(); t != _application->serviceTemplates.end(); ++t) @@ -313,7 +325,18 @@ Resolver::Resolver(const ApplicationDescriptor& app, const Ice::CommunicatorPtr& } if(!t->second.descriptor) { - exception("invalid service template: service definition is empty"); + exception("invalid service template `" + t->first + "': service definition is empty"); + } + Ice::StringSeq params = t->second.parameters; + sort(params.begin(), params.end()); + Ice::StringSeq wdups = params; + Ice::StringSeq dups; + set_difference(wdups.begin(), wdups.end(), params.begin(), unique(params.begin(), params.end()), + back_inserter(dups)); + if(!dups.empty()) + { + dups.erase(unique(dups.begin(), dups.end()), dups.end()); + exception("invalid server template `" + t->first + "': duplicate parameters " + toString(dups)); } } } |