您可能会考虑编写一个程序来解析所有客户 WSDL 并将操作等存储在某种映射(或多映射)中。然后遍历地图并删除重复项并将结果写入另一个,最终的 WSDL 和代码生成。不过,您必须对命名空间做一些事情。
不过需要考虑的一点是:这样做所需的代码是否会超过您已经复制的额外代码?
另一种选择可能是为重复操作定义一个代理类。您必须通过使用命名空间添加操作来初始化它(创建命名空间字符串映射到操作映射,它本身就是映射到要执行的代码/对象的操作字符串)。然后每次要执行特定操作时,传入命名空间字符串进行操作。
想象一下,我们在命名空间 ns1、ns2 和 ns3 中定义了 Op1,在 ns1 和 ns2 中定义了 Op2。那么伪代码(强烈偏向 C++)可能是这样的:
class ProxyOperations
{
addOperation(string opName, string namespace, OperationBase op);
// You'll have to figure out what to do with the operation parameters,
// maybe wrap them in a parameter context
void doOperation(string opName, string namespace) {
// lookup operation object and execute it
}
typedef map<string, OperationsBase> OperMap;
typedef map<string, operMap> NamespaceMap;
NamespaceMap namespaceOperationMap_;
};
{
ProxyOperations po;
// Populate it
po.addOperation("Op1", "ns1", oper1ObjectNs1);
po.addOperation("Op1", "ns2", oper1ObjectNs2);
po.addOperation("Op1", "ns3", oper1ObjectNs3);
po.addOperation("Op2", "ns1", oper2ObjectNs1);
po.addOperation("Op2", "ns2", oper2ObjectNs2);
// now use it
po.doOperation("Op1", "ns2");
}