summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/DescriptorHelper.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2006-09-19 10:19:04 +0000
committerBenoit Foucher <benoit@zeroc.com>2006-09-19 10:19:04 +0000
commitb2baf486cde6c1765e0e24fdf46b8fcaa8da18f5 (patch)
tree4669d447fafcacab589fa60f01adefa4aef2a85e /cpp/src/IceGrid/DescriptorHelper.cpp
parentAdded test for IceGrid/Query object (diff)
downloadice-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.cpp27
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));
}
}
}