String sServiceName = XMLUtil.getReqStringAttr(element, "service");
final Service service = (Service)m_globalMap.get(sServiceName);
if (service == null)
{
throw new MetadataException("err.meta.soa.unknownService", new Object[] {sServiceName});
}
final Implementation impl = new Implementation(service);
if (m_implementationMap.put(impl.getNamePrefix(), impl) != null)
{
throw new MetadataException("err.meta.soa.implementationDup",
new Object[] {impl.getNamePrefix(), service.getName(), service.getDefinition().getNamePrefix()});
}
XMLUtil.forEachChildElement(element, "Interface", new XMLUtil.ElementHandler()
{
public void handleElement(Element interfaceElement)
{
String sInterfaceName = XMLUtil.getReqStringAttr(interfaceElement, "name");
final Interface iface = service.getInterface(sInterfaceName);
if (iface == null)
{
throw new MetadataException("err.meta.soa.implementation.undefinedInterface",
new Object[] {sInterfaceName, service.getName(), service.getDefinition().getNamePrefix()});
}
final InterfaceImplementation ifaceImpl = new InterfaceImplementation(impl, iface);
if (!impl.addInterface(ifaceImpl))
{
throw new MetadataException("err.meta.soa.implementation.interfaceDup",
new Object[] {iface.getGlobalName(), service.getGlobalName()});
}
XMLUtil.forEachChildElement(interfaceElement, "Method", new XMLUtil.ElementHandler()
{
public void handleElement(Element methodElement)
{
MethodImplementation method = new MethodImplementation();
method.setName(XMLUtil.getReqStringAttr(methodElement, "name"));
method.setArgs(XMLUtil.getStringAttr(methodElement, "args"));
if (!ifaceImpl.addMethod(method))
{
throw new MetadataException("err.meta.soa.implementation.methodDup",
new Object[] {method.getName(), method.getArgString(), iface.getName(), impl.getService().getGlobalName()});
}
if (iface.getMethod(method.getName(), method.getArgCount()) == null)
{
throw new MetadataException("err.meta.soa.implementation.unknownMethod",
new Object[] {method.getName(), method.getArgString(), iface.getName(), impl.getService().getGlobalName()});
}
Element scriptElement = XMLUtil.findChildElement(methodElement, "Script");