[prev in list] [next in list] [prev in thread] [next in thread] 

List:       wsas-java-dev
Subject:    [wsas-java-dev] svn commit r15590 - in trunk/wsas/java/modules:
From:       svn () wso2 ! org
Date:       2008-04-07 4:31:40
Message-ID: E1Jij1A-0001yQ-98 () wso2 ! org
[Download RAW message or body]

Author: keith
Date: Sun Apr  6 21:31:26 2008
New Revision: 15590

Log:

Applying patch given by sanka for WSAS-736



Modified:
   trunk/wsas/java/modules/admin/src/org/wso2/wsas/admin/service/GlobalAdmin.java
   trunk/wsas/java/modules/admin/src/org/wso2/wsas/admin/service/SecurityScenarioConfigAdmin.java
  trunk/wsas/java/modules/admin/src/org/wso2/wsas/admin/service/ServiceAdmin.java
   trunk/wsas/java/modules/core/src/org/wso2/wsas/persistence/dataobject/ServicePolicyDO.java


Modified: trunk/wsas/java/modules/admin/src/org/wso2/wsas/admin/service/GlobalAdmin.java
 ==============================================================================
--- trunk/wsas/java/modules/admin/src/org/wso2/wsas/admin/service/GlobalAdmin.java	(original)
                
+++ trunk/wsas/java/modules/admin/src/org/wso2/wsas/admin/service/GlobalAdmin.java	Sun \
Apr  6 21:31:26 2008 @@ -26,7 +26,7 @@
 import org.apache.axis2.deployment.DeploymentEngine;
 import org.apache.axis2.description.AxisModule;
 import org.apache.axis2.description.Parameter;
-import org.apache.axis2.description.PolicyInclude;
+import org.apache.axis2.description.PolicySubject;
 import org.apache.axis2.engine.Handler;
 import org.apache.axis2.engine.Phase;
 import org.apache.axis2.phaseresolver.PhaseMetadata;
@@ -54,367 +54,388 @@
 import java.util.Date;
 import java.util.List;
 
-
 /**
  * Admin service to manage operations on the <code>AxisConfiguration</code>
  */
 public class GlobalAdmin extends AbstractAdmin {
 
-    private static final Log log = LogFactory.getLog(GlobalAdmin.class);
-    private PersistenceManager pm = new PersistenceManager();
+	private static final Log log = LogFactory.getLog(GlobalAdmin.class);
+	private PersistenceManager pm = new PersistenceManager();
 
-    /**
-     * Restore the default system settings and override all the changes persisted in \
                the
-     * database. Please note that this is possible only for the default database \
                included
-     * with WSO2 WSAS
-     */
-    public void restoreDefaults() {
-        pm.restoreDefaults();
-    }
-
-    /**
-     * List handlers in a given phase (global)
-     *
-     * @param flow
-     * @param phaseName
-     * @return list of global phase handlers as a String[].
-     * @throws AxisFault
-     */
-    public String[] listGlobalPhaseHandlers(int flow, String phaseName) throws \
                AxisFault {
-        String[] handlers = null;
-        switch (flow) {
-            case PhaseMetadata.IN_FLOW: {
-                ArrayList inflow = getAxisConfig().getInFlowPhases();
-                for (int i = 0; i < inflow.size(); i++) {
-                    Phase phase = (Phase) inflow.get(i);
-                    if (phase.getPhaseName().equals(phaseName)) {
-                        handlers = new String[phase.getHandlerCount()];
-                        List hands = phase.getHandlers();
-                        for (int j = 0; j < hands.size(); j++) {
-                            Handler handler = (Handler) hands.get(j);
-                            handlers[j] = handler.getName();
-                        }
-                    }
-                }
-                break;
-            }
-            case PhaseMetadata.OUT_FLOW: {
-                ArrayList phases = getAxisConfig().getOutFlowPhases();
-                for (int i = 0; i < phases.size(); i++) {
-                    Phase phase = (Phase) phases.get(i);
-                    if (phase.getPhaseName().equals(phaseName)) {
-                        handlers = new String[phase.getHandlerCount()];
-                        List hands = phase.getHandlers();
-                        for (int j = 0; j < hands.size(); j++) {
-                            Handler handler = (Handler) hands.get(j);
-                            handlers[j] = handler.getName();
-                        }
-                    }
-                }
-                break;
-            }
-            case PhaseMetadata.FAULT_IN_FLOW: {
-                ArrayList inflow = getAxisConfig().getInFaultFlowPhases();
-                for (int i = 0; i < inflow.size(); i++) {
-                    Phase phase = (Phase) inflow.get(i);
-                    if (phase.getPhaseName().equals(phaseName)) {
-                        handlers = new String[phase.getHandlerCount()];
-                        List hands = phase.getHandlers();
-                        for (int j = 0; j < hands.size(); j++) {
-                            Handler handler = (Handler) hands.get(j);
-                            handlers[j] = handler.getName();
-                        }
-                    }
-                }
-                break;
-            }
-            case PhaseMetadata.FAULT_OUT_FLOW: {
-                ArrayList inflow = getAxisConfig().getOutFaultFlowPhases();
-                for (int i = 0; i < inflow.size(); i++) {
-                    Phase phase = (Phase) inflow.get(i);
-                    if (phase.getPhaseName().equals(phaseName)) {
-                        handlers = new String[phase.getHandlerCount()];
-                        List hands = phase.getHandlers();
-                        for (int j = 0; j < hands.size(); j++) {
-                            Handler handler = (Handler) hands.get(j);
-                            handlers[j] = handler.getName();
-                        }
-                    }
-                }
-                break;
-            }
-        }
-        return handlers;
-    }
-
-    /**
-     * return only the parameters for explicitly set for this module (not including \
                inherited ones),
-     * where each parameter is an XML fragment representing the "parameter" element.
-     * Note: In this case (unlike module/service group etc.), there are no inherited \
                parameters.
-     */
-    public OMElement[] getDeclaredSystemParameters() throws AxisFault {
-        ArrayList parameters = getAxisConfig().getParameters();
-        OMElement[] paraElements = new OMElement[parameters.size()];
-
-        for (int i = 0; i < parameters.size(); i++) {
-            Parameter parameter = (Parameter) parameters.get(i);
-            paraElements[i] = parameter.getParameterElement();
-        }
-
-        return paraElements;
-    }
-
-    public void setSystemParameter(OMElement parameterElement) throws AxisFault {
-        Parameter parameter = ParameterUtil.createParameter(parameterElement);
-        getAxisConfig().addParameter(parameter);
-    }
-
-    /**
-     * List global phases
-     *
-     * @param flow
-     * @return Global phases
-     * @throws AxisFault
-     */
-    public String[] listGlobalPhases(int flow) throws AxisFault {
-        String[] phaseNames = null;
-
-        switch (flow) {
-            case PhaseMetadata.IN_FLOW: {
-                ArrayList inflow = getAxisConfig().getInFlowPhases();
-                phaseNames = new String[inflow.size()];
-
-                for (int i = 0; i < inflow.size(); i++) {
-                    Phase phase = (Phase) inflow.get(i);
-                    phaseNames[i] = phase.getPhaseName();
-                }
-
-                break;
-            }
-            case PhaseMetadata.OUT_FLOW: {
-                ArrayList inflow = getAxisConfig().getOutFlowPhases();
-                phaseNames = new String[inflow.size()];
-
-                for (int i = 0; i < inflow.size(); i++) {
-                    Phase phase = (Phase) inflow.get(i);
-                    phaseNames[i] = phase.getPhaseName();
-                }
-
-                break;
-            }
-            case PhaseMetadata.FAULT_IN_FLOW: {
-                ArrayList inflow = getAxisConfig().getInFaultFlowPhases();
-                phaseNames = new String[inflow.size()];
-
-                for (int i = 0; i < inflow.size(); i++) {
-                    Phase phase = (Phase) inflow.get(i);
-                    phaseNames[i] = phase.getPhaseName();
-                }
-
-                break;
-            }
-            case PhaseMetadata.FAULT_OUT_FLOW: {
-                ArrayList inflow = getAxisConfig().getOutFaultFlowPhases();
-                phaseNames = new String[inflow.size()];
-
-                for (int i = 0; i < inflow.size(); i++) {
-                    Phase phase = (Phase) inflow.get(i);
-                    phaseNames[i] = phase.getPhaseName();
-                }
-
-                break;
-            }
-        }
-        return phaseNames;
-    }
-
-    public boolean login(String username, String password) throws AxisFault {
-
-        MessageContext msgCtx = MessageContext.getCurrentMessageContext();
-
-        ServiceGroupContext sgCtx = msgCtx.getServiceGroupContext();
-        if ((username == null) || (password == null) ||
-            username.trim().equals("") || password.trim().equals("")) {
-            sgCtx.setProperty(ServerConstants.ADMIN_LOGGED_IN, "false");
-            return false;
-        }
-        boolean loggedIn =
-                new AdminAuthenticator().authenticate(username, password);
-        SimpleDateFormat date = new SimpleDateFormat("'['yyyy-MM-dd \
                HH:mm:ss,SSSS']'");
-        Date currentTime = Calendar.getInstance().getTime();
-        ServiceUserDO user = pm.getUser(username);
-        String remoteIP = (String) msgCtx.getProperty(MessageContext.REMOTE_ADDR);
-        if (loggedIn) {
-            sgCtx.setProperty(ServerConstants.ADMIN_LOGGED_IN, "true");
-            log.info("Administrator \'" + username + "' logged in at " + \
                date.format(currentTime) +
-                     " from IP address " + remoteIP);
-            if (user.getLastLoggedIn() != null) {
-                log.info("Last successful login at " + \
                date.format(user.getLastLoggedIn()) +
-                         " from IP Address " + user.getLastLoginIP());
-            }
-            if (user.getLastFailedLogIn() != null) {
-                log.info("Last failed login at " + \
                date.format(user.getLastFailedLogIn()) +
-                         " from IP Address " + user.getLastFailedLoginIP());
-            }
-            user.setLastLoggedIn(currentTime);
-            user.setLastLoginIP(remoteIP);
-            try {
-                pm.updateUser(user);
-            } catch (ServiceUserNotFoundException e) {
-                throw AxisFault.makeFault(e);
-            }
-            return true;
-        } else {
-            sgCtx.removeProperty(ServerConstants.ADMIN_LOGGED_IN);
-            if (user != null) {
-                log.warn("Failed login attempt by Administrator \'" + username + "\' \
                at " +
-                         date.format(currentTime) + " from IP address " + remoteIP);
-                user.setLastFailedLogIn(currentTime);
-                user.setLastFailedLoginIP(remoteIP);
-                try {
-                    pm.updateUser(user);
-                } catch (ServiceUserNotFoundException e) {
-                    throw AxisFault.makeFault(e);
-                }
-            } else {
-                log.warn("Failed Administrator login attempt by non-existent \
                Administrator \'" +
-                         username + "\' at " + date.format(currentTime) +
-                         " from IP address " + remoteIP);
-            }
-            return false;
-        }
-    }
-
-    public void serverRegistered() {
-        ConfigurationContext configCtx =
-                MessageContext.getCurrentMessageContext().getConfigurationContext();
-        configCtx.setProperty(ServerConstants.SERVER_REGISTERED, "true");
-        pm.updateConfigurationProperty(ServerConstants.SERVER_REGISTERED, "true");
-    }
-
-    public boolean isServerRegistered() {
-        ConfigurationContext configCtx =
-                MessageContext.getCurrentMessageContext().getConfigurationContext();
-        String serverReg = (String) \
                configCtx.getProperty(ServerConstants.SERVER_REGISTERED);
-
-        if (serverReg == null) {
-            serverReg = \
                pm.getConfigurationProperty(ServerConstants.SERVER_REGISTERED);
-            if (serverReg == null) {
-                serverReg = "false";
-                pm.updateConfigurationProperty(ServerConstants.SERVER_REGISTERED,
-                                               "false");
-                configCtx.setProperty(ServerConstants.SERVER_REGISTERED, "false");
-            }
-        }
-
-        return serverReg.equals("true");
-    }
-
-    public void logout() throws AxisFault {
-        MessageContext.getCurrentMessageContext().
-                getServiceGroupContext().getProperties().clear();
-    }
-
-    public boolean deployService(OMElement element) throws AxisFault {
-        try {
-            if (element == null) {
-                throw new AxisFault("Element is null");
-            }
-
-            String fileName = element.getLocalName();
-            OMNode node = element.getFirstOMChild();
-            if (node instanceof OMText) {
-                OMText txt = (OMText) node;
-                String repo = getAxisConfig().getRepository().getPath();
-                DataHandler expectedDH = (DataHandler) txt.getDataHandler();
-                File serviceDir = new File(repo, "services");
-                File file = new File(serviceDir, fileName);
-                OutputStream out = new FileOutputStream(file);
-                expectedDH.writeTo(out);
-                out.flush();
-                out.close();
-
-                return true;
-            } else {
-                throw new AxisFault("Invalid Message");
-            }
-        } catch (IOException e) {
-            throw AxisFault.makeFault(e);
-        }
-    }
-
-    public boolean deployModule(OMElement element) throws AxisFault {
-        try {
-            if (element == null) {
-                throw new AxisFault("Element null");
-            }
-
-            String fileName = element.getLocalName();
-            OMNode node = element.getFirstOMChild();
-
-            if (node instanceof OMText) {
-                OMText txt = (OMText) node;
-                String repo = getAxisConfig().getRepository().getPath();
-                DataHandler expectedDH = (DataHandler) txt.getDataHandler();
-                File moduleDir = new File(repo, "modules");
-                File file = new File(moduleDir, fileName);
-                OutputStream out = new FileOutputStream(file);
-                expectedDH.writeTo(out);
-                out.flush();
-                out.close();
-
-                AxisModule module =
-                        DeploymentEngine.buildModule(file, getAxisConfig());
-                getAxisConfig().addModule(module);
-
-                return true;
-            } else {
-                throw new AxisFault("Invalid Message");
-            }
-        } catch (IOException e) {
-            throw AxisFault.makeFault(e);
-        }
-    }
-
-    public OMElement getPolicy() throws AxisFault {
-        PolicyInclude globalPolicyInclude = getAxisConfig().getPolicyInclude();
-        Policy globalPolicy = globalPolicyInclude.getPolicy();
-
-        if (globalPolicy == null) {
-            return PolicyUtil.getEmptyPolicyAsOMElement();
-        }
-
-        return PolicyUtil.getPolicyAsOMElement(globalPolicy);
-    }
-
-    public void setPolicy(OMElement policyElement) throws AxisFault {
-        Policy globalPolicy;
-
-        try {
-            globalPolicy = PolicyUtil.getPolicyFromOMElement(policyElement);
-        } catch (Exception ex) {
-            throw new AxisFault("Cannot convert the OMElement to Policy", ex);
-        }
-
-        PolicyInclude globalPolicyInclude = getAxisConfig().getPolicyInclude();
-        globalPolicyInclude.setPolicy(globalPolicy);
-    }
-
-    /**
-     * This has used to test if the server is availabele and the current admins \
                login status.
-     *
-     * @return boolean
-     */
-    public boolean ping() {
-        MessageContext msgCtx = MessageContext.getCurrentMessageContext();
-        ServiceGroupContext serviceGroupContext = msgCtx.getServiceGroupContext();
-        Object property = \
                serviceGroupContext.getProperty(ServerConstants.ADMIN_LOGGED_IN);
-        if (property == null) {
-            return false;
-        } else {
-            String status = (String) property;
-            return JavaUtils.isTrue(status);
-        }
+	/**
+	 * Restore the default system settings and override all the changes
+	 * persisted in the database. Please note that this is possible only for the
+	 * default database included with WSO2 WSAS
+	 */
+	public void restoreDefaults() {
+		pm.restoreDefaults();
+	}
+
+	/**
+	 * List handlers in a given phase (global)
+	 * 
+	 * @param flow
+	 * @param phaseName
+	 * @return list of global phase handlers as a String[].
+	 * @throws AxisFault
+	 */
+	public String[] listGlobalPhaseHandlers(int flow, String phaseName)
+			throws AxisFault {
+		String[] handlers = null;
+		switch (flow) {
+		case PhaseMetadata.IN_FLOW: {
+			ArrayList inflow = getAxisConfig().getInFlowPhases();
+			for (int i = 0; i < inflow.size(); i++) {
+				Phase phase = (Phase) inflow.get(i);
+				if (phase.getPhaseName().equals(phaseName)) {
+					handlers = new String[phase.getHandlerCount()];
+					List hands = phase.getHandlers();
+					for (int j = 0; j < hands.size(); j++) {
+						Handler handler = (Handler) hands.get(j);
+						handlers[j] = handler.getName();
+					}
+				}
+			}
+			break;
+		}
+		case PhaseMetadata.OUT_FLOW: {
+			ArrayList phases = getAxisConfig().getOutFlowPhases();
+			for (int i = 0; i < phases.size(); i++) {
+				Phase phase = (Phase) phases.get(i);
+				if (phase.getPhaseName().equals(phaseName)) {
+					handlers = new String[phase.getHandlerCount()];
+					List hands = phase.getHandlers();
+					for (int j = 0; j < hands.size(); j++) {
+						Handler handler = (Handler) hands.get(j);
+						handlers[j] = handler.getName();
+					}
+				}
+			}
+			break;
+		}
+		case PhaseMetadata.FAULT_IN_FLOW: {
+			ArrayList inflow = getAxisConfig().getInFaultFlowPhases();
+			for (int i = 0; i < inflow.size(); i++) {
+				Phase phase = (Phase) inflow.get(i);
+				if (phase.getPhaseName().equals(phaseName)) {
+					handlers = new String[phase.getHandlerCount()];
+					List hands = phase.getHandlers();
+					for (int j = 0; j < hands.size(); j++) {
+						Handler handler = (Handler) hands.get(j);
+						handlers[j] = handler.getName();
+					}
+				}
+			}
+			break;
+		}
+		case PhaseMetadata.FAULT_OUT_FLOW: {
+			ArrayList inflow = getAxisConfig().getOutFaultFlowPhases();
+			for (int i = 0; i < inflow.size(); i++) {
+				Phase phase = (Phase) inflow.get(i);
+				if (phase.getPhaseName().equals(phaseName)) {
+					handlers = new String[phase.getHandlerCount()];
+					List hands = phase.getHandlers();
+					for (int j = 0; j < hands.size(); j++) {
+						Handler handler = (Handler) hands.get(j);
+						handlers[j] = handler.getName();
+					}
+				}
+			}
+			break;
+		}
+		}
+		return handlers;
+	}
+
+	/**
+	 * return only the parameters for explicitly set for this module (not
+	 * including inherited ones), where each parameter is an XML fragment
+	 * representing the "parameter" element. Note: In this case (unlike
+	 * module/service group etc.), there are no inherited parameters.
+	 */
+	public OMElement[] getDeclaredSystemParameters() throws AxisFault {
+		ArrayList parameters = getAxisConfig().getParameters();
+		OMElement[] paraElements = new OMElement[parameters.size()];
+
+		for (int i = 0; i < parameters.size(); i++) {
+			Parameter parameter = (Parameter) parameters.get(i);
+			paraElements[i] = parameter.getParameterElement();
+		}
+
+		return paraElements;
+	}
+
+	public void setSystemParameter(OMElement parameterElement) throws AxisFault {
+		Parameter parameter = ParameterUtil.createParameter(parameterElement);
+		getAxisConfig().addParameter(parameter);
+	}
+
+	/**
+	 * List global phases
+	 * 
+	 * @param flow
+	 * @return Global phases
+	 * @throws AxisFault
+	 */
+	public String[] listGlobalPhases(int flow) throws AxisFault {
+		String[] phaseNames = null;
+
+		switch (flow) {
+		case PhaseMetadata.IN_FLOW: {
+			ArrayList inflow = getAxisConfig().getInFlowPhases();
+			phaseNames = new String[inflow.size()];
+
+			for (int i = 0; i < inflow.size(); i++) {
+				Phase phase = (Phase) inflow.get(i);
+				phaseNames[i] = phase.getPhaseName();
+			}
+
+			break;
+		}
+		case PhaseMetadata.OUT_FLOW: {
+			ArrayList inflow = getAxisConfig().getOutFlowPhases();
+			phaseNames = new String[inflow.size()];
+
+			for (int i = 0; i < inflow.size(); i++) {
+				Phase phase = (Phase) inflow.get(i);
+				phaseNames[i] = phase.getPhaseName();
+			}
+
+			break;
+		}
+		case PhaseMetadata.FAULT_IN_FLOW: {
+			ArrayList inflow = getAxisConfig().getInFaultFlowPhases();
+			phaseNames = new String[inflow.size()];
+
+			for (int i = 0; i < inflow.size(); i++) {
+				Phase phase = (Phase) inflow.get(i);
+				phaseNames[i] = phase.getPhaseName();
+			}
+
+			break;
+		}
+		case PhaseMetadata.FAULT_OUT_FLOW: {
+			ArrayList inflow = getAxisConfig().getOutFaultFlowPhases();
+			phaseNames = new String[inflow.size()];
+
+			for (int i = 0; i < inflow.size(); i++) {
+				Phase phase = (Phase) inflow.get(i);
+				phaseNames[i] = phase.getPhaseName();
+			}
+
+			break;
+		}
+		}
+		return phaseNames;
+	}
+
+	public boolean login(String username, String password) throws AxisFault {
+
+		MessageContext msgCtx = MessageContext.getCurrentMessageContext();
+
+		ServiceGroupContext sgCtx = msgCtx.getServiceGroupContext();
+		if ((username == null) || (password == null)
+				|| username.trim().equals("") || password.trim().equals("")) {
+			sgCtx.setProperty(ServerConstants.ADMIN_LOGGED_IN, "false");
+			return false;
+		}
+		boolean loggedIn = new AdminAuthenticator().authenticate(username,
+				password);
+		SimpleDateFormat date = new SimpleDateFormat(
+				"'['yyyy-MM-dd HH:mm:ss,SSSS']'");
+		Date currentTime = Calendar.getInstance().getTime();
+		ServiceUserDO user = pm.getUser(username);
+		String remoteIP = (String) msgCtx
+				.getProperty(MessageContext.REMOTE_ADDR);
+		if (loggedIn) {
+			sgCtx.setProperty(ServerConstants.ADMIN_LOGGED_IN, "true");
+			log
+					.info("Administrator \'" + username + "' logged in at "
+							+ date.format(currentTime) + " from IP address "
+							+ remoteIP);
+			if (user.getLastLoggedIn() != null) {
+				log.info("Last successful login at "
+						+ date.format(user.getLastLoggedIn())
+						+ " from IP Address " + user.getLastLoginIP());
+			}
+			if (user.getLastFailedLogIn() != null) {
+				log.info("Last failed login at "
+						+ date.format(user.getLastFailedLogIn())
+						+ " from IP Address " + user.getLastFailedLoginIP());
+			}
+			user.setLastLoggedIn(currentTime);
+			user.setLastLoginIP(remoteIP);
+			try {
+				pm.updateUser(user);
+			} catch (ServiceUserNotFoundException e) {
+				throw AxisFault.makeFault(e);
+			}
+			return true;
+		} else {
+			sgCtx.removeProperty(ServerConstants.ADMIN_LOGGED_IN);
+			if (user != null) {
+				log.warn("Failed login attempt by Administrator \'" + username
+						+ "\' at " + date.format(currentTime)
+						+ " from IP address " + remoteIP);
+				user.setLastFailedLogIn(currentTime);
+				user.setLastFailedLoginIP(remoteIP);
+				try {
+					pm.updateUser(user);
+				} catch (ServiceUserNotFoundException e) {
+					throw AxisFault.makeFault(e);
+				}
+			} else {
+				log
+						.warn("Failed Administrator login attempt by non-existent Administrator \'"
+								+ username
+								+ "\' at "
+								+ date.format(currentTime)
+								+ " from IP address " + remoteIP);
+			}
+			return false;
+		}
+	}
+
+	public void serverRegistered() {
+		ConfigurationContext configCtx = MessageContext
+				.getCurrentMessageContext().getConfigurationContext();
+		configCtx.setProperty(ServerConstants.SERVER_REGISTERED, "true");
+		pm.updateConfigurationProperty(ServerConstants.SERVER_REGISTERED,
+				"true");
+	}
+
+	public boolean isServerRegistered() {
+		ConfigurationContext configCtx = MessageContext
+				.getCurrentMessageContext().getConfigurationContext();
+		String serverReg = (String) configCtx
+				.getProperty(ServerConstants.SERVER_REGISTERED);
+
+		if (serverReg == null) {
+			serverReg = pm
+					.getConfigurationProperty(ServerConstants.SERVER_REGISTERED);
+			if (serverReg == null) {
+				serverReg = "false";
+				pm.updateConfigurationProperty(
+						ServerConstants.SERVER_REGISTERED, "false");
+				configCtx.setProperty(ServerConstants.SERVER_REGISTERED,
+						"false");
+			}
+		}
+
+		return serverReg.equals("true");
+	}
+
+	public void logout() throws AxisFault {
+		MessageContext.getCurrentMessageContext().getServiceGroupContext()
+				.getProperties().clear();
+	}
+
+	public boolean deployService(OMElement element) throws AxisFault {
+		try {
+			if (element == null) {
+				throw new AxisFault("Element is null");
+			}
+
+			String fileName = element.getLocalName();
+			OMNode node = element.getFirstOMChild();
+			if (node instanceof OMText) {
+				OMText txt = (OMText) node;
+				String repo = getAxisConfig().getRepository().getPath();
+				DataHandler expectedDH = (DataHandler) txt.getDataHandler();
+				File serviceDir = new File(repo, "services");
+				File file = new File(serviceDir, fileName);
+				OutputStream out = new FileOutputStream(file);
+				expectedDH.writeTo(out);
+				out.flush();
+				out.close();
+
+				return true;
+			} else {
+				throw new AxisFault("Invalid Message");
+			}
+		} catch (IOException e) {
+			throw AxisFault.makeFault(e);
+		}
+	}
+
+	public boolean deployModule(OMElement element) throws AxisFault {
+		try {
+			if (element == null) {
+				throw new AxisFault("Element null");
+			}
+
+			String fileName = element.getLocalName();
+			OMNode node = element.getFirstOMChild();
+
+			if (node instanceof OMText) {
+				OMText txt = (OMText) node;
+				String repo = getAxisConfig().getRepository().getPath();
+				DataHandler expectedDH = (DataHandler) txt.getDataHandler();
+				File moduleDir = new File(repo, "modules");
+				File file = new File(moduleDir, fileName);
+				OutputStream out = new FileOutputStream(file);
+				expectedDH.writeTo(out);
+				out.flush();
+				out.close();
+
+				AxisModule module = DeploymentEngine.buildModule(file,
+						getAxisConfig());
+				getAxisConfig().addModule(module);
+
+				return true;
+			} else {
+				throw new AxisFault("Invalid Message");
+			}
+		} catch (IOException e) {
+			throw AxisFault.makeFault(e);
+		}
+	}
+
+	public OMElement getPolicy() throws AxisFault {
+		PolicySubject globalPolicySubject = getAxisConfig().getPolicySubject();
+		ArrayList policyList = new ArrayList(globalPolicySubject
+				.getAttachedPolicyComponents());
+		Policy globalPolicy = org.apache.axis2.util.PolicyUtil.getMergedPolicy(
+				policyList, getAxisConfig());
+
+		if (globalPolicy == null) {
+			return PolicyUtil.getEmptyPolicyAsOMElement();
+		}
+
+		return PolicyUtil.getPolicyAsOMElement(globalPolicy);
+	}
+
+	public void setPolicy(OMElement policyElement) throws AxisFault {
+		Policy globalPolicy;
+
+		try {
+			globalPolicy = PolicyUtil.getPolicyFromOMElement(policyElement);
+		} catch (Exception ex) {
+			throw new AxisFault("Cannot convert the OMElement to Policy", ex);
+		}
+
+		PolicySubject globalPolicySubject = getAxisConfig().getPolicySubject();
+		globalPolicySubject.attachPolicy(globalPolicy);
+	}
+
+	/**
+	 * This has used to test if the server is availabele and the current admins
+	 * login status.
+	 * 
+	 * @return boolean
+	 */
+	public boolean ping() {
+		MessageContext msgCtx = MessageContext.getCurrentMessageContext();
+		ServiceGroupContext serviceGroupContext = msgCtx
+				.getServiceGroupContext();
+		Object property = serviceGroupContext
+				.getProperty(ServerConstants.ADMIN_LOGGED_IN);
+		if (property == null) {
+			return false;
+		} else {
+			String status = (String) property;
+			return JavaUtils.isTrue(status);
+		}
 
-    }
+	}
 }

Modified: trunk/wsas/java/modules/admin/src/org/wso2/wsas/admin/service/SecurityScenarioConfigAdmin.java
 ==============================================================================
--- trunk/wsas/java/modules/admin/src/org/wso2/wsas/admin/service/SecurityScenarioConfigAdmin.java	(original)
                
+++ trunk/wsas/java/modules/admin/src/org/wso2/wsas/admin/service/SecurityScenarioConfigAdmin.java	Sun \
Apr  6 21:31:26 2008 @@ -145,9 +145,8 @@
                 policy.addAssertion(rampartConfig);
             }
             AxisService axisService = getAxisConfig().getService(serviceName);
-            axisService.getPolicyInclude().addPolicyElement(PolicyInclude.AXIS_SERVICE_POLICY,
                
-                                                            policy);
-
+            axisService.getPolicySubject().attachPolicy(policy);
+            
             // When there is a transport binding sec policy assertion,
             // the service should be exposed only via HTTPS
             Iterator alternatives = policy.getAlternatives();

Modified: trunk/wsas/java/modules/admin/src/org/wso2/wsas/admin/service/ServiceAdmin.java
 ==============================================================================
--- trunk/wsas/java/modules/admin/src/org/wso2/wsas/admin/service/ServiceAdmin.java	(original)
                
+++ trunk/wsas/java/modules/admin/src/org/wso2/wsas/admin/service/ServiceAdmin.java	Sun \
Apr  6 21:31:26 2008 @@ -26,16 +26,19 @@
 import org.apache.axis2.Constants;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.description.AxisEndpoint;
 import org.apache.axis2.description.AxisOperation;
 import org.apache.axis2.description.AxisService;
 import org.apache.axis2.description.AxisServiceGroup;
 import org.apache.axis2.description.Parameter;
 import org.apache.axis2.description.PolicyInclude;
+import org.apache.axis2.description.PolicySubject;
 import org.apache.axis2.description.TransportInDescription;
 import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver;
 import org.apache.axis2.rpc.receivers.RPCMessageReceiver;
 import org.apache.axis2.rpc.receivers.ejb.EJBUtil;
+import org.apache.axis2.util.PolicyLocator;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.neethi.Policy;
@@ -108,1960 +111,2021 @@
  * Admin service to manage services
  */
 public class ServiceAdmin extends AbstractAdmin implements ServiceAdminMBean {
-    private static final Log log = LogFactory.getLog(ServiceAdmin.class);
+	private static final Log log = LogFactory.getLog(ServiceAdmin.class);
 
-    private static final String SERVICE_MUST_CONTAIN_AT_LEAST_ONE_TRANSPORT =
-            "Cannot remove transport binding. " +
-            "<br/>A service must contain at least one transport binding!";
-    private PersistenceManager pm = new PersistenceManager();
-
-    static {
-        MBeanRegistrar.registerMBean(new ServiceAdmin());
-    }
-
-    public ServiceAdmin() {
-    }
-
-    /**
-     * Expose this service only via the specified transport
-     *
-     * @param serviceId
-     * @param transportProtocols
-     * @return Status Message
-     * @throws AxisFault
-     */
-    public String exposeServiceOnlyViaTransports(String serviceId,
-                                                 String[] transportProtocols) throws \
                AxisFault {
-
-        AxisService axisService = getAxisConfig().getService(serviceId);
-        ArrayList transports = new ArrayList();
-        for (int i = 0; i < transportProtocols.length; i++) {
-            transports.add(transportProtocols[i]);
-        }
-        axisService.setExposedTransports(transports);
-
-        ServiceDO serviceDO = pm.getService(axisService.getName(),
-                                            \
                ServiceIdentifierDO.EMPTY_SERVICE_VERSION);
-        serviceDO.setIsExposedOnAllTransports(false);
-
-        TransportDO[] transportDOs = pm.getTransports();
-        for (int i = 0; i < transportDOs.length; i++) { // Remove all transports
-            serviceDO.getTransports().remove(transportDOs[i]);
-        }
-        for (int i = 0; i < transportProtocols.length; i++) {
-            TransportDO transportDO = pm.getTransport(transportProtocols[i]);
-            serviceDO.addTransport(transportDO); // add only specified transports
-            pm.updateEntity(transportDO);
-        }
-
-        try {
-            pm.updateService(serviceDO);
-        } catch (ServiceNotFoundException e) {
-            String msg = "Service with name " + serviceId + " not found.";
-            log.error(msg);
-            throw new AxisFault(msg, e);
-        }
-        return "Successfully add selected transport bindings to service " + \
                serviceId;
-    }
-
-    public String addTransportBinding(String serviceId,
-                                      String transportProtocol) throws AxisFault {
-        if (transportProtocol == null || transportProtocol.trim().length() == 0) {
-            return "Invalid transport " + transportProtocol;
-        }
-        AxisService axisService = getAxisConfig().getService(serviceId);
-
-        if (axisService.isExposedTransport(transportProtocol)) {
-            return "Service [" + serviceId + "] already contains the " + \
                transportProtocol +
-                   " transport binding!";
-        }
-
-        ServiceDO serviceDO = pm.getService(axisService.getName(),
-                                            \
                ServiceIdentifierDO.EMPTY_SERVICE_VERSION);
-        if (serviceDO.getIsUTAuthEnabled()) {
-            if (!transportProtocol.equalsIgnoreCase(ServerConstants.HTTPS_TRANSPORT)) \
                {
-                throw new AxisFault("Cannot add non-HTTPS transport binding for \
                Service [" +
-                                    serviceId + "] since a security scenario which \
                requires the " +
-                                    "service to contain only the HTTPS transport \
                binding" +
-                                    " has been applied to this service.");
-            }
-        }
-
-        if (!axisService.isEnableAllTransports()) {
-            axisService.addExposedTransport(transportProtocol);
-        } else {
-            return "Service [" + serviceId + "] already contains the " + \
                transportProtocol +
-                   " transport binding!";
-        }
-
-        TransportDO transportDO = pm.getTransport(transportProtocol);
-        if (transportDO != null) {
-            serviceDO.setIsExposedOnAllTransports(false);
-            serviceDO.addTransport(transportDO);
-
-            try {
-                pm.updateService(serviceDO);
-                pm.updateEntity(transportDO);
-            } catch (ServiceNotFoundException e) {
-                String msg = "Service with name " + serviceId + " not found.";
-                log.error(msg);
-                throw new AxisFault(msg, e);
-            }
-        }
-
-        return "Successfully added " + transportProtocol + " transport binding to \
                service " +
-               serviceId;
-    }
-
-    public String removeTransportBinding(String serviceId,
-                                         String transportProtocol) throws AxisFault \
                {
-
-        AxisService axisService = getAxisConfig().getService(serviceId);
-        ServiceDO serviceDO = pm.getService(axisService.getName(),
-                                            \
                ServiceIdentifierDO.EMPTY_SERVICE_VERSION);
-        if (serviceDO.getIsUTAuthEnabled()) {
-            if (transportProtocol.equalsIgnoreCase(ServerConstants.HTTPS_TRANSPORT)) \
                {
-                throw new AxisFault("HTTPS transport binding for Service [" + \
                serviceId +
-                                    "] cannot be removed since a security scenario \
                which requires" +
-                                    " HTTPS has been applied to this service.");
-            }
-        }
-        TransportDO transportDO = pm.getTransport(transportProtocol);
-        if (!axisService.isEnableAllTransports()) {
-            if (axisService.getExposedTransports().size() == 1) {
-                return SERVICE_MUST_CONTAIN_AT_LEAST_ONE_TRANSPORT;
-            } else {
-                serviceDO.getTransports().remove(transportDO);
-                transportDO.getServices().remove(serviceDO);
-                axisService.removeExposedTransport(transportProtocol);
-                pm.updateEntity(transportDO);
-            }
-        } else {
-            TransportSummary[] transports = new TransportAdmin().listTransports();
-
-            if (transports.length == 1) {
-                return SERVICE_MUST_CONTAIN_AT_LEAST_ONE_TRANSPORT;
-            } else {
-                for (int i = 0; i < transports.length; i++) {
-                    String protocol = transports[i].getProtocol();
-
-                    if (!protocol.equals(transportProtocol)) {
-                        axisService.addExposedTransport(protocol);
-                        TransportDO addTransportDO = pm.getTransport(protocol);
-                        serviceDO.addTransport(addTransportDO);
-                        pm.updateEntity(addTransportDO);
-                    }
-                }
-            }
-        }
-
-        serviceDO.setIsExposedOnAllTransports(false);
-        try {
-            pm.updateService(serviceDO);
-        } catch (ServiceNotFoundException e) {
-            String msg = "Service with name " + serviceId + " not found.";
-            log.error(msg);
-            throw new AxisFault(msg, e);
-        }
-
-        return "Removed " + transportProtocol + " transport binding for " + \
                serviceId + " service";
-    }
-
-    public String[] getExposedTransports(String serviceId) throws AxisFault {
-        AxisService axisService = getAxisConfig().getService(serviceId);
-        if (!axisService.isEnableAllTransports()) {
-            List exposedTransports = axisService.getExposedTransports();
-            return (String[]) exposedTransports.toArray(new \
                String[exposedTransports.size()]);
-        } else {
-            HashMap transportsIn = getConfigContext().getAxisConfiguration()
-                    .getTransportsIn();
-            String[] transports = new String[transportsIn.size()];
-            int i = 0;
-
-            for (Iterator transportsIter = transportsIn.values().iterator();
-                 transportsIter.hasNext();) {
-                TransportInDescription tiDesc = (TransportInDescription) \
                transportsIter.next();
-                transports[i++] = tiDesc.getName();
-            }
-
-            return transports;
-        }
-    }
-
-    public void creatService(String serviceName) throws AxisFault {
-        AxisService service = AxisService.createService(serviceName,
-                                                        getAxisConfig());
-        getAxisConfig().addService(service);
-    }
-
-    public void stopService(String serviceName) throws Exception {
-        AxisService axisService = \
                getAxisConfig().getServiceForActivation(serviceName);
-        if (axisService == null) {
-            throw new Exception("Invalid service name " + serviceName);
-        }
-
-        try {
-            getAxisConfig().stopService(serviceName);
-        } catch (AxisFault e) {
-            String msg = "Cannot stop service " + serviceName;
-            log.error(msg, e);
-            throw new Exception(msg);
-        }
-    }
-
-    /* public String[] getActiveEndPoints() {
-List endpoints = new ArrayList();
-for (Iterator iter = getAxisConfig().getServices().values().iterator(); \
                iter.hasNext();) {
-AxisService service = (AxisService) iter.next();
-if (service.isActive()) {
-    *//* String[] eprs;
-                try {
-                    eprs = service.getEPRs();
-                } catch (AxisFault e) {
-                    throw new RuntimeException("Cannot get service EPRs", e);
-                }
-                for (int i = 0; i < eprs.length; i++) {
-                    String epr = eprs[i];
-                    if (!endpoints.contains(epr)) {
-                        endpoints.add(epr);
-                    }
-                }*//*
-
-                for (Iterator endpointIter = \
                service.getEndpoints().values().iterator();
-                     endpointIter.hasNext();) {
-                    AxisEndpoint axisEndpoint = (AxisEndpoint) endpointIter.next();
-                    String binding = axisEndpoint.getBinding().getName().toString();
-                    String epr = axisEndpoint.getEndpointURL();
-
-                    endpoints.add(epr + " [" + binding + "]");
-
-                }
-            }
-        }
-        return (String[]) endpoints.toArray(new String[endpoints.size()]);
-    }
-*/
-
-    public int getNumberOfActiveServices() throws Exception {
-        int activeServices = 0;
-        HashMap services = getAxisConfig().getServices();
-        for (Iterator iterator = services.values().iterator(); iterator.hasNext();) \
                {
-            AxisService service = (AxisService) iterator.next();
-            if (service.isActive()) {
-                activeServices++;
-            }
-        }
-        return activeServices;
-    }
-
-    public int getNumberOfInactiveServices() throws Exception {
-        int inactiveServices = 0;
-        HashMap services = getAxisConfig().getServices();
-        for (Iterator iterator = services.values().iterator(); iterator.hasNext();) \
                {
-            AxisService service = (AxisService) iterator.next();
-            if (!service.isActive()) {
-                inactiveServices++;
-            }
-        }
-        return inactiveServices;
-    }
-
-    public void startService(String serviceName) throws Exception {
-        AxisService axisService = \
                getAxisConfig().getServiceForActivation(serviceName);
-
-        if (axisService == null) {
-            throw new Exception("Invalid service name " + serviceName);
-        }
-        try {
-            getAxisConfig().startService(serviceName);
-        } catch (AxisFault e) {
-            String msg = "Cannot start service " + serviceName;
-            log.error(msg, e);
-            throw new Exception(msg);
-        }
-    }
-
-    private String[] getServiceEPRs(AxisService service) throws AxisFault {
-        if (!service.isActive()) {
-            return new String[]{"Service is inactive. No valid end point \
                references."};
-        }
-        return service.getEPRs();
-    }
-
-    public ServiceMetaData getServiceData(String serviceName) throws AxisFault {
-        AxisService service = getAxisConfig().getServiceForActivation(serviceName);
-        Parameter serviceTypeParam = \
                service.getParameter(ServerConstants.SERVICE_TYPE);
-        String serviceType;
-        if (serviceTypeParam != null) {
-            serviceType = (String) serviceTypeParam.getValue();
-        } else {
-            serviceType = "Normal";
-        }
-        List ops = new ArrayList();
-        for (Iterator opIter = service.getOperations(); opIter.hasNext();) {
-            AxisOperation axisOperation = (AxisOperation) opIter.next();
-
-            if (axisOperation.getName() != null) {
-                ops.add(axisOperation.getName().getLocalPart());
-            }
-        }
-
-        ServiceMetaData smd = new ServiceMetaData();
-
-        try {
-            StatisticsClient statClient = new StatisticsClient();
-            smd.setServiceRequestCount(statClient.getServiceRequestCount(serviceName));
                
-            smd.setServiceResponseCount(statClient.getServiceResponseCount(serviceName));
                
-            smd.setServiceFaultCount(statClient.getServiceFaultCount(serviceName));
-            smd.setMaxResponseTime(statClient.getMaxServiceResponseTime(serviceName));
                
-            smd.setMinResponseTime(statClient.getMinServiceResponseTime(serviceName));
                
-            smd.setAvgResponseTime(statClient.getAvgServiceResponseTime(serviceName));
                
-        } catch (Exception e) {
-            String msg = "Could not get service statistics";
-            log.error(msg, e);
-            throw new AxisFault(msg, e);
-        }
-
-        smd.setOperations((String[]) ops.toArray(new String[ops.size()]));
-        smd.setName(serviceName);
-        smd.setServiceId(serviceName);
-        smd.setServiceVersion("");
-        smd.setActive(service.isActive());
-        smd.setEprs(getServiceEPRs(service));
-        smd.setServiceType(serviceType);
-        AxisServiceGroup serviceGroup = (AxisServiceGroup) service.getParent();
-        smd.setFoundWebResources(serviceGroup.isFoundWebResources());
-        smd.setScope(service.getScope());
-        smd.setServiceGroupName(serviceGroup.getServiceGroupName());
-
-        if (service.getDocumentation() != null) {
-            smd.setDescription(service.getDocumentation());
-        } else {
-            smd.setDescription("No service description found");
-        }
-
-        Parameter parameter = \
                service.getParameter(Constants.Configuration.ENABLE_MTOM);
-        if (parameter != null) {
-            smd.setEnableMTOM((String) parameter.getValue());
-        } else {
-            smd.setEnableMTOM("false");
-        }
-
-        return smd;
-    }
-
-    /**
-     * set the service parameter enableMTOM to manipulate MTOM flag \
                true/false/optional
-     *
-     * @param flag
-     * @param serviceName
-     */
-    public void configureMTOM(String flag, String serviceName) throws AxisFault {
-
-        AxisService service = getAxisConfig().getService(serviceName);
-        if (service == null) {
-            throw new AxisFault("AxisService " + serviceName + " cannot be found.");
-        }
-
-        ArrayList parameters = service.getParameters();
-
-        boolean found = false;
-        for (Iterator iterator = parameters.iterator(); iterator.hasNext();) {
-            Parameter parameter = (Parameter) iterator.next();
-
-            if (parameter.getParameterType() == Parameter.TEXT_PARAMETER &&
-                parameter.getValue().toString().equals(Constants.Configuration.ENABLE_MTOM)) \
                {
-                parameter.setValue(flag.trim());
-                found = true;
-                break;
-            }
-
-        }
-        if (!found) {
-            Parameter parameter = ParameterUtil
-                    .createParameter(Constants.Configuration.ENABLE_MTOM, \
                flag.trim());
-            service.addParameter(parameter);
-        }
-
-        Parameter parameter = \
                service.getParameter(Constants.Configuration.ENABLE_MTOM);
-        for (Iterator iterator1 = service.getOperations(); iterator1.hasNext();) {
-            AxisOperation axisOperation = (AxisOperation) iterator1.next();
-            axisOperation.addParameter(ParameterUtil.createParameter(
-                    Constants.Configuration.ENABLE_MTOM, (String) \
                parameter.getValue()));
-        }
-        ServiceDO serviceDO = pm.getService(serviceName,
-                                            \
                ServiceIdentifierDO.EMPTY_SERVICE_VERSION);
-        ServiceParameterDO paramDO = pm.getServiceParameter(serviceDO,
-                                                            parameter.getName());
-        if (paramDO != null) {
-            paramDO.setValue(parameter.getParameterElement().toString());
-            pm.updateEntity(paramDO);
-        } else {
-            ServiceParameterDO param = new ServiceParameterDO();
-            param.setName(parameter.getName());
-            param.setValue(parameter.getParameterElement().toString());
-            param.setService(serviceDO);
-
-            try {
-                pm.addEntity(param);
-            } catch (DuplicateEntityException e) {
-                log.error("Service Parameter already exists", e);
-            }
-
-        }
-
-
-        OperationDO[] operationDOs = pm.getOperations(serviceDO);
-        if (operationDOs != null) {
-            for (int j = 0; j < operationDOs.length; j++) {
-                OperationDO operationDO = operationDOs[j];
-                OperationParameterDO[] operationParameterDOs =
-                        pm.getOperationParameters(operationDO);
-                OperationParameterDO operationParameterDO = null;
-                for (int k = 0; k < operationParameterDOs.length; k++) {
-                    if \
                (operationParameterDOs[k].getName().equals(parameter.getName())) {
-                        operationParameterDO = operationParameterDOs[k];
-                        break;
-                    }
-                }
-                if (operationParameterDO != null) {
-                    operationParameterDO
-                            .setValue(parameter.getParameterElement().toString());
-                    pm.updateEntity(operationParameterDO);
-                } else {
-                    operationParameterDO = new OperationParameterDO();
-                    operationParameterDO.setName(parameter.getName());
-                    operationParameterDO
-                            .setValue(parameter.getParameterElement().toString());
-                    operationParameterDO.setOperation(operationDO);
-                    try {
-                        pm.addEntity(operationParameterDO);
-                    } catch (DuplicateEntityException e) {
-                        log.error("Service Parameter already exists", e);
-                    }
-
-                }
-
-            }
-        }
-    }
-
-    /**
-     * @param serviceGroupId
-     * @return list of services
-     * @throws AxisFault
-     */
-    public ServiceMetaData[] listServices(String serviceGroupId) throws AxisFault {
-        AxisServiceGroup asg = getAxisConfig().getServiceGroup(serviceGroupId);
-        List services = new ArrayList();
-
-        if (asg == null) {
-            throw new AxisFault("Invalid service group name");
-        } else {
-            for (Iterator serviceIter = asg.getServices(); serviceIter.hasNext();) {
-                AxisService axisService = (AxisService) serviceIter.next();
-                Parameter serviceTypeParam = \
                axisService.getParameter(ServerConstants.SERVICE_TYPE);
-                String serviceType;
-                if (serviceTypeParam != null) {
-                    serviceType = (String) serviceTypeParam.getValue();
-                } else {
-                    serviceType = "Normal";
-                }
-                List ops = new ArrayList();
-                for (Iterator opIter = axisService.getOperations(); \
                opIter.hasNext();) {
-                    AxisOperation axisOperation = (AxisOperation) opIter.next();
-                    ops.add(axisOperation.getName().getLocalPart());
-                }
-
-                ServiceMetaData smd = new ServiceMetaData();
-                String serviceName = axisService.getName();
-                try {
-                    StatisticsClient statClient = new StatisticsClient();
-                    \
                smd.setServiceRequestCount(statClient.getServiceRequestCount(serviceName));
                
-                    \
                smd.setServiceResponseCount(statClient.getServiceResponseCount(serviceName));
                
-                    \
                smd.setServiceFaultCount(statClient.getServiceFaultCount(serviceName));
                
-                    \
                smd.setMaxResponseTime(statClient.getMaxServiceResponseTime(serviceName));
                
-                    \
                smd.setMinResponseTime(statClient.getMinServiceResponseTime(serviceName));
                
-                    \
                smd.setAvgResponseTime(statClient.getAvgServiceResponseTime(serviceName));
                
-                } catch (Exception e) {
-                    throw AxisFault.makeFault(e);
-                }
-                smd.setOperations((String[]) ops.toArray(new String[ops.size()]));
-                smd.setName(serviceName);
-                smd.setServiceId(serviceName);
-                smd.setEprs(getServiceEPRs(axisService));
-                smd.setServiceVersion("");
-                smd.setActive(axisService.isActive());
-                smd.setServiceType(serviceType);
-                smd.setDescription(axisService.getDocumentation());
-                services.add(smd);
-            }
-        }
-        Collections.sort(services, new Comparator() {
-            public int compare(Object arg0, Object arg1) {
-                ServiceMetaData a = (ServiceMetaData) arg0;
-                ServiceMetaData b = (ServiceMetaData) arg1;
-                return a.getName().compareToIgnoreCase(b.getName());
-            }
-        });
-
-        return (ServiceMetaData[]) services.toArray(new \
                ServiceMetaData[services.size()]);
-    }
-
-    // return all available service metadata (not counts)
-    public Object[] getServiceInfo(String serviceId, String serviceVersion) throws \
                AxisFault {
-        throw new AxisFault("Operation not yet implemented");
-    }
-
-    // return all accumulated data about this service
-    public Object[] getServiceStatus(String serviceId, String serviceVersion) throws \
                AxisFault {
-        throw new AxisFault("Operation not yet implemented");
-    }
-
-    // return all parameters for this service (including inherited ones),
-    // where each parameter is an XML fragment representing the "parameter"
-    // element
-    public OMElement[] getServiceParameters(String serviceId,
-                                            String serviceVersion) throws AxisFault \
                {
-        ArrayList allParameters = new ArrayList();
-        ArrayList globalParameters = getAxisConfig().getParameters();
-
-        for (int i = 0; i < globalParameters.size(); i++) {
-            Parameter parameter = (Parameter) globalParameters.get(i);
-            allParameters.add(parameter.getParameterElement());
-        }
-
-        AxisService service = getAxisConfig().getService(serviceId);
-
-        if (service == null) {
-            throw new AxisFault("Invalid service name");
-        }
-
-        ArrayList serviceParams = service.getParameters();
-
-        for (int i = 0; i < serviceParams.size(); i++) {
-            Parameter parameter = (Parameter) serviceParams.get(i);
-
-            String paramName = parameter.getName();
-            if (paramName != null && paramName.trim().length() != 0) {
-                if (parameter.getParameterElement() != null) {
-                    allParameters.add(parameter.getParameterElement());
-                } else if (parameter.getValue() != null && parameter.getValue() \
                instanceof String) {
-                    parameter = ParameterUtil.createParameter(paramName.trim(),
-                                                              (String) \
                parameter.getValue());
-                    allParameters.add(parameter.getParameterElement());
-                }
-            }
-        }
-        return (OMElement[]) allParameters.toArray(new \
                OMElement[allParameters.size()]);
-    }
-
-    // return only the parameters for explicitly set for this service (not
-    // including inherited ones),
-    // where each parameter is an XML fragment representing the <parameter>
-    // element
-    public OMElement[] getDeclaredServiceParameters(String serviceId,
-                                                    String serviceVersion) throws \
                AxisFault {
-        ArrayList allParameters = new ArrayList();
-        AxisService axisService = getAxisConfig().getService(serviceId);
-
-        if (axisService == null) {
-            throw new AxisFault("invalid service name " + serviceId);
-        }
-
-        ArrayList params = axisService.getParameters();
-
-        for (int i = 0; i < params.size(); i++) {
-            Parameter parameter = (Parameter) params.get(i);
-            String paramName = parameter.getName();
-            if (paramName != null && paramName.trim().length() != 0) {
-                if (parameter.getParameterElement() != null) {
-                    allParameters.add(parameter.getParameterElement());
-                } else if (parameter.getValue() != null && parameter.getValue() \
                instanceof String) {
-                    parameter = ParameterUtil.createParameter(paramName.trim(),
-                                                              (String) \
                parameter.getValue());
-                    allParameters.add(parameter.getParameterElement());
-                }
-            }
-        }
-
-        return (OMElement[]) allParameters.toArray(new \
                OMElement[allParameters.size()]);
-    }
-
-    public void setServiceParameters(String serviceId,
-                                     String serviceVersion,
-                                     OMElement[] paramterElements) throws AxisFault \
                {
-        for (int i = 0; i < paramterElements.length; i++) {
-            setServiceParameter(serviceId, serviceVersion, paramterElements[i]);
-        }
-
-    }
-
-    public void setServiceParameter3(String serviceId,
-                                     Parameter parameter) throws AxisFault {
-
-        AxisService axisService = getAxisConfig().getService(serviceId);
-
-        if (axisService == null) {
-            throw new AxisFault("Invalid service name '" + serviceId + "'");
-        }
-
-        // Persist the parameter
-        ServiceDO serviceDO = pm.getService(serviceId,
-                                            \
                ServiceIdentifierDO.EMPTY_SERVICE_VERSION);
-        Parameter p = axisService.getParameter(parameter.getName());
-        ServiceParameterDO paramDO = pm.getServiceParameter(serviceDO,
-                                                            parameter.getName());
-        if (p != null && paramDO != null) {
-
-            // Setting a new value for a parameter declared in AxisService
-            if (!p.isLocked()) {
-                axisService.addParameter(parameter);
-                paramDO.setValue(parameter.getParameterElement().toString());
-                pm.updateEntity(paramDO);
-            }
-        } else {
-
-            // If we are adding a new AxisService param or overriding a param in the \
                Configuration hierarchy
-            if (p == null || !p.isLocked()) {
-                axisService.addParameter(parameter);
-
-                ServiceParameterDO param = new ServiceParameterDO();
-                param.setName(parameter.getName());
-                param.setValue(parameter.getParameterElement().toString());
-                param.setService(serviceDO);
-
-                try {
-                    pm.addEntity(param);
-                } catch (DuplicateEntityException e) {
-                    log.error("Service Parameter already exists", e);
-                }
-            }
-        }
-    }
-
-    public void setServiceParameter(String serviceId,
-                                    String serviceVersion,
-                                    OMElement paramterElement) throws AxisFault {
-
-        AxisService axisService = getAxisConfig().getService(serviceId);
-
-        if (axisService == null) {
-            throw new AxisFault("Invalid service name '" + serviceId + "'");
-        }
-
-        // Persist the parameter
-        ServiceDO serviceDO = pm.getService(serviceId,
-                                            \
                ServiceIdentifierDO.EMPTY_SERVICE_VERSION);
-        Parameter parameter = ParameterUtil.createParameter(paramterElement);
-        Parameter p = axisService.getParameter(parameter.getName());
-        ServiceParameterDO paramDO = pm.getServiceParameter(serviceDO,
-                                                            parameter.getName());
-        if (p != null && paramDO != null) {
-
-            // Setting a new value for a parameter declared in AxisService
-            if (!p.isLocked()) {
-                axisService.addParameter(parameter);
-                paramDO.setValue(paramterElement.toString());
-                pm.updateEntity(paramDO);
-            }
-        } else {
-
-            // If we are adding a new AxisService param or overriding a param in the \
                Configuration hierarchy
-            if (p == null || !p.isLocked()) {
-                axisService.addParameter(parameter);
-
-                ServiceParameterDO param = new ServiceParameterDO();
-                param.setName(parameter.getName());
-                param.setValue(paramterElement.toString());
-                param.setService(serviceDO);
-
-                try {
-                    pm.addEntity(param);
-                } catch (DuplicateEntityException e) {
-                    log.error("Service Parameter already exists", e);
-                }
-            }
-        }
-    }
-
-    public void removeServiceSpecificParameter(String serviceId,
-                                               String serviceVersion,
-                                               OMElement paramterElement) throws \
                AxisFault {
-
-        AxisService axisService = getAxisConfig().getService(serviceId);
-
-        if (axisService == null) {
-            throw new AxisFault("Invalid service name '" + serviceId + "'");
-        }
-
-        // un-Persist the parameter
-        ServiceDO serviceDO = pm.getService(serviceId,
-                                            \
                ServiceIdentifierDO.EMPTY_SERVICE_VERSION);
-        Parameter parameter = ParameterUtil.createParameter(paramterElement);
-        Parameter p = axisService.getParameter(parameter.getName());
-        ServiceParameterDO paramDO = pm.getServiceParameter(serviceDO,
-                                                            parameter.getName());
-        if (p != null && paramDO != null) {
-
-            // Setting a new value for a parameter declared in AxisService
-            if (!p.isLocked()) {
-                axisService.removeParameter(parameter);
-                pm.deleteEntity(paramDO);
-            }
-        } else {
-
-            if (p == null || !p.isLocked()) {
-                axisService.removeParameter(parameter);
-
-
-            }
-        }
-    }
-
-    public void setServiceParameter2(String serviceName,
-                                     Parameter parameter) throws AxisFault {
-        AxisService axisService = getAxisConfig().getService(serviceName);
-
-        if (axisService == null) {
-            throw new AxisFault("Invalid service name '" + serviceName + "'");
-        }
-
-        // Persist the parameter
-        ServiceDO serviceDO = pm.getService(serviceName,
-                                            \
                ServiceIdentifierDO.EMPTY_SERVICE_VERSION);
-        Parameter p = axisService.getParameter(parameter.getName());
-
-        if (p != null) {
-            if (!p.isLocked()) {
-                axisService.addParameter(parameter);
-
-                ServiceParameterDO paramDO = pm.getServiceParameter(serviceDO,
-                                                                    \
                parameter.getName());
-                paramDO.setValue(p.getParameterElement().toString());
-                pm.updateEntity(paramDO);
-            }
-        } else {
-            axisService.addParameter(parameter);
-
-            ServiceParameterDO param = new ServiceParameterDO();
-            param.setName(parameter.getName());
-            param.setValue(parameter.getParameterElement().toString());
-            param.setService(serviceDO);
-
-            try {
-                pm.addEntity(param);
-            } catch (DuplicateEntityException e) {
-                log.error("Service Parameter already exists", e);
-            }
-        }
-    }
-
-    public void removeServiceParameter(String serviceName, String paramName) throws \
                AxisFault {
-        AxisService axisService = getAxisConfig().getService(serviceName);
-        axisService.removeParameter(new Parameter(paramName, null));
-        ServiceDO serviceDO = pm.getService(serviceName, \
                ServiceIdentifierDO.EMPTY_SERVICE_VERSION);
-        ServiceParameterDO sp = new ServiceParameterDO();
-        sp.setService(serviceDO);
-        sp.setName(paramName);
-        serviceDO.getParameters().remove(sp);
-        pm.updateEntity(serviceDO);
-    }
-
-    public OMElement getWSDL(String serviceName) throws AxisFault {
-        AxisService axisService = getAxisConfig().getService(serviceName);
-
-        if (axisService != null) {
-            ByteArrayOutputStream out = new ByteArrayOutputStream();
-            String url = \
                MessageContext.getCurrentMessageContext().getTo().getAddress();
-            int ipindex = url.indexOf("//");
-            String ip = null;
-
-            if (ipindex >= 0) {
-                ip = url.substring(ipindex + 2, url.length());
-
-                int seperatorIndex = ip.indexOf(":");
-
-                if (seperatorIndex > 0) {
-                    ip = ip.substring(0, seperatorIndex);
-                }
-            }
-
-            axisService.printWSDL(out, ip);
-
-            try {
-                XMLStreamReader xmlReader = XMLInputFactory.newInstance()
-                        .createXMLStreamReader(new ByteArrayInputStream(
-                                out.toByteArray()));
-
-                OMFactory fac = OMAbstractFactory.getOMFactory();
-                OMNamespace namespace = \
                fac.createOMNamespace("http://org.apache.axis2/xsd",
-                                                              "ns1");
-                OMElement wsdlWrapper = fac.createOMElement("getWSDLResponse",
-                                                            namespace);
-                OMElement retvalue = fac.createOMElement("return", null);
-                wsdlWrapper.addChild(retvalue);
-
-                StAXOMBuilder staxOMBuilder = new StAXOMBuilder(fac, xmlReader);
-                retvalue.addChild(staxOMBuilder.getDocumentElement());
-
-                return wsdlWrapper;
-            } catch (XMLStreamException e) {
-                throw AxisFault.makeFault(e);
-            }
-        }
-
-        return null;
-    }
-
-    public OMElement getSchema(String serviceName) throws AxisFault {
-        AxisService axisService = getAxisConfig().getService(serviceName);
-
-        if (axisService != null) {
-            ByteArrayOutputStream out = new ByteArrayOutputStream();
-            axisService.printSchema(out);
-
-            try {
-                XMLStreamReader xmlReader = XMLInputFactory.newInstance()
-                        .createXMLStreamReader(new ByteArrayInputStream(
-                                out.toByteArray()));
-                OMFactory fac = OMAbstractFactory.getOMFactory();
-                OMElement wsdlWrapper = fac.createOMElement("getWSDLReponse",
-                                                            null);
-                StAXOMBuilder staxOMBuilder = new StAXOMBuilder(fac, xmlReader);
-                wsdlWrapper.addChild(staxOMBuilder.getDocumentElement());
-
-                return wsdlWrapper;
-            } catch (XMLStreamException e) {
-                throw AxisFault.makeFault(e);
-            }
-        }
-
-        return null;
-    }
-
-    public OMElement getPolicy(String serviceId, String serviceVersion) throws \
                AxisFault {
-        AxisService axisService = getAxisConfig().getService(serviceId);
-
-        if (axisService == null) {
-            throw new AxisFault("invalid service name");
-        }
-
-        PolicyInclude servicePolicyInclude = axisService.getPolicyInclude();
-        Policy servicePolicy = servicePolicyInclude.getPolicy();
-
-        if (servicePolicy == null) {
-            return PolicyUtil.getEmptyPolicyAsOMElement();
-        }
-
-        return PolicyUtil.getPolicyAsOMElement(servicePolicy);
-    }
-
-    public PolicyData[] getPolicies(String serviceId, String serviceVersion) throws \
                AxisFault {
-        AxisService axisService = getAxisConfig().getService(serviceId);
-
-        if (axisService == null) {
-            throw new AxisFault("invalid service name");
-        }
-
-        ArrayList policyDataArray = new ArrayList();
-
-        PolicyInclude servicePolicyInclude = axisService.getPolicyInclude();
-        PolicyRegistry registry = servicePolicyInclude.getPolicyRegistry();
-
-        List policyList;
-
-        // services.xml
-        policyList = \
                servicePolicyInclude.getPolicyElements(PolicyInclude.AXIS_SERVICE_POLICY);
                
-
-        if (!policyList.isEmpty()) {
-            PolicyData policyData = new PolicyData();
-            policyData.setWrapper("Policies in services.xml");
-            policyData
-                    \
                .setPolycies(PolicyUtil.processPolicyElements(policyList.iterator(), \
                registry));
-            policyDataArray.add(policyData);
-        }
-
-        // wsdl:service
-        policyList = \
                servicePolicyInclude.getPolicyElements(PolicyInclude.SERVICE_POLICY);
-
-        if (!policyList.isEmpty()) {
-            PolicyData policyData = new PolicyData();
-            policyData.setWrapper("Policies in wsdl:service");
-            policyData
-                    \
                .setPolycies(PolicyUtil.processPolicyElements(policyList.iterator(), \
                registry));
-            policyDataArray.add(policyData);
-        }
-
-        // wsdl:portType
-        policyList = \
                servicePolicyInclude.getPolicyElements(PolicyInclude.PORT_TYPE_POLICY);
                
-
-        if (!policyList.isEmpty()) {
-            PolicyData policyData = new PolicyData();
-            policyData.setWrapper("Policies in wsdl:portType");
-            policyData
-                    \
                .setPolycies(PolicyUtil.processPolicyElements(policyList.iterator(), \
                registry));
-            policyDataArray.add(policyData);
-        }
-
-        // wsdl:port
-        policyList = \
                servicePolicyInclude.getPolicyElements(PolicyInclude.PORT_POLICY);
-
-        if (!policyList.isEmpty()) {
-            PolicyData policyData = new PolicyData();
-            policyData.setWrapper("Policies in wsdl:port");
-            policyData
-                    \
                .setPolycies(PolicyUtil.processPolicyElements(policyList.iterator(), \
                registry));
-            policyDataArray.add(policyData);
-        }
-
-        // wsdl:binding
-        policyList = \
                servicePolicyInclude.getPolicyElements(PolicyInclude.BINDING_POLICY);
-
-        if (!policyList.isEmpty()) {
-            PolicyData policyData = new PolicyData();
-            policyData.setWrapper("Policies in wsdl:binding");
-            policyData
-                    \
                .setPolycies(PolicyUtil.processPolicyElements(policyList.iterator(), \
                registry));
-            policyDataArray.add(policyData);
-        }
-
-
-        return (PolicyData[]) policyDataArray.toArray(new \
                PolicyData[policyDataArray.size()]);
-    }
-
-    public boolean removePolicy(String serviceId,
-                                String version,
-                                String policyId) throws AxisFault {
-        boolean isPolicyRemoved = false;
-        AxisService axisService = getAxisConfig().getService(serviceId);
-        if (axisService == null) {
-            throw new AxisFault("Invalid service name " + serviceId);
-        }
-        PolicyInclude policyInclude = axisService.getPolicyInclude();
-        if (policyInclude.getPolicy(policyId) != null) {
-            policyInclude.removePolicyElement(policyId);
-            isPolicyRemoved = true;
-        }
-        ServiceDO serviceDO = pm.getService(serviceId, version);
-        List policiesToBeRemoved = new ArrayList();
-        for (Iterator policyIter = serviceDO.getPolicies().iterator();
-             policyIter.hasNext();) {
-            ServicePolicyDO servicePolicyDO = (ServicePolicyDO) policyIter.next();
-            if (servicePolicyDO.getUuid().equals(policyId)) {
-                policiesToBeRemoved.add(servicePolicyDO);
-            }
-        }
-        Set policies = serviceDO.getPolicies();
-        for (Iterator iterator = policiesToBeRemoved.iterator(); \
                iterator.hasNext();) {
-            policies.remove(iterator.next());
-            isPolicyRemoved = true;
-        }
-        pm.updateEntity(serviceDO);
-        return isPolicyRemoved;
-    }
-
-    public void setPolicy(String serviceId,
-                          String version,
-                          String policyString) throws AxisFault {
-
-        ByteArrayInputStream bais = new \
                ByteArrayInputStream(policyString.getBytes());
-        OMElement policyElement;
-        try {
-            policyElement = new StAXOMBuilder(bais).getDocumentElement();
-            policyElement.build();
-        } catch (Exception e) {
-            throw new AxisFault("Cannot deserialize service policy. The policy may \
                be invalid.", e);
-        }
-
-        AxisService axisService = getAxisConfig().getService(serviceId);
-        if (axisService == null) {
-            throw new AxisFault("Invalid service name " + serviceId);
-        }
-
-        if (!policyElement.getLocalName().equals(org.apache.neethi.Constants.ELEM_POLICY)) \
                {
-            policyElement = policyElement.getFirstElement();
-        }
-
-        OMAttribute attribute =
-                policyElement.getAttribute(new \
                QName(org.apache.neethi.Constants.URI_WSU_NS,
-                                                     \
                org.apache.neethi.Constants.ATTR_ID));
-
-        if (attribute == null) {
-            throw new AxisFault("ID Attribute not found in Policy element. " +
-                                "Please verify that the policy XML is valid.");
-        }
-        String idAttrVal = attribute.getAttributeValue();
-
-        PolicyInclude policyInclude = axisService.getPolicyInclude();
-
-        Policy servicePolicy;
-        try {
-            servicePolicy = PolicyUtil.getPolicyFromOMElement(policyElement);
-
-        } catch (NullPointerException npe) {
-            /*
-             * Since 'policyElement.toString()' is the actual string which is used \
                to
-             * create the policy object it logged instead of 'policyString'.
-             */
-            log.error("Error: When constructing Policy object from the string : "
-                      + policyElement.toString(), npe);
-            throw new AxisFault("Error: Invalid policy", npe);
-
-        } catch (RuntimeException rte) {
-            log.error("Error: When constructing Policy object from the string : "
-                      + policyElement.toString(), rte);
-            throw new AxisFault("Error: Invalid policy", rte);
-        }
-
-        ServicePolicyDO servicePolicyDO = new ServicePolicyDO();
-        servicePolicyDO.setUuid(idAttrVal);
-        servicePolicyDO.setService(pm.getService(serviceId,
-                                                 \
                ServiceIdentifierDO.EMPTY_SERVICE_VERSION));
-        servicePolicyDO.setPolicy(policyElement.toString());
-
-        if (policyInclude.getPolicy(idAttrVal) != null) {
-            policyInclude.updatePolicy(servicePolicy);
-
-            try {
-                pm.updateServicePolicy(servicePolicyDO);
-            } catch (ServicePolicyNotFoundException e) {
-                throw AxisFault.makeFault(e);
-            }
-
-        } else {
-            policyInclude.addPolicyElement(PolicyInclude.AXIS_SERVICE_POLICY, \
                servicePolicy);
-            servicePolicyDO.setType(PolicyInclude.AXIS_SERVICE_POLICY);
-
-            try {
-                pm.addServicePolicy(servicePolicyDO);
-            } catch (ServicePolicyAlreadyExistsException e) {
-                throw AxisFault.makeFault(e);
-            }
-        }
-    }
-
-    public String[] getServiceUsers(String serviceName) throws AxisFault {
-        AxisService axisService = getAxisConfig().getService(serviceName);
-
-        if (axisService == null) {
-            throw new AxisFault("invalid service name " + serviceName);
-        }
-
-        Collection users = new ArrayList();
-        ServiceUserDO[] userDOs = pm.getUsersForService(serviceName,
-                                                        \
                ServiceIdentifierDO.EMPTY_SERVICE_VERSION);
-
-        for (int i = 0; i < userDOs.length; i++) {
-            ServiceUserDO userDO = userDOs[i];
-            users.add(userDO.getUsername());
-        }
-
-        return (String[]) users.toArray(new String[users.size()]);
-    }
-
-    public ServiceUserData[] getServiceUsersWithDescription(String serviceName)
-            throws AxisFault {
-        AxisService axisService = getAxisConfig().getService(serviceName);
-
-        if (axisService == null) {
-            throw new AxisFault("invalid service name " + serviceName);
-        }
-
-        ServiceUserDO[] userDOs = pm.getUsersForService(serviceName,
-                                                        \
                ServiceIdentifierDO.EMPTY_SERVICE_VERSION);
-
-        ServiceUserData[] suData = new ServiceUserData[userDOs.length];
-
-        if (userDOs.length == 0) {
-            return new ServiceUserData[0];
-        }
-
-        ServiceUserDO serviceUserData;
-
-        for (int i = 0; i < suData.length; i++) {
-            serviceUserData = userDOs[i];
-
-            ServiceUserData userData = new ServiceUserData();
-            userData.setUser(serviceUserData.getUsername());
-            userData.setDescription(serviceUserData.getDescription());
-            suData[i] = userData;
-        }
-
-        return suData;
-    }
-
-    public ServiceRoleData[] getServiceRolesWithDescription(String serviceName)
-            throws AxisFault {
-        AxisService axisService = getAxisConfig().getService(serviceName);
-
-        if (axisService == null) {
-            throw new AxisFault("invalid service name " + serviceName);
-        }
-
-        ServiceUserRoleDO[] roleDOs = pm.getRolesForService(serviceName,
-                                                            \
                ServiceIdentifierDO.EMPTY_SERVICE_VERSION);
-
-        ServiceRoleData[] srData = new ServiceRoleData[roleDOs.length];
-
-        if (roleDOs.length == 0) {
-            return new ServiceRoleData[0];
-        }
-
-        ServiceUserRoleDO serviceRoleData;
-
-        for (int i = 0; i < srData.length; i++) {
-            serviceRoleData = roleDOs[i];
-
-            ServiceRoleData roleData = new ServiceRoleData();
-            roleData.setRole(serviceRoleData.getRole());
-            roleData.setDescription(serviceRoleData.getDescription());
-            srData[i] = roleData;
-        }
-
-        return srData;
-    }
-
-    /**
-     * Get all the fully qualified class names of all the classes in this archive
-     *
-     * @param archiveId
-     * @return all the fully qualified class names of all the classes in this \
                archive
-     * @throws AxisFault
-     */
-    public String[] getClassNames(String archiveId) throws AxisFault {
-        String filePath = getFilePathFromArchiveId(archiveId);
-
-        if (filePath != null) {
-            try {
-                String[] entries = new ArchiveManipulator().check(filePath);
-                Collection classnames = new ArrayList();
-
-                for (int i = 0; i < entries.length; i++) {
-                    String entry = entries[i];
-
-                    if (entry.endsWith(".class")) {
-                        entry = entry.replace('/', '.').substring(0,
-                                                                  \
                entry.lastIndexOf(".class"));
-                        classnames.add(entry);
-                    }
-                }
-
-                return (String[]) classnames.toArray(new String[classnames.size()]);
-            } catch (IOException e) {
-                String msg = "Could not read archive";
-                log.error(msg, e);
-                throw new AxisFault(msg, e);
-            }
-        }
-
-        return new String[]{""};
-    }
-
-    /**
-     * This method will list all the public methods for the given classes.
-     *
-     * @param classNames full qualified class name
-     * @return resourcesId array of resource Ids
-     * @throws AxisFault will be thrown
-     */
-    public ClassMethodsData[] listMethodsForClass(String[] classNames, String[] \
                resourcesId)
-            throws AxisFault {
-        if (classNames == null || classNames.length == 0) {
-            String msg = "Cannot find classes";
-            log.error(msg);
-            throw new AxisFault(msg);
-        }
-        List methodExcludeList = new ArrayList();
-        methodExcludeList.add("hashCode");
-        methodExcludeList.add("getClass");
-        methodExcludeList.add("equals");
-        methodExcludeList.add("notify");
-        methodExcludeList.add("notifyAll");
-        methodExcludeList.add("toString");
-        methodExcludeList.add("wait");
-        List resourecesList = new ArrayList();
-        for (int i = 0; i < resourcesId.length; i++) {
-            String filePathFromArchiveId = getFilePathFromArchiveId(resourcesId[i]);
-            if (filePathFromArchiveId == null) {
-                throw new AxisFault("File cannot be located for id : " + \
                resourcesId[i]);
-            }
-            try {
-                resourecesList.add(new File(filePathFromArchiveId).toURL());
-            } catch (MalformedURLException e) {
-                String msg = "MalformedURLException";
-                throw new AxisFault(msg, e);
-            }
-        }
-        URL[] urls = (URL[]) resourecesList.toArray(new URL[resourecesList.size()]);
-        ClassLoader classLoader =
-                URLClassLoader.newInstance(urls, \
                Thread.currentThread().getContextClassLoader());
-        List classMethodList = new ArrayList();
-        for (int i = 0; i < classNames.length; i++) {
-            String className = classNames[i];
-            try {
-                Class clazz = classLoader.loadClass(className);
-                ClassMethodsData classMethodsData = new ClassMethodsData();
-                classMethodsData.setClassName(clazz.getName());
-                Method[] methods = clazz.getMethods();
-                List methodList = new ArrayList();
-                for (int j = 0; j < methods.length; j++) {
-                    Method method = methods[j];
-                    String methodName = method.getName();
-                    int modifiers = method.getModifiers();
-                    if (Modifier.isPublic(modifiers) && \
                !methodExcludeList.contains(methodName)) {
-                        MethodData methodData = new MethodData();
-                        methodData.setMethodName(methodName);
-                        methodList.add(methodData);
-                    }
-                }
-                findOverloadedMethods(methodList);
-                classMethodsData.setMethods(
-                        (MethodData[]) methodList.toArray(new \
                MethodData[methodList.size()]));
-                classMethodList.add(classMethodsData);
-            } catch (ClassNotFoundException e) {
-                String msg = "The class " + className + " cannot be loaded";
-                log.error(msg);
-            }
-
-        }
-        return (ClassMethodsData[]) classMethodList
-                .toArray(new ClassMethodsData[classMethodList.size()]);
-
-    }
-
-    private void findOverloadedMethods(List methodList) {
-        Map finalMap = new HashMap();
-        int size = methodList.size();
-        for (int k = 0; k < size - 1; k++) {
-            MethodData startPointer = (MethodData) methodList.get(k);
-            if (!finalMap.containsKey(startPointer.getMethodName())) {
-                int count = 0;
-                for (Iterator iterator = methodList.iterator(); iterator.hasNext();) \
                {
-                    MethodData method = (MethodData) iterator.next();
-                    if (method.getMethodName().equals(startPointer.getMethodName())) \
                {
-                        count++;
-                    }
-                }
-                for (Iterator iterator = methodList.iterator(); iterator.hasNext();) \
                {
-                    MethodData method = (MethodData) iterator.next();
-                    if (method.getMethodName().equals(startPointer.getMethodName())) \
                {
-                        if (count > 1) {
-                            method.setOverload(true);
-                        }
-                    }
-                }
-            }
-        }
-
-    }
-
-    /**
-     * Creates and deploys a service. This AAR will contain all the classe from the \
                jar/zip file
-     * corresponding to <code>archiveId</code>. In addition, a services.xml will be \
                created, and all
-     * of the <code>serviceClasses</code> will be added as services.
-     *
-     * @param archiveId  archive id
-     * @param data       info array. data contains the excluded method names.
-     * @param resourceId array of resource Ids that goes in the "lib" folder
-     * @throws AxisFault will be thrown
-     */
-    public void createAndDeployService(String archiveId,
-                                       ClassMethodsData[] data,
-                                       String[] resourceId) throws AxisFault {
-        String filePathFromArchiveId = getFilePathFromArchiveId(archiveId);
-
-        if (filePathFromArchiveId == null) {
-            String msg = "A non-existent file was requested";
-            log.warn(msg);
-            throw new AxisFault(msg);
-        }
-
-        int endIndex = filePathFromArchiveId.lastIndexOf(File.separator);
-        String filePath = filePathFromArchiveId.substring(0, endIndex);
-        String archiveFileName = filePathFromArchiveId.substring(endIndex);
-        archiveFileName = archiveFileName.substring(0, \
                archiveFileName.lastIndexOf("."));
-
-        ArchiveManipulator archiveManipulator = new ArchiveManipulator();
-
-        // ----------------- Unzip the file ------------------------------------
-        String unzippeDir = filePath + File.separator + "temp";
-        File unzipped = new File(unzippeDir);
-        unzipped.mkdirs();
-
-        try {
-            archiveManipulator.extract(filePathFromArchiveId, unzippeDir);
-        } catch (IOException e) {
-            throw new AxisFault("Cannot extract archive", e);
-        }
-
-        //copy resources to lib folder.
-        File resourceLibDir = new File(unzipped.getAbsolutePath() + File.separator + \
                "lib");
-        resourceLibDir.mkdirs();
-        List resourceList = new ArrayList();
-        for (int i = 0; i < resourceId.length; i++) {
-            if (!resourceId[i].equals(archiveId)) {
-                String fileAbsPath = getFilePathFromArchiveId(resourceId[i]);
-                if (fileAbsPath == null) {
-                    throw new AxisFault("Resource cannot be located");
-                }
-                resourceList.add(new File(fileAbsPath));
-            }
-        }
-        FileManipulator fileMan = new FileManipulator();
-        for (Iterator iterator = resourceList.iterator(); iterator.hasNext();) {
-            File file = (File) iterator.next();
-            try {
-                String absPath = file.getAbsolutePath();
-                if (File.separatorChar == '\\') {
-                    absPath = absPath.replace("\\", "/");
-                }
-                int nameIndex = absPath.lastIndexOf("/");
-                String fileName = absPath.substring(nameIndex + 1);
-                fileMan.copyFile(file, new File(resourceLibDir, fileName));
-            } catch (IOException e) {
-                String msg = "Error occured when copying resources";
-                throw new AxisFault(msg, e);
-            }
-        }
-
-        // ---- Generate the services.xml and place it in META-INF -----
-        File file = new File(unzippeDir + File.separator + "META-INF" +
-                             File.separator + "services.xml");
-        file.mkdirs();
-
-        try {
-            File absoluteFile = file.getAbsoluteFile();
-
-            if (absoluteFile.exists()) {
-                absoluteFile.delete();
-            }
-
-            absoluteFile.createNewFile();
-
-            OutputStream os = new FileOutputStream(file);
-            OMElement servicesXML = createServicesXML(data);
-            servicesXML.build();
-            servicesXML.serialize(os);
-        } catch (Exception e) {
-            String msg = "Cannot write services XML";
-            log.error(msg, e);
-            throw new AxisFault(msg, e);
-        }
-
-        // ----------------- Create the AAR ------------------------------------
-        // These are the files to include in the ZIP file
-        String outAARFilename = filePath + File.separator + archiveFileName +
-                                ".aar";
-
-        try {
-            archiveManipulator.archiveDir(outAARFilename, unzipped.getPath());
-        } catch (IOException e) {
-            String msg = "Cannot create new AAR archive";
-            log.error(msg, e);
-            throw new AxisFault(msg, e);
-        }
-
-        //------------- Copy the AAR to the repository/services directory --------
-        String repo = \
                MessageContext.getCurrentMessageContext().getConfigurationContext()
-                .getAxisConfiguration().getRepository()
-                .getPath() + File.separator + "services";
-
-        try {
-            new FileManipulator().copyFile(new File(outAARFilename),
-                                           new File(repo + File.separator + \
                archiveFileName +
-                                                    ".aar"));
-        } catch (IOException e) {
-            String msg = "Cannot copy AAR file to Repo";
-            log.error(msg, e);
-            throw new AxisFault(msg, e);
-        }
-    }
-
-    private OMElement createServicesXMLFromSpringBeans(String[] springBeans,
-                                                       String springContextLocation) \
                {
-        OMFactory factory = OMAbstractFactory.getOMFactory();
-        OMNamespace emptyNS = factory.createOMNamespace("", "");
-        OMElement serviceGroupEle = factory.createOMElement("serviceGroup", "", "");
-
-        for (int i = 0; i < springBeans.length; i++) {
-            String serviceBeanName = springBeans[i];
-
-
-            OMElement serviceEle = factory.createOMElement("service", "", "");
-
-            OMElement schemaEle = factory.createOMElement("schema", "", "");
-            schemaEle.addAttribute(
-                    factory.createOMAttribute("elementFormDefaultQualified", \
                emptyNS, "false"));
-
-            serviceEle.addAttribute(factory.createOMAttribute("name", emptyNS, \
                serviceBeanName));
-
-            OMElement msgReceiversEle = factory.createOMElement("messageReceivers",
-                                                                "", "");
-            OMElement msgReceiverEle1 = factory.createOMElement("messageReceiver",
-                                                                "", "");
-            msgReceiverEle1.addAttribute("mep",
-                                         "http://www.w3.org/ns/wsdl/in-only", \
                emptyNS);
-            msgReceiverEle1.addAttribute("class",
-                                         RPCInOnlyMessageReceiver.class.getName(),
-                                         emptyNS);
-
-            OMElement msgReceiverEle2 = factory.createOMElement("messageReceiver",
-                                                                "", "");
-            msgReceiverEle2.addAttribute("mep",
-                                         "http://www.w3.org/ns/wsdl/in-out", \
                emptyNS);
-            msgReceiverEle2.addAttribute("class",
-                                         RPCMessageReceiver.class.getName(),
-                                         emptyNS);
-            msgReceiversEle.addChild(msgReceiverEle1);
-            msgReceiversEle.addChild(msgReceiverEle2);
-
-            OMElement parameterEleServiceObjectSupplier =
-                    factory.createOMElement("parameter", "", "");
-            parameterEleServiceObjectSupplier.addAttribute("locked", "true", \
                emptyNS);
-            parameterEleServiceObjectSupplier
-                    .addAttribute("name", "ServiceObjectSupplier", emptyNS);
-            parameterEleServiceObjectSupplier.
-                    setText(GenericApplicationContextSupplier.class.getName());
-
-            OMElement parameterEleSpringBeanName = \
                factory.createOMElement("parameter", "", "");
-            parameterEleSpringBeanName.addAttribute("locked", "true", emptyNS);
-            parameterEleSpringBeanName.addAttribute("name", "SpringBeanName", \
                emptyNS);
-            parameterEleSpringBeanName.setText(serviceBeanName);
-
-            OMElement parameterEleSpringContextLocation =
-                    factory.createOMElement("parameter", "", "");
-            parameterEleSpringContextLocation.addAttribute("locked", "true", \
                emptyNS);
-            parameterEleSpringContextLocation
-                    .addAttribute("name", "SpringContextLocation", emptyNS);
-            parameterEleSpringContextLocation.setText(springContextLocation);
-
-            serviceEle.addChild(schemaEle);
-            serviceEle.addChild(msgReceiversEle);
-            serviceEle.addChild(parameterEleServiceObjectSupplier);
-            serviceEle.addChild(parameterEleSpringBeanName);
-            serviceEle.addChild(parameterEleSpringContextLocation);
-            serviceGroupEle.addChild(serviceEle);
-        }
-        return serviceGroupEle;
-    }
-
-    private OMElement createServicesXML(ClassMethodsData[] data) {
-        OMFactory factory = OMAbstractFactory.getOMFactory();
-        OMNamespace emptyNS = factory.createOMNamespace("", "");
-        OMElement serviceGroupEle = factory.createOMElement("serviceGroup", "", "");
-
-        for (int i = 0; i < data.length; i++) {
-            ClassMethodsData datum = data[i];
-            String serviceClass = datum.getClassName();
-            String serviceName = \
                serviceClass.substring(serviceClass.lastIndexOf(".") + 1);
-
-            OMElement serviceEle = factory.createOMElement("service", "", "");
-
-            OMElement schemaEle = factory.createOMElement("schema", "", "");
-            schemaEle.addAttribute(
-                    factory.createOMAttribute("elementFormDefaultQualified", \
                emptyNS, "true"));
-
-            serviceEle.addAttribute(factory.createOMAttribute("name", emptyNS,
-                                                              serviceName));
-
-            OMElement msgReceiversEle = factory.createOMElement("messageReceivers",
-                                                                "", "");
-            OMElement msgReceiverEle1 = factory.createOMElement("messageReceiver",
-                                                                "", "");
-            msgReceiverEle1.addAttribute("mep",
-                                         "http://www.w3.org/ns/wsdl/in-only", \
                emptyNS);
-            msgReceiverEle1.addAttribute("class",
-                                         \
                "org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver",
-                                         emptyNS);
-
-            OMElement msgReceiverEle2 = factory.createOMElement("messageReceiver",
-                                                                "", "");
-            msgReceiverEle2.addAttribute("mep",
-                                         "http://www.w3.org/ns/wsdl/in-out", \
                emptyNS);
-            msgReceiverEle2.addAttribute("class",
-                                         \
                "org.apache.axis2.rpc.receivers.RPCMessageReceiver",
-                                         emptyNS);
-            msgReceiversEle.addChild(msgReceiverEle1);
-            msgReceiversEle.addChild(msgReceiverEle2);
-
-            OMElement parameterEle = factory.createOMElement("parameter", "", "");
-            parameterEle.addAttribute("name", "ServiceClass", emptyNS);
-            parameterEle.setText(serviceClass);
-
-            serviceEle.addChild(schemaEle);
-            serviceEle.addChild(msgReceiversEle);
-            serviceEle.addChild(parameterEle);
-            // Operations
-            MethodData[] methodData = datum.getMethods();
-            if (methodData != null) {
-                if (methodData.length > 0) {
-                    OMElement excludesEle = \
                factory.createOMElement("excludeOperations", "", "");
-                    serviceEle.addChild(excludesEle);
-                    List operationDuplicationList = new ArrayList();
-                    for (int j = 0; j < methodData.length; j++) {
-                        String methodName = methodData[j].getMethodName();
-                        if (!operationDuplicationList.contains(methodName)) {
-                            OMElement operationEle = \
                factory.createOMElement("operation", "", "");
-                            operationDuplicationList.add(methodName);
-                            operationEle.setText(methodName);
-                            excludesEle.addChild(operationEle);
-                        }
-                    }
-                }
-            }
-            serviceGroupEle.addChild(serviceEle);
-        }
-
-        return serviceGroupEle;
-    }
-
-    private String getFilePathFromArchiveId(String archiveId) {
-        ConfigurationContext configCtx =
-                MessageContext.getCurrentMessageContext().getConfigurationContext();
-        Map fileResMap =
-                (Map) \
                configCtx.getProperty(org.wso2.wsas.ServerConstants.FILE_RESOURCE_MAP);
                
-
-        return (String) fileResMap.get(archiveId);
-    }
-
-    public boolean deleteFaultyServiceArchive(String archiveName) throws AxisFault {
-        if (File.separatorChar == '\\') {
-            archiveName = archiveName.replace('/', '\\');
-        }
-
-        boolean isDeleted = false;
-        if (archiveName != null && archiveName.trim().length() != 0) {
-            File file = new File(archiveName);
-            if (file.exists()) {
-                if (!((file.isDirectory() && new FileManipulator().deleteDir(file)) \
                ||
-                      file.delete())) {
-                    throw new AxisFault("Faulty service archive deletion failed. " +
-                                        "Due to a JVM issue on MS-Windows, " +
-                                        "AAR files cannot be deleted. " +
-                                        "Please stop the server and manually delete \
                this file.");
-                } else {
-                    isDeleted = true;
-                    getAxisConfig().getFaultyServices().remove(archiveName);
-                }
-            }
-        }
-
-        return isDeleted;
-    }
-
-    public FaultService[] getFaultyServiceArchives() throws AxisFault {
-        AxisConfiguration ac = getAxisConfig();
-        Hashtable faultyServices = ac.getFaultyServices();
-        ArrayList fsList = new ArrayList();
-
-        for (Iterator keys = faultyServices.keySet().iterator();
-             keys.hasNext();) {
-            String key = (String) keys.next();
-            String fault = (String) faultyServices.get(key);
-            FaultService fs = new FaultService();
-
-            if (File.separatorChar == '\\') {
-                key = key.replace('\\', '/');
-            }
-
-            fs.setServiceName(key);
-            fs.setFault(fault);
-            fsList.add(fs);
-        }
-
-        return (FaultService[]) fsList.toArray(new FaultService[fsList.size()]);
-    }
-
-    public int getNumberOfFaultyServices() throws AxisFault {
-        return getAxisConfig().getFaultyServices().size();
-    }
-
-    public SpringBeansData getSpringBeanNames(String springContextId,
-                                              String springBeanId) throws AxisFault \
                {
-        //Manipulation of springContext to ${RepositoryLocation}/spring
-
-        String springContextFilePath = getFilePathFromArchiveId(springContextId);
-        String springBeanFilePath = getFilePathFromArchiveId(springBeanId);
-        SpringBeansData data = new SpringBeansData();
-        data.setSpringContext(springContextId);
-        try {
-            ApplicationContext aCtx =
-                    GenericApplicationContextUtil
-                            .getSpringApplicationContext(springContextFilePath, \
                springBeanFilePath);
-            String[] beanDefintions = aCtx.getBeanDefinitionNames();
-            data.setBeans(beanDefintions);
-        } catch (Exception e) {
-            throw new AxisFault("Cannot load Spring beans. Please check the Spring \
                context " +
-                                "configuration file and verify that the defined \
                Spring beans exist" +
-                                " in the .jar file.");
-        }
-        return data;
-    }
-
-    public void createAndDeploySpringBean(String springContextId,
-                                          String springBeanId,
-                                          String[] beanClasses) throws AxisFault {
-        String filePathFromArchiveId = getFilePathFromArchiveId(springBeanId);
-        String filePathForSpringContext = getFilePathFromArchiveId(springContextId);
-        ConfigurationContext configCtx =
-                MessageContext.getCurrentMessageContext().getConfigurationContext();
-        Map fileResMap =
-                (Map) \
                configCtx.getProperty(org.wso2.wsas.ServerConstants.FILE_RESOURCE_MAP);
                
-        fileResMap.remove(springContextId);
-
-        if (filePathFromArchiveId == null) {
-            String msg = "A non-existent file was requested";
-            log.warn(msg);
-            throw new AxisFault(msg);
-        }
-
-        int endIndex = filePathFromArchiveId.lastIndexOf(File.separator);
-        String filePath = filePathFromArchiveId.substring(0, endIndex);
-        String archiveFileName = filePathFromArchiveId.substring(endIndex);
-        archiveFileName = archiveFileName.substring(0,
-                                                    \
                archiveFileName.lastIndexOf("."));
-
-        ArchiveManipulator archiveManipulator = new ArchiveManipulator();
-
-        // ----------------- Unzip the file ------------------------------------
-        String unzippeDir = filePath + File.separator + "springTemp";
-        File unzipped = new File(unzippeDir);
-        unzipped.mkdirs();
-
-        try {
-            archiveManipulator.extract(filePathFromArchiveId, unzippeDir);
-        } catch (IOException e) {
-            throw new AxisFault("Cannot extract archive", e);
-        }
-
-        //TODO copy the spring xml
-        String springContextRelLocation = "spring/context.xml";
-        try {
-            File springContextRelDir =
-                    new File(unzippeDir + File.separator + "spring");
-            springContextRelDir.mkdirs();
-            File absFile = new File(springContextRelDir, "context.xml");
-            if (!absFile.exists()) {
-                absFile.createNewFile();
-            }
-            File file = new File(filePathForSpringContext);
-            FileInputStream in = new FileInputStream(file);
-            FileOutputStream out = new FileOutputStream(absFile);
-            // Transfer bytes from in to out
-            byte[] buf = new byte[1024];
-            int len;
-            while ((len = in.read(buf)) > 0) {
-                out.write(buf, 0, len);
-            }
-            in.close();
-            out.close();
-
-        } catch (FileNotFoundException e) {
-            throw AxisFault.makeFault(e);
-        } catch (IOException e) {
-            throw AxisFault.makeFault(e);
-        }
-
-        // ---- Generate the services.xml and place it in META-INF -----
-        File file = new File(unzippeDir + File.separator + "META-INF" +
-                             File.separator + "services.xml");
-        file.mkdirs();
-
-        try {
-            File absoluteFile = file.getAbsoluteFile();
-
-            if (absoluteFile.exists()) {
-                absoluteFile.delete();
-            }
-
-            absoluteFile.createNewFile();
-
-            OutputStream os = new FileOutputStream(file);
-            OMElement servicesXML =
-                    createServicesXMLFromSpringBeans(beanClasses, \
                springContextRelLocation);
-            servicesXML.build();
-            servicesXML.serialize(os);
-        } catch (Exception e) {
-            String msg = "Cannot write services XML";
-            log.error(msg, e);
-            throw new AxisFault(msg, e);
-        }
-
-        // ----------------- Create the AAR ------------------------------------
-        // These are the files to include in the ZIP file
-        String outAARFilename = filePath + File.separator + archiveFileName + \
                ".aar";
-
-        try {
-            archiveManipulator.archiveDir(outAARFilename, unzipped.getPath());
-        } catch (IOException e) {
-            String msg = "Cannot create new AAR archive";
-            log.error(msg, e);
-            throw new AxisFault(msg, e);
-        }
-
-        //------------- Copy the AAR to the respository/services directory --------
-        String repo = \
                MessageContext.getCurrentMessageContext().getConfigurationContext()
-                .getAxisConfiguration().getRepository()
-                .getPath() + File.separator + "services";
-
-        try {
-            new FileManipulator().copyFile(new File(outAARFilename),
-                                           new File(repo + File.separator + \
                archiveFileName +
-                                                    ".aar"));
-        } catch (IOException e) {
-            String msg = "Cannot copy AAR file to Repo";
-            log.error(msg, e);
-            throw new AxisFault(msg, e);
-        }
-    }
-
-    public void createAndDeployEJBService(String archiveId,
-                                          String[] serviceClasses,
-                                          String jnpProviderUrl,
-                                          String beanJNDIName,
-                                          String homeInterface,
-                                          String remoteInterface) throws AxisFault {
-        //Find details of selected ejb application server configuration
-        EJBAppServerDO ejbAppServerDO = \
                pm.getEJBAppServerConfiguration(jnpProviderUrl);
-        if (ejbAppServerDO == null) {
-            throw new AxisFault("Non-existance Application server configuration");
-        }
-
-        //save ejb configuration
-        EJBProviderAdmin ejbProviderAdmin = new EJBProviderAdmin();
-
-        //search for existing configuration, if found abort service deployment
-        try {
-            EJBProviderDO ejbProviderDO = \
                ejbProviderAdmin.getEJBConfiguration(beanJNDIName,
-                                                                               \
                jnpProviderUrl);
-            if (!(ejbProviderDO == null)) {
-                //configuration found.Throw exception
-                throw new AxisFault("A Service exists for the provided JNDI name(" +
-                                    beanJNDIName + ") and JNP Url(" + jnpProviderUrl \
                + ").");
-            }
-        } catch (Exception e) {
-            throw new AxisFault("A Service exists for the provided JNDI name(" +
-                                beanJNDIName + ") and JNP Url(" + jnpProviderUrl + \
                ").");
-        }
-
-
-        ejbProviderAdmin.addEJBConfiguration(ejbAppServerDO.getProviderURL()
-                , ejbAppServerDO.getJndiContextClass()
-                , ejbAppServerDO.getUserName()
-                , ejbAppServerDO.getUserName()
-                , beanJNDIName
-                , homeInterface
-                , remoteInterface
-                , ejbAppServerDO.getAppServerType());
-
-        String filePathFromArchiveId = getFilePathFromArchiveId(archiveId);
-
-        if (filePathFromArchiveId == null) {
-            String msg = "A non-existent file was requested";
-            log.warn(msg);
-            throw new AxisFault(msg);
-        }
-
-        int endIndex = filePathFromArchiveId.lastIndexOf(File.separator);
-        String filePath = filePathFromArchiveId.substring(0, endIndex);
-        String archiveFileName = filePathFromArchiveId.substring(endIndex);
-        archiveFileName = archiveFileName.substring(0,
-                                                    \
                archiveFileName.lastIndexOf("."));
-
-        ArchiveManipulator archiveManipulator = new ArchiveManipulator();
-
-        //----------------- Unzip the file ------------------------------------
-        String unzippeDir = filePath + File.separator + "temp";
-        File unzipped = new File(unzippeDir);
-        unzipped.mkdirs();
-
-        try {
-            archiveManipulator.extract(filePathFromArchiveId, unzippeDir);
-        } catch (IOException e) {
-            throw new AxisFault("Cannot extract archive", e);
-        }
-
-        //---- Generate the services.xml and place it in META-INF -----
-        File file = new File(unzippeDir + File.separator + "META-INF" +
-                             File.separator + "services.xml");
-        file.mkdirs();
-
-        try {
-            File absoluteFile = file.getAbsoluteFile();
-            if (absoluteFile.exists()) {
-                absoluteFile.delete();
-            }
-            absoluteFile.createNewFile();
-            OutputStream os = new FileOutputStream(file);
-            OMElement servicesXML = createServicesXMLForEJBService(serviceClasses,
-                                                                   \
                ejbAppServerDO.getProviderURL(),
-                                                                   \
                ejbAppServerDO.getJndiContextClass(),
-                                                                   \
                ejbAppServerDO.getUserName(),
-                                                                   \
                ejbAppServerDO.getPassword(),
-                                                                   beanJNDIName,
-                                                                   homeInterface,
-                                                                   remoteInterface);
-            servicesXML.build();
-            servicesXML.serialize(os);
-        } catch (Exception e) {
-            String msg = "Cannot write services XML";
-            log.error(msg, e);
-            throw new AxisFault(msg, e);
-        }
-
-        //----------------- Create the AAR ------------------------------------
-        //These are the files to include in the ZIP file
-        String outAARFilename = filePath + File.separator + archiveFileName +
-                                ".aar";
-
-        try {
-            archiveManipulator.archiveDir(outAARFilename, unzipped.getPath());
-        } catch (IOException e) {
-            String msg = "Cannot create new AAR archive";
-            log.error(msg, e);
-            throw new AxisFault(msg, e);
-        }
-
-        //------------- Copy the AAR to the respository/services directory --------
-        String repo = \
                MessageContext.getCurrentMessageContext().getConfigurationContext()
-                .getAxisConfiguration().getRepository()
-                .getPath() + File.separator + "services";
-
-        try {
-            new FileManipulator().copyFile(new File(outAARFilename),
-                                           new File(repo + File.separator + \
                archiveFileName +
-                                                    ".aar"));
-        } catch (IOException e) {
-            String msg = "Cannot copy AAR file to Repo";
-            log.error(msg, e);
-            throw new AxisFault(msg, e);
-        }
-    }
-
-
-    /*
-	<serviceGroup>
-       <service name="TimeService">
-               <description>Time!! web service</description>
-               <parameter name="ServiceClass" \
locked="false">org.apache.axis2.samples.ejb.session.interfaces.TimeServiceRemote</parameter>
                
-               <messageReceivers>
-                       <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" \
                class="org.apache.axis2.rpc.receivers.ejb.EJBInOnlyMessageReceiver"/>
-                       <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" \
                class="org.apache.axis2.rpc.receivers.ejb.EJBMessageReceiver"/>
-               </messageReceivers>
-               <parameter \
name="remoteInterfaceName">org.apache.axis2.samples.ejb.session.interfaces.TimeServiceRemote</parameter>
                
-               <parameter \
name="homeInterfaceName">org.apache.axis2.samples.ejb.session.interfaces.TimeServiceRemoteHome</parameter>
                
-               <parameter \
name="beanJndiName">org.apache.axis2.samples.ejb.session.interfaces.TimeServiceLocalHome</parameter>
                
-               <parameter name="service_type">ejb_service</parameter>
-               <!--for jboss -->
-               <parameter name="providerUrl">jnp://localhost:1099</parameter>
-               <parameter \
                name="jndiContextClass">org.jnp.interfaces.NamingContextFactory</parameter>
                
-
-               <!--for geronimo
-               <parameter name="providerUrl">localhost:4201</parameter>
-               <parameter \
                name="jndiContextClass">org.openejb.client.JNDIContext</parameter>
-               -->
-       </service>
-	</serviceGroup>
-    */
-    private OMElement createServicesXMLForEJBService(String[] serviceClasses, String \
                providerURL,
-                                                     String jndiContextClass,
-                                                     String userName,
-                                                     String password,
-                                                     String beanJNDIName,
-                                                     String homeInterface,
-                                                     String remoteInterface) {
-
-        OMFactory factory = OMAbstractFactory.getOMFactory();
-        OMNamespace emptyNS = factory.createOMNamespace("", "");
-        OMElement serviceGroupEle = factory.createOMElement("serviceGroup", "", "");
-
-        //Although we have a loop here, only one class will come
-        for (int i = 0; i < serviceClasses.length; i++) {
-            String serviceClass = serviceClasses[i];
-            String serviceName = serviceClass.substring(serviceClass.lastIndexOf(
-                    ".") + 1);
-
-            OMElement serviceEle = factory.createOMElement("service", "", "");
-
-            OMElement schemaEle = factory.createOMElement("schema", "", "");
-            schemaEle.addAttribute(
-                    factory.createOMAttribute("elementFormDefaultQualified", \
                emptyNS, "false"));
-
-            serviceEle.addAttribute(factory.createOMAttribute("name", emptyNS,
-                                                              serviceName));
-
-            OMElement msgReceiversEle = factory.createOMElement("messageReceivers",
-                                                                "", "");
-            OMElement msgReceiverEle1 = factory.createOMElement("messageReceiver",
-                                                                "", "");
-            msgReceiverEle1.addAttribute("mep",
-                                         "http://www.w3.org/ns/wsdl/in-only", \
                emptyNS);
-            msgReceiverEle1.addAttribute("class",
-                                         \
                "org.apache.axis2.rpc.receivers.ejb.EJBInOnlyMessageReceiver",
-                                         emptyNS);
-
-            OMElement msgReceiverEle2 = factory.createOMElement("messageReceiver",
-                                                                "", "");
-            msgReceiverEle2.addAttribute("mep",
-                                         "http://www.w3.org/ns/wsdl/in-out", \
                emptyNS);
-            msgReceiverEle2.addAttribute("class",
-                                         \
                "org.apache.axis2.rpc.receivers.ejb.EJBMessageReceiver",
-                                         emptyNS);
-            msgReceiversEle.addChild(msgReceiverEle1);
-            msgReceiversEle.addChild(msgReceiverEle2);
-
-            OMElement parameterEle1 = factory.createOMElement("parameter", "", "");
-            parameterEle1.addAttribute("name", EJBUtil.EJB_REMOTE_INTERFACE_NAME, \
                emptyNS);
-            parameterEle1.setText(remoteInterface);
-
-            OMElement parameterEle2 = factory.createOMElement("parameter", "", "");
-            parameterEle2.addAttribute("name", EJBUtil.EJB_HOME_INTERFACE_NAME, \
                emptyNS);
-            parameterEle2.setText(homeInterface);
-
-            OMElement parameterEle3 = factory.createOMElement("parameter", "", "");
-            parameterEle3.addAttribute("name", EJBUtil.EJB_JNDI_NAME, emptyNS);
-            parameterEle3.setText(beanJNDIName);
-
-            OMElement parameterEle4 = factory.createOMElement("parameter", "", "");
-            parameterEle4.addAttribute("name", EJBUtil.EJB_PROVIDER_URL, emptyNS);
-            parameterEle4.setText(providerURL);
-
-            OMElement parameterEle5 = factory.createOMElement("parameter", "", "");
-            parameterEle5.addAttribute("name", EJBUtil.EJB_INITIAL_CONTEXT_FACTORY, \
                emptyNS);
-            parameterEle5.setText(jndiContextClass);
-
-            OMElement parameterEle6 = factory.createOMElement("parameter", "", "");
-            parameterEle6.addAttribute("name", EJBUtil.EJB_JNDI_USERNAME, emptyNS);
-            parameterEle6.setText(userName);
-
-            OMElement parameterEle7 = factory.createOMElement("parameter", "", "");
-            parameterEle7.addAttribute("name", EJBUtil.EJB_JNDI_PASSWORD, emptyNS);
-            parameterEle7.setText(password);
-
-            OMElement parameterEle8 = factory.createOMElement("parameter", "", "");
-            parameterEle8.addAttribute("name", "ServiceClass", emptyNS);
-            parameterEle8.setText(serviceClass);
-
-            OMElement parameterEle9 = factory.createOMElement("parameter", "", "");
-            parameterEle9.addAttribute("name", ServerConstants.SERVICE_TYPE, \
                emptyNS);
-            parameterEle9.setText(ServerConstants.SERVICE_TYPE_EJB);
-
-            serviceEle.addChild(schemaEle);
-            serviceEle.addChild(msgReceiversEle);
-            serviceEle.addChild(parameterEle1);
-            serviceEle.addChild(parameterEle2);
-            serviceEle.addChild(parameterEle3);
-            serviceEle.addChild(parameterEle4);
-            serviceEle.addChild(parameterEle5);
-            serviceEle.addChild(parameterEle6);
-            serviceEle.addChild(parameterEle7);
-            serviceEle.addChild(parameterEle8);
-            serviceEle.addChild(parameterEle9);
-
-            serviceGroupEle.addChild(serviceEle);
-        }
-        return serviceGroupEle;
-    }
+	private static final String SERVICE_MUST_CONTAIN_AT_LEAST_ONE_TRANSPORT = "Cannot \
remove transport binding. " +			+ "<br/>A service must contain at least one transport \
binding!"; +	private PersistenceManager pm = new PersistenceManager();
+
+	static {
+		MBeanRegistrar.registerMBean(new ServiceAdmin());
+	}
+
+	public ServiceAdmin() {
+	}
+
+	/**
+	 * Expose this service only via the specified transport
+	 * 
+	 * @param serviceId
+	 * @param transportProtocols
+	 * @return Status Message
+	 * @throws AxisFault
+	 */
+	public String exposeServiceOnlyViaTransports(String serviceId,
+			String[] transportProtocols) throws AxisFault {
+
+		AxisService axisService = getAxisConfig().getService(serviceId);
+		ArrayList transports = new ArrayList();
+		for (int i = 0; i < transportProtocols.length; i++) {
+			transports.add(transportProtocols[i]);
+		}
+		axisService.setExposedTransports(transports);
+
+		ServiceDO serviceDO = pm.getService(axisService.getName(),
+				ServiceIdentifierDO.EMPTY_SERVICE_VERSION);
+		serviceDO.setIsExposedOnAllTransports(false);
+
+		TransportDO[] transportDOs = pm.getTransports();
+		for (int i = 0; i < transportDOs.length; i++) { // Remove all transports
+			serviceDO.getTransports().remove(transportDOs[i]);
+		}
+		for (int i = 0; i < transportProtocols.length; i++) {
+			TransportDO transportDO = pm.getTransport(transportProtocols[i]);
+			serviceDO.addTransport(transportDO); // add only specified
+			// transports
+			pm.updateEntity(transportDO);
+		}
+
+		try {
+			pm.updateService(serviceDO);
+		} catch (ServiceNotFoundException e) {
+			String msg = "Service with name " + serviceId + " not found.";
+			log.error(msg);
+			throw new AxisFault(msg, e);
+		}
+		return "Successfully add selected transport bindings to service "
+				+ serviceId;
+	}
+
+	public String addTransportBinding(String serviceId, String transportProtocol)
+			throws AxisFault {
+		if (transportProtocol == null || transportProtocol.trim().length() == 0) {
+			return "Invalid transport " + transportProtocol;
+		}
+		AxisService axisService = getAxisConfig().getService(serviceId);
+
+		if (axisService.isExposedTransport(transportProtocol)) {
+			return "Service [" + serviceId + "] already contains the "
+					+ transportProtocol + " transport binding!";
+		}
+
+		ServiceDO serviceDO = pm.getService(axisService.getName(),
+				ServiceIdentifierDO.EMPTY_SERVICE_VERSION);
+		if (serviceDO.getIsUTAuthEnabled()) {
+			if (!transportProtocol
+					.equalsIgnoreCase(ServerConstants.HTTPS_TRANSPORT)) {
+				throw new AxisFault(
+						"Cannot add non-HTTPS transport binding for Service ["
+								+ serviceId
+								+ "] since a security scenario which requires the "
+								+ "service to contain only the HTTPS transport binding"
+								+ " has been applied to this service.");
+			}
+		}
+
+		if (!axisService.isEnableAllTransports()) {
+			axisService.addExposedTransport(transportProtocol);
+		} else {
+			return "Service [" + serviceId + "] already contains the "
+					+ transportProtocol + " transport binding!";
+		}
+
+		TransportDO transportDO = pm.getTransport(transportProtocol);
+		if (transportDO != null) {
+			serviceDO.setIsExposedOnAllTransports(false);
+			serviceDO.addTransport(transportDO);
+
+			try {
+				pm.updateService(serviceDO);
+				pm.updateEntity(transportDO);
+			} catch (ServiceNotFoundException e) {
+				String msg = "Service with name " + serviceId + " not found.";
+				log.error(msg);
+				throw new AxisFault(msg, e);
+			}
+		}
+
+		return "Successfully added " + transportProtocol
+				+ " transport binding to service " + serviceId;
+	}
+
+	public String removeTransportBinding(String serviceId,
+			String transportProtocol) throws AxisFault {
+
+		AxisService axisService = getAxisConfig().getService(serviceId);
+		ServiceDO serviceDO = pm.getService(axisService.getName(),
+				ServiceIdentifierDO.EMPTY_SERVICE_VERSION);
+		if (serviceDO.getIsUTAuthEnabled()) {
+			if (transportProtocol
+					.equalsIgnoreCase(ServerConstants.HTTPS_TRANSPORT)) {
+				throw new AxisFault(
+						"HTTPS transport binding for Service ["
+								+ serviceId
+								+ "] cannot be removed since a security scenario which requires"
+								+ " HTTPS has been applied to this service.");
+			}
+		}
+		TransportDO transportDO = pm.getTransport(transportProtocol);
+		if (!axisService.isEnableAllTransports()) {
+			if (axisService.getExposedTransports().size() == 1) {
+				return SERVICE_MUST_CONTAIN_AT_LEAST_ONE_TRANSPORT;
+			} else {
+				serviceDO.getTransports().remove(transportDO);
+				transportDO.getServices().remove(serviceDO);
+				axisService.removeExposedTransport(transportProtocol);
+				pm.updateEntity(transportDO);
+			}
+		} else {
+			TransportSummary[] transports = new TransportAdmin()
+					.listTransports();
+
+			if (transports.length == 1) {
+				return SERVICE_MUST_CONTAIN_AT_LEAST_ONE_TRANSPORT;
+			} else {
+				for (int i = 0; i < transports.length; i++) {
+					String protocol = transports[i].getProtocol();
+
+					if (!protocol.equals(transportProtocol)) {
+						axisService.addExposedTransport(protocol);
+						TransportDO addTransportDO = pm.getTransport(protocol);
+						serviceDO.addTransport(addTransportDO);
+						pm.updateEntity(addTransportDO);
+					}
+				}
+			}
+		}
+
+		serviceDO.setIsExposedOnAllTransports(false);
+		try {
+			pm.updateService(serviceDO);
+		} catch (ServiceNotFoundException e) {
+			String msg = "Service with name " + serviceId + " not found.";
+			log.error(msg);
+			throw new AxisFault(msg, e);
+		}
+
+		return "Removed " + transportProtocol + " transport binding for "
+				+ serviceId + " service";
+	}
+
+	public String[] getExposedTransports(String serviceId) throws AxisFault {
+		AxisService axisService = getAxisConfig().getService(serviceId);
+		if (!axisService.isEnableAllTransports()) {
+			List exposedTransports = axisService.getExposedTransports();
+			return (String[]) exposedTransports
+					.toArray(new String[exposedTransports.size()]);
+		} else {
+			HashMap transportsIn = getConfigContext().getAxisConfiguration()
+					.getTransportsIn();
+			String[] transports = new String[transportsIn.size()];
+			int i = 0;
+
+			for (Iterator transportsIter = transportsIn.values().iterator(); transportsIter
+					.hasNext();) {
+				TransportInDescription tiDesc = (TransportInDescription) transportsIter
+						.next();
+				transports[i++] = tiDesc.getName();
+			}
+
+			return transports;
+		}
+	}
+
+	public void creatService(String serviceName) throws AxisFault {
+		AxisService service = AxisService.createService(serviceName,
+				getAxisConfig());
+		getAxisConfig().addService(service);
+	}
+
+	public void stopService(String serviceName) throws Exception {
+		AxisService axisService = getAxisConfig().getServiceForActivation(
+				serviceName);
+		if (axisService == null) {
+			throw new Exception("Invalid service name " + serviceName);
+		}
+
+		try {
+			getAxisConfig().stopService(serviceName);
+		} catch (AxisFault e) {
+			String msg = "Cannot stop service " + serviceName;
+			log.error(msg, e);
+			throw new Exception(msg);
+		}
+	}
+
+	/*
+	 * public String[] getActiveEndPoints() { List endpoints = new ArrayList();
+	 * for (Iterator iter = getAxisConfig().getServices().values().iterator();
+	 * iter.hasNext();) { AxisService service = (AxisService) iter.next(); if
+	 * (service.isActive()) {
+	 *//*
+		 * String[] eprs; try { eprs = service.getEPRs(); } catch (AxisFault e) {
+		 * throw new RuntimeException("Cannot get service EPRs", e); } for (int
+		 * i = 0; i < eprs.length; i++) { String epr = eprs[i]; if
+		 * (!endpoints.contains(epr)) { endpoints.add(epr); } }
+		 *//*
+		 * 
+		 * for (Iterator endpointIter =
+		 * service.getEndpoints().values().iterator(); endpointIter.hasNext();) {
+		 * AxisEndpoint axisEndpoint = (AxisEndpoint) endpointIter.next();
+		 * String binding = axisEndpoint.getBinding().getName().toString();
+		 * String epr = axisEndpoint.getEndpointURL();
+		 * 
+		 * endpoints.add(epr + " [" + binding + "]"); } } } return (String[])
+		 * endpoints.toArray(new String[endpoints.size()]); }
+		 */
+
+	public int getNumberOfActiveServices() throws Exception {
+		int activeServices = 0;
+		HashMap services = getAxisConfig().getServices();
+		for (Iterator iterator = services.values().iterator(); iterator
+				.hasNext();) {
+			AxisService service = (AxisService) iterator.next();
+			if (service.isActive()) {
+				activeServices++;
+			}
+		}
+		return activeServices;
+	}
+
+	public int getNumberOfInactiveServices() throws Exception {
+		int inactiveServices = 0;
+		HashMap services = getAxisConfig().getServices();
+		for (Iterator iterator = services.values().iterator(); iterator
+				.hasNext();) {
+			AxisService service = (AxisService) iterator.next();
+			if (!service.isActive()) {
+				inactiveServices++;
+			}
+		}
+		return inactiveServices;
+	}
+
+	public void startService(String serviceName) throws Exception {
+		AxisService axisService = getAxisConfig().getServiceForActivation(
+				serviceName);
+
+		if (axisService == null) {
+			throw new Exception("Invalid service name " + serviceName);
+		}
+		try {
+			getAxisConfig().startService(serviceName);
+		} catch (AxisFault e) {
+			String msg = "Cannot start service " + serviceName;
+			log.error(msg, e);
+			throw new Exception(msg);
+		}
+	}
+
+	private String[] getServiceEPRs(AxisService service) throws AxisFault {
+		if (!service.isActive()) {
+			return new String[] { "Service is inactive. No valid end point references." };
+		}
+		return service.getEPRs();
+	}
+
+	public ServiceMetaData getServiceData(String serviceName) throws AxisFault {
+		AxisService service = getAxisConfig().getServiceForActivation(
+				serviceName);
+		Parameter serviceTypeParam = service
+				.getParameter(ServerConstants.SERVICE_TYPE);
+		String serviceType;
+		if (serviceTypeParam != null) {
+			serviceType = (String) serviceTypeParam.getValue();
+		} else {
+			serviceType = "Normal";
+		}
+		List ops = new ArrayList();
+		for (Iterator opIter = service.getOperations(); opIter.hasNext();) {
+			AxisOperation axisOperation = (AxisOperation) opIter.next();
+
+			if (axisOperation.getName() != null) {
+				ops.add(axisOperation.getName().getLocalPart());
+			}
+		}
+
+		ServiceMetaData smd = new ServiceMetaData();
+
+		try {
+			StatisticsClient statClient = new StatisticsClient();
+			smd.setServiceRequestCount(statClient
+					.getServiceRequestCount(serviceName));
+			smd.setServiceResponseCount(statClient
+					.getServiceResponseCount(serviceName));
+			smd.setServiceFaultCount(statClient
+					.getServiceFaultCount(serviceName));
+			smd.setMaxResponseTime(statClient
+					.getMaxServiceResponseTime(serviceName));
+			smd.setMinResponseTime(statClient
+					.getMinServiceResponseTime(serviceName));
+			smd.setAvgResponseTime(statClient
+					.getAvgServiceResponseTime(serviceName));
+		} catch (Exception e) {
+			String msg = "Could not get service statistics";
+			log.error(msg, e);
+			throw new AxisFault(msg, e);
+		}
+
+		smd.setOperations((String[]) ops.toArray(new String[ops.size()]));
+		smd.setName(serviceName);
+		smd.setServiceId(serviceName);
+		smd.setServiceVersion("");
+		smd.setActive(service.isActive());
+		smd.setEprs(getServiceEPRs(service));
+		smd.setServiceType(serviceType);
+		AxisServiceGroup serviceGroup = (AxisServiceGroup) service.getParent();
+		smd.setFoundWebResources(serviceGroup.isFoundWebResources());
+		smd.setScope(service.getScope());
+		smd.setServiceGroupName(serviceGroup.getServiceGroupName());
+
+		if (service.getDocumentation() != null) {
+			smd.setDescription(service.getDocumentation());
+		} else {
+			smd.setDescription("No service description found");
+		}
+
+		Parameter parameter = service
+				.getParameter(Constants.Configuration.ENABLE_MTOM);
+		if (parameter != null) {
+			smd.setEnableMTOM((String) parameter.getValue());
+		} else {
+			smd.setEnableMTOM("false");
+		}
+
+		return smd;
+	}
+
+	/**
+	 * set the service parameter enableMTOM to manipulate MTOM flag
+	 * true/false/optional
+	 * 
+	 * @param flag
+	 * @param serviceName
+	 */
+	public void configureMTOM(String flag, String serviceName) throws AxisFault {
+
+		AxisService service = getAxisConfig().getService(serviceName);
+		if (service == null) {
+			throw new AxisFault("AxisService " + serviceName
+					+ " cannot be found.");
+		}
+
+		ArrayList parameters = service.getParameters();
+
+		boolean found = false;
+		for (Iterator iterator = parameters.iterator(); iterator.hasNext();) {
+			Parameter parameter = (Parameter) iterator.next();
+
+			if (parameter.getParameterType() == Parameter.TEXT_PARAMETER
+					&& parameter.getValue().toString().equals(
+							Constants.Configuration.ENABLE_MTOM)) {
+				parameter.setValue(flag.trim());
+				found = true;
+				break;
+			}
+
+		}
+		if (!found) {
+			Parameter parameter = ParameterUtil.createParameter(
+					Constants.Configuration.ENABLE_MTOM, flag.trim());
+			service.addParameter(parameter);
+		}
+
+		Parameter parameter = service
+				.getParameter(Constants.Configuration.ENABLE_MTOM);
+		for (Iterator iterator1 = service.getOperations(); iterator1.hasNext();) {
+			AxisOperation axisOperation = (AxisOperation) iterator1.next();
+			axisOperation.addParameter(ParameterUtil.createParameter(
+					Constants.Configuration.ENABLE_MTOM, (String) parameter
+							.getValue()));
+		}
+		ServiceDO serviceDO = pm.getService(serviceName,
+				ServiceIdentifierDO.EMPTY_SERVICE_VERSION);
+		ServiceParameterDO paramDO = pm.getServiceParameter(serviceDO,
+				parameter.getName());
+		if (paramDO != null) {
+			paramDO.setValue(parameter.getParameterElement().toString());
+			pm.updateEntity(paramDO);
+		} else {
+			ServiceParameterDO param = new ServiceParameterDO();
+			param.setName(parameter.getName());
+			param.setValue(parameter.getParameterElement().toString());
+			param.setService(serviceDO);
+
+			try {
+				pm.addEntity(param);
+			} catch (DuplicateEntityException e) {
+				log.error("Service Parameter already exists", e);
+			}
+
+		}
+
+		OperationDO[] operationDOs = pm.getOperations(serviceDO);
+		if (operationDOs != null) {
+			for (int j = 0; j < operationDOs.length; j++) {
+				OperationDO operationDO = operationDOs[j];
+				OperationParameterDO[] operationParameterDOs = pm
+						.getOperationParameters(operationDO);
+				OperationParameterDO operationParameterDO = null;
+				for (int k = 0; k < operationParameterDOs.length; k++) {
+					if (operationParameterDOs[k].getName().equals(
+							parameter.getName())) {
+						operationParameterDO = operationParameterDOs[k];
+						break;
+					}
+				}
+				if (operationParameterDO != null) {
+					operationParameterDO.setValue(parameter
+							.getParameterElement().toString());
+					pm.updateEntity(operationParameterDO);
+				} else {
+					operationParameterDO = new OperationParameterDO();
+					operationParameterDO.setName(parameter.getName());
+					operationParameterDO.setValue(parameter
+							.getParameterElement().toString());
+					operationParameterDO.setOperation(operationDO);
+					try {
+						pm.addEntity(operationParameterDO);
+					} catch (DuplicateEntityException e) {
+						log.error("Service Parameter already exists", e);
+					}
+
+				}
+
+			}
+		}
+	}
+
+	/**
+	 * @param serviceGroupId
+	 * @return list of services
+	 * @throws AxisFault
+	 */
+	public ServiceMetaData[] listServices(String serviceGroupId)
+			throws AxisFault {
+		AxisServiceGroup asg = getAxisConfig().getServiceGroup(serviceGroupId);
+		List services = new ArrayList();
+
+		if (asg == null) {
+			throw new AxisFault("Invalid service group name");
+		} else {
+			for (Iterator serviceIter = asg.getServices(); serviceIter
+					.hasNext();) {
+				AxisService axisService = (AxisService) serviceIter.next();
+				Parameter serviceTypeParam = axisService
+						.getParameter(ServerConstants.SERVICE_TYPE);
+				String serviceType;
+				if (serviceTypeParam != null) {
+					serviceType = (String) serviceTypeParam.getValue();
+				} else {
+					serviceType = "Normal";
+				}
+				List ops = new ArrayList();
+				for (Iterator opIter = axisService.getOperations(); opIter
+						.hasNext();) {
+					AxisOperation axisOperation = (AxisOperation) opIter.next();
+					ops.add(axisOperation.getName().getLocalPart());
+				}
+
+				ServiceMetaData smd = new ServiceMetaData();
+				String serviceName = axisService.getName();
+				try {
+					StatisticsClient statClient = new StatisticsClient();
+					smd.setServiceRequestCount(statClient
+							.getServiceRequestCount(serviceName));
+					smd.setServiceResponseCount(statClient
+							.getServiceResponseCount(serviceName));
+					smd.setServiceFaultCount(statClient
+							.getServiceFaultCount(serviceName));
+					smd.setMaxResponseTime(statClient
+							.getMaxServiceResponseTime(serviceName));
+					smd.setMinResponseTime(statClient
+							.getMinServiceResponseTime(serviceName));
+					smd.setAvgResponseTime(statClient
+							.getAvgServiceResponseTime(serviceName));
+				} catch (Exception e) {
+					throw AxisFault.makeFault(e);
+				}
+				smd.setOperations((String[]) ops
+						.toArray(new String[ops.size()]));
+				smd.setName(serviceName);
+				smd.setServiceId(serviceName);
+				smd.setEprs(getServiceEPRs(axisService));
+				smd.setServiceVersion("");
+				smd.setActive(axisService.isActive());
+				smd.setServiceType(serviceType);
+				smd.setDescription(axisService.getDocumentation());
+				services.add(smd);
+			}
+		}
+		Collections.sort(services, new Comparator() {
+			public int compare(Object arg0, Object arg1) {
+				ServiceMetaData a = (ServiceMetaData) arg0;
+				ServiceMetaData b = (ServiceMetaData) arg1;
+				return a.getName().compareToIgnoreCase(b.getName());
+			}
+		});
+
+		return (ServiceMetaData[]) services
+				.toArray(new ServiceMetaData[services.size()]);
+	}
+
+	// return all available service metadata (not counts)
+	public Object[] getServiceInfo(String serviceId, String serviceVersion)
+			throws AxisFault {
+		throw new AxisFault("Operation not yet implemented");
+	}
+
+	// return all accumulated data about this service
+	public Object[] getServiceStatus(String serviceId, String serviceVersion)
+			throws AxisFault {
+		throw new AxisFault("Operation not yet implemented");
+	}
+
+	// return all parameters for this service (including inherited ones),
+	// where each parameter is an XML fragment representing the "parameter"
+	// element
+	public OMElement[] getServiceParameters(String serviceId,
+			String serviceVersion) throws AxisFault {
+		ArrayList allParameters = new ArrayList();
+		ArrayList globalParameters = getAxisConfig().getParameters();
+
+		for (int i = 0; i < globalParameters.size(); i++) {
+			Parameter parameter = (Parameter) globalParameters.get(i);
+			allParameters.add(parameter.getParameterElement());
+		}
+
+		AxisService service = getAxisConfig().getService(serviceId);
+
+		if (service == null) {
+			throw new AxisFault("Invalid service name");
+		}
+
+		ArrayList serviceParams = service.getParameters();
+
+		for (int i = 0; i < serviceParams.size(); i++) {
+			Parameter parameter = (Parameter) serviceParams.get(i);
+
+			String paramName = parameter.getName();
+			if (paramName != null && paramName.trim().length() != 0) {
+				if (parameter.getParameterElement() != null) {
+					allParameters.add(parameter.getParameterElement());
+				} else if (parameter.getValue() != null
+						&& parameter.getValue() instanceof String) {
+					parameter = ParameterUtil.createParameter(paramName.trim(),
+							(String) parameter.getValue());
+					allParameters.add(parameter.getParameterElement());
+				}
+			}
+		}
+		return (OMElement[]) allParameters.toArray(new OMElement[allParameters
+				.size()]);
+	}
+
+	// return only the parameters for explicitly set for this service (not
+	// including inherited ones),
+	// where each parameter is an XML fragment representing the <parameter>
+	// element
+	public OMElement[] getDeclaredServiceParameters(String serviceId,
+			String serviceVersion) throws AxisFault {
+		ArrayList allParameters = new ArrayList();
+		AxisService axisService = getAxisConfig().getService(serviceId);
+
+		if (axisService == null) {
+			throw new AxisFault("invalid service name " + serviceId);
+		}
+
+		ArrayList params = axisService.getParameters();
+
+		for (int i = 0; i < params.size(); i++) {
+			Parameter parameter = (Parameter) params.get(i);
+			String paramName = parameter.getName();
+			if (paramName != null && paramName.trim().length() != 0) {
+				if (parameter.getParameterElement() != null) {
+					allParameters.add(parameter.getParameterElement());
+				} else if (parameter.getValue() != null
+						&& parameter.getValue() instanceof String) {
+					parameter = ParameterUtil.createParameter(paramName.trim(),
+							(String) parameter.getValue());
+					allParameters.add(parameter.getParameterElement());
+				}
+			}
+		}
+
+		return (OMElement[]) allParameters.toArray(new OMElement[allParameters
+				.size()]);
+	}
+
+	public void setServiceParameters(String serviceId, String serviceVersion,
+			OMElement[] paramterElements) throws AxisFault {
+		for (int i = 0; i < paramterElements.length; i++) {
+			setServiceParameter(serviceId, serviceVersion, paramterElements[i]);
+		}
+
+	}
+
+	public void setServiceParameter3(String serviceId, Parameter parameter)
+			throws AxisFault {
+
+		AxisService axisService = getAxisConfig().getService(serviceId);
+
+		if (axisService == null) {
+			throw new AxisFault("Invalid service name '" + serviceId + "'");
+		}
+
+		// Persist the parameter
+		ServiceDO serviceDO = pm.getService(serviceId,
+				ServiceIdentifierDO.EMPTY_SERVICE_VERSION);
+		Parameter p = axisService.getParameter(parameter.getName());
+		ServiceParameterDO paramDO = pm.getServiceParameter(serviceDO,
+				parameter.getName());
+		if (p != null && paramDO != null) {
+
+			// Setting a new value for a parameter declared in AxisService
+			if (!p.isLocked()) {
+				axisService.addParameter(parameter);
+				paramDO.setValue(parameter.getParameterElement().toString());
+				pm.updateEntity(paramDO);
+			}
+		} else {
+
+			// If we are adding a new AxisService param or overriding a param in
+			// the Configuration hierarchy
+			if (p == null || !p.isLocked()) {
+				axisService.addParameter(parameter);
+
+				ServiceParameterDO param = new ServiceParameterDO();
+				param.setName(parameter.getName());
+				param.setValue(parameter.getParameterElement().toString());
+				param.setService(serviceDO);
+
+				try {
+					pm.addEntity(param);
+				} catch (DuplicateEntityException e) {
+					log.error("Service Parameter already exists", e);
+				}
+			}
+		}
+	}
+
+	public void setServiceParameter(String serviceId, String serviceVersion,
+			OMElement paramterElement) throws AxisFault {
+
+		AxisService axisService = getAxisConfig().getService(serviceId);
+
+		if (axisService == null) {
+			throw new AxisFault("Invalid service name '" + serviceId + "'");
+		}
+
+		// Persist the parameter
+		ServiceDO serviceDO = pm.getService(serviceId,
+				ServiceIdentifierDO.EMPTY_SERVICE_VERSION);
+		Parameter parameter = ParameterUtil.createParameter(paramterElement);
+		Parameter p = axisService.getParameter(parameter.getName());
+		ServiceParameterDO paramDO = pm.getServiceParameter(serviceDO,
+				parameter.getName());
+		if (p != null && paramDO != null) {
+
+			// Setting a new value for a parameter declared in AxisService
+			if (!p.isLocked()) {
+				axisService.addParameter(parameter);
+				paramDO.setValue(paramterElement.toString());
+				pm.updateEntity(paramDO);
+			}
+		} else {
+
+			// If we are adding a new AxisService param or overriding a param in
+			// the Configuration hierarchy
+			if (p == null || !p.isLocked()) {
+				axisService.addParameter(parameter);
+
+				ServiceParameterDO param = new ServiceParameterDO();
+				param.setName(parameter.getName());
+				param.setValue(paramterElement.toString());
+				param.setService(serviceDO);
+
+				try {
+					pm.addEntity(param);
+				} catch (DuplicateEntityException e) {
+					log.error("Service Parameter already exists", e);
+				}
+			}
+		}
+	}
+
+	public void removeServiceSpecificParameter(String serviceId,
+			String serviceVersion, OMElement paramterElement) throws AxisFault {
+
+		AxisService axisService = getAxisConfig().getService(serviceId);
+
+		if (axisService == null) {
+			throw new AxisFault("Invalid service name '" + serviceId + "'");
+		}
+
+		// un-Persist the parameter
+		ServiceDO serviceDO = pm.getService(serviceId,
+				ServiceIdentifierDO.EMPTY_SERVICE_VERSION);
+		Parameter parameter = ParameterUtil.createParameter(paramterElement);
+		Parameter p = axisService.getParameter(parameter.getName());
+		ServiceParameterDO paramDO = pm.getServiceParameter(serviceDO,
+				parameter.getName());
+		if (p != null && paramDO != null) {
+
+			// Setting a new value for a parameter declared in AxisService
+			if (!p.isLocked()) {
+				axisService.removeParameter(parameter);
+				pm.deleteEntity(paramDO);
+			}
+		} else {
+
+			if (p == null || !p.isLocked()) {
+				axisService.removeParameter(parameter);
+
+			}
+		}
+	}
+
+	public void setServiceParameter2(String serviceName, Parameter parameter)
+			throws AxisFault {
+		AxisService axisService = getAxisConfig().getService(serviceName);
+
+		if (axisService == null) {
+			throw new AxisFault("Invalid service name '" + serviceName + "'");
+		}
+
+		// Persist the parameter
+		ServiceDO serviceDO = pm.getService(serviceName,
+				ServiceIdentifierDO.EMPTY_SERVICE_VERSION);
+		Parameter p = axisService.getParameter(parameter.getName());
+
+		if (p != null) {
+			if (!p.isLocked()) {
+				axisService.addParameter(parameter);
+
+				ServiceParameterDO paramDO = pm.getServiceParameter(serviceDO,
+						parameter.getName());
+				paramDO.setValue(p.getParameterElement().toString());
+				pm.updateEntity(paramDO);
+			}
+		} else {
+			axisService.addParameter(parameter);
+
+			ServiceParameterDO param = new ServiceParameterDO();
+			param.setName(parameter.getName());
+			param.setValue(parameter.getParameterElement().toString());
+			param.setService(serviceDO);
+
+			try {
+				pm.addEntity(param);
+			} catch (DuplicateEntityException e) {
+				log.error("Service Parameter already exists", e);
+			}
+		}
+	}
+
+	public void removeServiceParameter(String serviceName, String paramName)
+			throws AxisFault {
+		AxisService axisService = getAxisConfig().getService(serviceName);
+		axisService.removeParameter(new Parameter(paramName, null));
+		ServiceDO serviceDO = pm.getService(serviceName,
+				ServiceIdentifierDO.EMPTY_SERVICE_VERSION);
+		ServiceParameterDO sp = new ServiceParameterDO();
+		sp.setService(serviceDO);
+		sp.setName(paramName);
+		serviceDO.getParameters().remove(sp);
+		pm.updateEntity(serviceDO);
+	}
+
+	public OMElement getWSDL(String serviceName) throws AxisFault {
+		AxisService axisService = getAxisConfig().getService(serviceName);
+
+		if (axisService != null) {
+			ByteArrayOutputStream out = new ByteArrayOutputStream();
+			String url = MessageContext.getCurrentMessageContext().getTo()
+					.getAddress();
+			int ipindex = url.indexOf("//");
+			String ip = null;
+
+			if (ipindex >= 0) {
+				ip = url.substring(ipindex + 2, url.length());
+
+				int seperatorIndex = ip.indexOf(":");
+
+				if (seperatorIndex > 0) {
+					ip = ip.substring(0, seperatorIndex);
+				}
+			}
+
+			axisService.printWSDL(out, ip);
+
+			try {
+				XMLStreamReader xmlReader = XMLInputFactory.newInstance()
+						.createXMLStreamReader(
+								new ByteArrayInputStream(out.toByteArray()));
+
+				OMFactory fac = OMAbstractFactory.getOMFactory();
+				OMNamespace namespace = fac.createOMNamespace(
+						"http://org.apache.axis2/xsd", "ns1");
+				OMElement wsdlWrapper = fac.createOMElement("getWSDLResponse",
+						namespace);
+				OMElement retvalue = fac.createOMElement("return", null);
+				wsdlWrapper.addChild(retvalue);
+
+				StAXOMBuilder staxOMBuilder = new StAXOMBuilder(fac, xmlReader);
+				retvalue.addChild(staxOMBuilder.getDocumentElement());
+
+				return wsdlWrapper;
+			} catch (XMLStreamException e) {
+				throw AxisFault.makeFault(e);
+			}
+		}
+
+		return null;
+	}
+
+	public OMElement getSchema(String serviceName) throws AxisFault {
+		AxisService axisService = getAxisConfig().getService(serviceName);
+
+		if (axisService != null) {
+			ByteArrayOutputStream out = new ByteArrayOutputStream();
+			axisService.printSchema(out);
+
+			try {
+				XMLStreamReader xmlReader = XMLInputFactory.newInstance()
+						.createXMLStreamReader(
+								new ByteArrayInputStream(out.toByteArray()));
+				OMFactory fac = OMAbstractFactory.getOMFactory();
+				OMElement wsdlWrapper = fac.createOMElement("getWSDLReponse",
+						null);
+				StAXOMBuilder staxOMBuilder = new StAXOMBuilder(fac, xmlReader);
+				wsdlWrapper.addChild(staxOMBuilder.getDocumentElement());
+
+				return wsdlWrapper;
+			} catch (XMLStreamException e) {
+				throw AxisFault.makeFault(e);
+			}
+		}
+
+		return null;
+	}
+
+	public OMElement getPolicy(String serviceId, String serviceVersion)
+			throws AxisFault {
+		AxisService axisService = getAxisConfig().getService(serviceId);
+
+		if (axisService == null) {
+			throw new AxisFault("invalid service name");
+		}
+
+		PolicySubject servicePolicySubject = axisService.getPolicySubject();
+		List policyList = new ArrayList(servicePolicySubject
+				.getAttachedPolicyComponents());
+		Policy servicePolicy = org.apache.axis2.util.PolicyUtil
+				.getMergedPolicy(policyList, axisService);
+
+		if (servicePolicy == null) {
+			return PolicyUtil.getEmptyPolicyAsOMElement();
+		}
+
+		return PolicyUtil.getPolicyAsOMElement(servicePolicy);
+	}
+
+	public PolicyData[] getPolicies(String serviceId, String serviceVersion)
+			throws AxisFault {
+		AxisService axisService = getAxisConfig().getService(serviceId);
+
+		if (axisService == null) {
+			throw new AxisFault("invalid service name");
+		}
+
+		ArrayList policyDataArray = new ArrayList();
+
+		PolicySubject servicePolicySubject = axisService.getPolicySubject();
+		List policyList;
+
+		// services.xml
+		policyList = new ArrayList(servicePolicySubject
+				.getAttachedPolicyComponents());
+
+		if (!policyList.isEmpty()) {
+			PolicyData policyData = new PolicyData();
+			policyData.setWrapper("Policies that are applicable for "
+					+ axisService.getName() + " service");
+			policyData.setPolycies(PolicyUtil.processPolicyElements(policyList
+					.iterator(), new PolicyLocator(axisService)));
+			policyDataArray.add(policyData);
+		}
+
+		for (Iterator iterator = axisService.getEndpoints().values().iterator(); \
iterator.hasNext();) { +			AxisEndpoint axisEndpoint = (AxisEndpoint) \
iterator.next(); +			policyList = new \
ArrayList(axisEndpoint.getPolicySubject().getAttachedPolicyComponents()); +			
+			if (!policyList.isEmpty()) {
+				PolicyData policyData = new PolicyData();
+				policyData.setWrapper("Policies that are applicable for " + \
axisEndpoint.getName() + " endpoint"); \
+				policyData.setPolycies(PolicyUtil.processPolicyElements(policyList \
+						.iterator(), new PolicyLocator(axisService))); \
+				policyDataArray.add(policyData); +			}			
+		}
+		
+		return (PolicyData[]) policyDataArray
+				.toArray(new PolicyData[policyDataArray.size()]);
+	}
+
+	public boolean removePolicy(String serviceId, String version,
+			String policyId) throws AxisFault {
+		boolean isPolicyRemoved = false;
+		AxisService axisService = getAxisConfig().getService(serviceId);
+		if (axisService == null) {
+			throw new AxisFault("Invalid service name " + serviceId);
+		}
+		
+		PolicySubject servicePolicySubject = axisService.getPolicySubject();
+		if (servicePolicySubject.getAttachedPolicyComponent(policyId) != null) {
+			servicePolicySubject.detachPolicyComponent(policyId);
+			isPolicyRemoved = true;
+		}
+		
+		ServiceDO serviceDO = pm.getService(serviceId, version);
+		List policiesToBeRemoved = new ArrayList();
+		for (Iterator policyIter = serviceDO.getPolicies().iterator(); policyIter
+				.hasNext();) {
+			ServicePolicyDO servicePolicyDO = (ServicePolicyDO) policyIter
+					.next();
+			if (servicePolicyDO.getUuid().equals(policyId)) {
+				policiesToBeRemoved.add(servicePolicyDO);
+			}
+		}
+		Set policies = serviceDO.getPolicies();
+		for (Iterator iterator = policiesToBeRemoved.iterator(); iterator
+				.hasNext();) {
+			policies.remove(iterator.next());
+			isPolicyRemoved = true;
+		}
+		pm.updateEntity(serviceDO);
+		return isPolicyRemoved;
+	}
+
+	public void setPolicy(String serviceId, String version, String policyString)
+			throws AxisFault {
+
+		ByteArrayInputStream bais = new ByteArrayInputStream(policyString
+				.getBytes());
+		OMElement policyElement;
+		try {
+			policyElement = new StAXOMBuilder(bais).getDocumentElement();
+			policyElement.build();
+		} catch (Exception e) {
+			throw new AxisFault(
+					"Cannot deserialize service policy. The policy may be invalid.",
+					e);
+		}
+
+		AxisService axisService = getAxisConfig().getService(serviceId);
+		if (axisService == null) {
+			throw new AxisFault("Invalid service name " + serviceId);
+		}
+
+		if (!policyElement.getLocalName().equals(
+				org.apache.neethi.Constants.ELEM_POLICY)) {
+			policyElement = policyElement.getFirstElement();
+		}
+
+		OMAttribute attribute = policyElement.getAttribute(new QName(
+				org.apache.neethi.Constants.URI_WSU_NS,
+				org.apache.neethi.Constants.ATTR_ID));
+
+		if (attribute == null) {
+			throw new AxisFault("ID Attribute not found in Policy element. "
+					+ "Please verify that the policy XML is valid.");
+		}
+		String idAttrVal = attribute.getAttributeValue();
+
+		PolicySubject servicePolicySubject = axisService.getPolicySubject();
+
+		Policy servicePolicy;
+		try {
+			servicePolicy = PolicyUtil.getPolicyFromOMElement(policyElement);
+
+		} catch (NullPointerException npe) {
+			/*
+			 * Since 'policyElement.toString()' is the actual string which is
+			 * used to create the policy object it logged instead of
+			 * 'policyString'.
+			 */
+			log.error(
+					"Error: When constructing Policy object from the string : "
+							+ policyElement.toString(), npe);
+			throw new AxisFault("Error: Invalid policy", npe);
+
+		} catch (RuntimeException rte) {
+			log.error(
+					"Error: When constructing Policy object from the string : "
+							+ policyElement.toString(), rte);
+			throw new AxisFault("Error: Invalid policy", rte);
+		}
+
+		ServicePolicyDO servicePolicyDO = new ServicePolicyDO();
+		servicePolicyDO.setUuid(idAttrVal);
+		servicePolicyDO.setService(pm.getService(serviceId,
+				ServiceIdentifierDO.EMPTY_SERVICE_VERSION));
+		servicePolicyDO.setPolicy(policyElement.toString());
+
+		if (servicePolicySubject.getAttachedPolicyComponent(idAttrVal) != null) {
+			servicePolicySubject.updatePolicy(servicePolicy);
+
+			try {
+				pm.updateServicePolicy(servicePolicyDO);
+			} catch (ServicePolicyNotFoundException e) {
+				throw AxisFault.makeFault(e);
+			}
+
+		} else {
+			servicePolicySubject.attachPolicy(servicePolicy);
+			servicePolicyDO.setType(ServicePolicyDO.AXIS_SERVICE_POLICY);
+
+			try {
+				pm.addServicePolicy(servicePolicyDO);
+			} catch (ServicePolicyAlreadyExistsException e) {
+				throw AxisFault.makeFault(e);
+			}
+		}
+	}
+
+	public String[] getServiceUsers(String serviceName) throws AxisFault {
+		AxisService axisService = getAxisConfig().getService(serviceName);
+
+		if (axisService == null) {
+			throw new AxisFault("invalid service name " + serviceName);
+		}
+
+		Collection users = new ArrayList();
+		ServiceUserDO[] userDOs = pm.getUsersForService(serviceName,
+				ServiceIdentifierDO.EMPTY_SERVICE_VERSION);
+
+		for (int i = 0; i < userDOs.length; i++) {
+			ServiceUserDO userDO = userDOs[i];
+			users.add(userDO.getUsername());
+		}
+
+		return (String[]) users.toArray(new String[users.size()]);
+	}
+
+	public ServiceUserData[] getServiceUsersWithDescription(String serviceName)
+			throws AxisFault {
+		AxisService axisService = getAxisConfig().getService(serviceName);
+
+		if (axisService == null) {
+			throw new AxisFault("invalid service name " + serviceName);
+		}
+
+		ServiceUserDO[] userDOs = pm.getUsersForService(serviceName,
+				ServiceIdentifierDO.EMPTY_SERVICE_VERSION);
+
+		ServiceUserData[] suData = new ServiceUserData[userDOs.length];
+
+		if (userDOs.length == 0) {
+			return new ServiceUserData[0];
+		}
+
+		ServiceUserDO serviceUserData;
+
+		for (int i = 0; i < suData.length; i++) {
+			serviceUserData = userDOs[i];
+
+			ServiceUserData userData = new ServiceUserData();
+			userData.setUser(serviceUserData.getUsername());
+			userData.setDescription(serviceUserData.getDescription());
+			suData[i] = userData;
+		}
+
+		return suData;
+	}
+
+	public ServiceRoleData[] getServiceRolesWithDescription(String serviceName)
+			throws AxisFault {
+		AxisService axisService = getAxisConfig().getService(serviceName);
+
+		if (axisService == null) {
+			throw new AxisFault("invalid service name " + serviceName);
+		}
+
+		ServiceUserRoleDO[] roleDOs = pm.getRolesForService(serviceName,
+				ServiceIdentifierDO.EMPTY_SERVICE_VERSION);
+
+		ServiceRoleData[] srData = new ServiceRoleData[roleDOs.length];
+
+		if (roleDOs.length == 0) {
+			return new ServiceRoleData[0];
+		}
+
+		ServiceUserRoleDO serviceRoleData;
+
+		for (int i = 0; i < srData.length; i++) {
+			serviceRoleData = roleDOs[i];
+
+			ServiceRoleData roleData = new ServiceRoleData();
+			roleData.setRole(serviceRoleData.getRole());
+			roleData.setDescription(serviceRoleData.getDescription());
+			srData[i] = roleData;
+		}
+
+		return srData;
+	}
+
+	/**
+	 * Get all the fully qualified class names of all the classes in this
+	 * archive
+	 * 
+	 * @param archiveId
+	 * @return all the fully qualified class names of all the classes in this
+	 *         archive
+	 * @throws AxisFault
+	 */
+	public String[] getClassNames(String archiveId) throws AxisFault {
+		String filePath = getFilePathFromArchiveId(archiveId);
+
+		if (filePath != null) {
+			try {
+				String[] entries = new ArchiveManipulator().check(filePath);
+				Collection classnames = new ArrayList();
+
+				for (int i = 0; i < entries.length; i++) {
+					String entry = entries[i];
+
+					if (entry.endsWith(".class")) {
+						entry = entry.replace('/', '.').substring(0,
+								entry.lastIndexOf(".class"));
+						classnames.add(entry);
+					}
+				}
+
+				return (String[]) classnames.toArray(new String[classnames
+						.size()]);
+			} catch (IOException e) {
+				String msg = "Could not read archive";
+				log.error(msg, e);
+				throw new AxisFault(msg, e);
+			}
+		}
+
+		return new String[] { "" };
+	}
+
+	/**
+	 * This method will list all the public methods for the given classes.
+	 * 
+	 * @param classNames
+	 *            full qualified class name
+	 * @return resourcesId array of resource Ids
+	 * @throws AxisFault
+	 *             will be thrown
+	 */
+	public ClassMethodsData[] listMethodsForClass(String[] classNames,
+			String[] resourcesId) throws AxisFault {
+		if (classNames == null || classNames.length == 0) {
+			String msg = "Cannot find classes";
+			log.error(msg);
+			throw new AxisFault(msg);
+		}
+		List methodExcludeList = new ArrayList();
+		methodExcludeList.add("hashCode");
+		methodExcludeList.add("getClass");
+		methodExcludeList.add("equals");
+		methodExcludeList.add("notify");
+		methodExcludeList.add("notifyAll");
+		methodExcludeList.add("toString");
+		methodExcludeList.add("wait");
+		List resourecesList = new ArrayList();
+		for (int i = 0; i < resourcesId.length; i++) {
+			String filePathFromArchiveId = getFilePathFromArchiveId(resourcesId[i]);
+			if (filePathFromArchiveId == null) {
+				throw new AxisFault("File cannot be located for id : "
+						+ resourcesId[i]);
+			}
+			try {
+				resourecesList.add(new File(filePathFromArchiveId).toURL());
+			} catch (MalformedURLException e) {
+				String msg = "MalformedURLException";
+				throw new AxisFault(msg, e);
+			}
+		}
+		URL[] urls = (URL[]) resourecesList.toArray(new URL[resourecesList
+				.size()]);
+		ClassLoader classLoader = URLClassLoader.newInstance(urls, Thread
+				.currentThread().getContextClassLoader());
+		List classMethodList = new ArrayList();
+		for (int i = 0; i < classNames.length; i++) {
+			String className = classNames[i];
+			try {
+				Class clazz = classLoader.loadClass(className);
+				ClassMethodsData classMethodsData = new ClassMethodsData();
+				classMethodsData.setClassName(clazz.getName());
+				Method[] methods = clazz.getMethods();
+				List methodList = new ArrayList();
+				for (int j = 0; j < methods.length; j++) {
+					Method method = methods[j];
+					String methodName = method.getName();
+					int modifiers = method.getModifiers();
+					if (Modifier.isPublic(modifiers)
+							&& !methodExcludeList.contains(methodName)) {
+						MethodData methodData = new MethodData();
+						methodData.setMethodName(methodName);
+						methodList.add(methodData);
+					}
+				}
+				findOverloadedMethods(methodList);
+				classMethodsData.setMethods((MethodData[]) methodList
+						.toArray(new MethodData[methodList.size()]));
+				classMethodList.add(classMethodsData);
+			} catch (ClassNotFoundException e) {
+				String msg = "The class " + className + " cannot be loaded";
+				log.error(msg);
+			}
+
+		}
+		return (ClassMethodsData[]) classMethodList
+				.toArray(new ClassMethodsData[classMethodList.size()]);
+
+	}
+
+	private void findOverloadedMethods(List methodList) {
+		Map finalMap = new HashMap();
+		int size = methodList.size();
+		for (int k = 0; k < size - 1; k++) {
+			MethodData startPointer = (MethodData) methodList.get(k);
+			if (!finalMap.containsKey(startPointer.getMethodName())) {
+				int count = 0;
+				for (Iterator iterator = methodList.iterator(); iterator
+						.hasNext();) {
+					MethodData method = (MethodData) iterator.next();
+					if (method.getMethodName().equals(
+							startPointer.getMethodName())) {
+						count++;
+					}
+				}
+				for (Iterator iterator = methodList.iterator(); iterator
+						.hasNext();) {
+					MethodData method = (MethodData) iterator.next();
+					if (method.getMethodName().equals(
+							startPointer.getMethodName())) {
+						if (count > 1) {
+							method.setOverload(true);
+						}
+					}
+				}
+			}
+		}
+
+	}
+
+	/**
+	 * Creates and deploys a service. This AAR will contain all the classe from
+	 * the jar/zip file corresponding to <code>archiveId</code>. In addition,
+	 * a services.xml will be created, and all of the
+	 * <code>serviceClasses</code> will be added as services.
+	 * 
+	 * @param archiveId
+	 *            archive id
+	 * @param data
+	 *            info array. data contains the excluded method names.
+	 * @param resourceId
+	 *            array of resource Ids that goes in the "lib" folder
+	 * @throws AxisFault
+	 *             will be thrown
+	 */
+	public void createAndDeployService(String archiveId,
+			ClassMethodsData[] data, String[] resourceId) throws AxisFault {
+		String filePathFromArchiveId = getFilePathFromArchiveId(archiveId);
+
+		if (filePathFromArchiveId == null) {
+			String msg = "A non-existent file was requested";
+			log.warn(msg);
+			throw new AxisFault(msg);
+		}
+
+		int endIndex = filePathFromArchiveId.lastIndexOf(File.separator);
+		String filePath = filePathFromArchiveId.substring(0, endIndex);
+		String archiveFileName = filePathFromArchiveId.substring(endIndex);
+		archiveFileName = archiveFileName.substring(0, archiveFileName
+				.lastIndexOf("."));
+
+		ArchiveManipulator archiveManipulator = new ArchiveManipulator();
+
+		// ----------------- Unzip the file ------------------------------------
+		String unzippeDir = filePath + File.separator + "temp";
+		File unzipped = new File(unzippeDir);
+		unzipped.mkdirs();
+
+		try {
+			archiveManipulator.extract(filePathFromArchiveId, unzippeDir);
+		} catch (IOException e) {
+			throw new AxisFault("Cannot extract archive", e);
+		}
+
+		// copy resources to lib folder.
+		File resourceLibDir = new File(unzipped.getAbsolutePath()
+				+ File.separator + "lib");
+		resourceLibDir.mkdirs();
+		List resourceList = new ArrayList();
+		for (int i = 0; i < resourceId.length; i++) {
+			if (!resourceId[i].equals(archiveId)) {
+				String fileAbsPath = getFilePathFromArchiveId(resourceId[i]);
+				if (fileAbsPath == null) {
+					throw new AxisFault("Resource cannot be located");
+				}
+				resourceList.add(new File(fileAbsPath));
+			}
+		}
+		FileManipulator fileMan = new FileManipulator();
+		for (Iterator iterator = resourceList.iterator(); iterator.hasNext();) {
+			File file = (File) iterator.next();
+			try {
+				String absPath = file.getAbsolutePath();
+				if (File.separatorChar == '\\') {
+					absPath = absPath.replace("\\", "/");
+				}
+				int nameIndex = absPath.lastIndexOf("/");
+				String fileName = absPath.substring(nameIndex + 1);
+				fileMan.copyFile(file, new File(resourceLibDir, fileName));
+			} catch (IOException e) {
+				String msg = "Error occured when copying resources";
+				throw new AxisFault(msg, e);
+			}
+		}
+
+		// ---- Generate the services.xml and place it in META-INF -----
+		File file = new File(unzippeDir + File.separator + "META-INF"
+				+ File.separator + "services.xml");
+		file.mkdirs();
+
+		try {
+			File absoluteFile = file.getAbsoluteFile();
+
+			if (absoluteFile.exists()) {
+				absoluteFile.delete();
+			}
+
+			absoluteFile.createNewFile();
+
+			OutputStream os = new FileOutputStream(file);
+			OMElement servicesXML = createServicesXML(data);
+			servicesXML.build();
+			servicesXML.serialize(os);
+		} catch (Exception e) {
+			String msg = "Cannot write services XML";
+			log.error(msg, e);
+			throw new AxisFault(msg, e);
+		}
+
+		// ----------------- Create the AAR ------------------------------------
+		// These are the files to include in the ZIP file
+		String outAARFilename = filePath + File.separator + archiveFileName
+				+ ".aar";
+
+		try {
+			archiveManipulator.archiveDir(outAARFilename, unzipped.getPath());
+		} catch (IOException e) {
+			String msg = "Cannot create new AAR archive";
+			log.error(msg, e);
+			throw new AxisFault(msg, e);
+		}
+
+		// ------------- Copy the AAR to the repository/services directory
+		// --------
+		String repo = MessageContext.getCurrentMessageContext()
+				.getConfigurationContext().getAxisConfiguration()
+				.getRepository().getPath()
+				+ File.separator + "services";
+
+		try {
+			new FileManipulator().copyFile(new File(outAARFilename), new File(
+					repo + File.separator + archiveFileName + ".aar"));
+		} catch (IOException e) {
+			String msg = "Cannot copy AAR file to Repo";
+			log.error(msg, e);
+			throw new AxisFault(msg, e);
+		}
+	}
+
+	private OMElement createServicesXMLFromSpringBeans(String[] springBeans,
+			String springContextLocation) {
+		OMFactory factory = OMAbstractFactory.getOMFactory();
+		OMNamespace emptyNS = factory.createOMNamespace("", "");
+		OMElement serviceGroupEle = factory.createOMElement("serviceGroup", "",
+				"");
+
+		for (int i = 0; i < springBeans.length; i++) {
+			String serviceBeanName = springBeans[i];
+
+			OMElement serviceEle = factory.createOMElement("service", "", "");
+
+			OMElement schemaEle = factory.createOMElement("schema", "", "");
+			schemaEle.addAttribute(factory.createOMAttribute(
+					"elementFormDefaultQualified", emptyNS, "false"));
+
+			serviceEle.addAttribute(factory.createOMAttribute("name", emptyNS,
+					serviceBeanName));
+
+			OMElement msgReceiversEle = factory.createOMElement(
+					"messageReceivers", "", "");
+			OMElement msgReceiverEle1 = factory.createOMElement(
+					"messageReceiver", "", "");
+			msgReceiverEle1.addAttribute("mep",
+					"http://www.w3.org/ns/wsdl/in-only", emptyNS);
+			msgReceiverEle1.addAttribute("class",
+					RPCInOnlyMessageReceiver.class.getName(), emptyNS);
+
+			OMElement msgReceiverEle2 = factory.createOMElement(
+					"messageReceiver", "", "");
+			msgReceiverEle2.addAttribute("mep",
+					"http://www.w3.org/ns/wsdl/in-out", emptyNS);
+			msgReceiverEle2.addAttribute("class", RPCMessageReceiver.class
+					.getName(), emptyNS);
+			msgReceiversEle.addChild(msgReceiverEle1);
+			msgReceiversEle.addChild(msgReceiverEle2);
+
+			OMElement parameterEleServiceObjectSupplier = factory
+					.createOMElement("parameter", "", "");
+			parameterEleServiceObjectSupplier.addAttribute("locked", "true",
+					emptyNS);
+			parameterEleServiceObjectSupplier.addAttribute("name",
+					"ServiceObjectSupplier", emptyNS);
+			parameterEleServiceObjectSupplier
+					.setText(GenericApplicationContextSupplier.class.getName());
+
+			OMElement parameterEleSpringBeanName = factory.createOMElement(
+					"parameter", "", "");
+			parameterEleSpringBeanName.addAttribute("locked", "true", emptyNS);
+			parameterEleSpringBeanName.addAttribute("name", "SpringBeanName",
+					emptyNS);
+			parameterEleSpringBeanName.setText(serviceBeanName);
+
+			OMElement parameterEleSpringContextLocation = factory
+					.createOMElement("parameter", "", "");
+			parameterEleSpringContextLocation.addAttribute("locked", "true",
+					emptyNS);
+			parameterEleSpringContextLocation.addAttribute("name",
+					"SpringContextLocation", emptyNS);
+			parameterEleSpringContextLocation.setText(springContextLocation);
+
+			serviceEle.addChild(schemaEle);
+			serviceEle.addChild(msgReceiversEle);
+			serviceEle.addChild(parameterEleServiceObjectSupplier);
+			serviceEle.addChild(parameterEleSpringBeanName);
+			serviceEle.addChild(parameterEleSpringContextLocation);
+			serviceGroupEle.addChild(serviceEle);
+		}
+		return serviceGroupEle;
+	}
+
+	private OMElement createServicesXML(ClassMethodsData[] data) {
+		OMFactory factory = OMAbstractFactory.getOMFactory();
+		OMNamespace emptyNS = factory.createOMNamespace("", "");
+		OMElement serviceGroupEle = factory.createOMElement("serviceGroup", "",
+				"");
+
+		for (int i = 0; i < data.length; i++) {
+			ClassMethodsData datum = data[i];
+			String serviceClass = datum.getClassName();
+			String serviceName = serviceClass.substring(serviceClass
+					.lastIndexOf(".") + 1);
+
+			OMElement serviceEle = factory.createOMElement("service", "", "");
+
+			OMElement schemaEle = factory.createOMElement("schema", "", "");
+			schemaEle.addAttribute(factory.createOMAttribute(
+					"elementFormDefaultQualified", emptyNS, "true"));
+
+			serviceEle.addAttribute(factory.createOMAttribute("name", emptyNS,
+					serviceName));
+
+			OMElement msgReceiversEle = factory.createOMElement(
+					"messageReceivers", "", "");
+			OMElement msgReceiverEle1 = factory.createOMElement(
+					"messageReceiver", "", "");
+			msgReceiverEle1.addAttribute("mep",
+					"http://www.w3.org/ns/wsdl/in-only", emptyNS);
+			msgReceiverEle1.addAttribute("class",
+					"org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver",
+					emptyNS);
+
+			OMElement msgReceiverEle2 = factory.createOMElement(
+					"messageReceiver", "", "");
+			msgReceiverEle2.addAttribute("mep",
+					"http://www.w3.org/ns/wsdl/in-out", emptyNS);
+			msgReceiverEle2.addAttribute("class",
+					"org.apache.axis2.rpc.receivers.RPCMessageReceiver",
+					emptyNS);
+			msgReceiversEle.addChild(msgReceiverEle1);
+			msgReceiversEle.addChild(msgReceiverEle2);
+
+			OMElement parameterEle = factory.createOMElement("parameter", "",
+					"");
+			parameterEle.addAttribute("name", "ServiceClass", emptyNS);
+			parameterEle.setText(serviceClass);
+
+			serviceEle.addChild(schemaEle);
+			serviceEle.addChild(msgReceiversEle);
+			serviceEle.addChild(parameterEle);
+			// Operations
+			MethodData[] methodData = datum.getMethods();
+			if (methodData != null) {
+				if (methodData.length > 0) {
+					OMElement excludesEle = factory.createOMElement(
+							"excludeOperations", "", "");
+					serviceEle.addChild(excludesEle);
+					List operationDuplicationList = new ArrayList();
+					for (int j = 0; j < methodData.length; j++) {
+						String methodName = methodData[j].getMethodName();
+						if (!operationDuplicationList.contains(methodName)) {
+							OMElement operationEle = factory.createOMElement(
+									"operation", "", "");
+							operationDuplicationList.add(methodName);
+							operationEle.setText(methodName);
+							excludesEle.addChild(operationEle);
+						}
+					}
+				}
+			}
+			serviceGroupEle.addChild(serviceEle);
+		}
+
+		return serviceGroupEle;
+	}
+
+	private String getFilePathFromArchiveId(String archiveId) {
+		ConfigurationContext configCtx = MessageContext
+				.getCurrentMessageContext().getConfigurationContext();
+		Map fileResMap = (Map) configCtx
+				.getProperty(org.wso2.wsas.ServerConstants.FILE_RESOURCE_MAP);
+
+		return (String) fileResMap.get(archiveId);
+	}
+
+	public boolean deleteFaultyServiceArchive(String archiveName)
+			throws AxisFault {
+		if (File.separatorChar == '\\') {
+			archiveName = archiveName.replace('/', '\\');
+		}
+
+		boolean isDeleted = false;
+		if (archiveName != null && archiveName.trim().length() != 0) {
+			File file = new File(archiveName);
+			if (file.exists()) {
+				if (!((file.isDirectory() && new FileManipulator()
+						.deleteDir(file)) || file.delete())) {
+					throw new AxisFault(
+							"Faulty service archive deletion failed. "
+									+ "Due to a JVM issue on MS-Windows, "
+									+ "AAR files cannot be deleted. "
+									+ "Please stop the server and manually delete this file.");
+				} else {
+					isDeleted = true;
+					getAxisConfig().getFaultyServices().remove(archiveName);
+				}
+			}
+		}
+
+		return isDeleted;
+	}
+
+	public FaultService[] getFaultyServiceArchives() throws AxisFault {
+		AxisConfiguration ac = getAxisConfig();
+		Hashtable faultyServices = ac.getFaultyServices();
+		ArrayList fsList = new ArrayList();
+
+		for (Iterator keys = faultyServices.keySet().iterator(); keys.hasNext();) {
+			String key = (String) keys.next();
+			String fault = (String) faultyServices.get(key);
+			FaultService fs = new FaultService();
+
+			if (File.separatorChar == '\\') {
+				key = key.replace('\\', '/');
+			}
+
+			fs.setServiceName(key);
+			fs.setFault(fault);
+			fsList.add(fs);
+		}
+
+		return (FaultService[]) fsList.toArray(new FaultService[fsList.size()]);
+	}
+
+	public int getNumberOfFaultyServices() throws AxisFault {
+		return getAxisConfig().getFaultyServices().size();
+	}
+
+	public SpringBeansData getSpringBeanNames(String springContextId,
+			String springBeanId) throws AxisFault {
+		// Manipulation of springContext to ${RepositoryLocation}/spring
+
+		String springContextFilePath = getFilePathFromArchiveId(springContextId);
+		String springBeanFilePath = getFilePathFromArchiveId(springBeanId);
+		SpringBeansData data = new SpringBeansData();
+		data.setSpringContext(springContextId);
+		try {
+			ApplicationContext aCtx = GenericApplicationContextUtil
+					.getSpringApplicationContext(springContextFilePath,
+							springBeanFilePath);
+			String[] beanDefintions = aCtx.getBeanDefinitionNames();
+			data.setBeans(beanDefintions);
+		} catch (Exception e) {
+			throw new AxisFault(
+					"Cannot load Spring beans. Please check the Spring context "
+							+ "configuration file and verify that the defined Spring beans exist"
+							+ " in the .jar file.");
+		}
+		return data;
+	}
+
+	public void createAndDeploySpringBean(String springContextId,
+			String springBeanId, String[] beanClasses) throws AxisFault {
+		String filePathFromArchiveId = getFilePathFromArchiveId(springBeanId);
+		String filePathForSpringContext = getFilePathFromArchiveId(springContextId);
+		ConfigurationContext configCtx = MessageContext
+				.getCurrentMessageContext().getConfigurationContext();
+		Map fileResMap = (Map) configCtx
+				.getProperty(org.wso2.wsas.ServerConstants.FILE_RESOURCE_MAP);
+		fileResMap.remove(springContextId);
+
+		if (filePathFromArchiveId == null) {
+			String msg = "A non-existent file was requested";
+			log.warn(msg);
+			throw new AxisFault(msg);
+		}
+
+		int endIndex = filePathFromArchiveId.lastIndexOf(File.separator);
+		String filePath = filePathFromArchiveId.substring(0, endIndex);
+		String archiveFileName = filePathFromArchiveId.substring(endIndex);
+		archiveFileName = archiveFileName.substring(0, archiveFileName
+				.lastIndexOf("."));
+
+		ArchiveManipulator archiveManipulator = new ArchiveManipulator();
+
+		// ----------------- Unzip the file ------------------------------------
+		String unzippeDir = filePath + File.separator + "springTemp";
+		File unzipped = new File(unzippeDir);
+		unzipped.mkdirs();
+
+		try {
+			archiveManipulator.extract(filePathFromArchiveId, unzippeDir);
+		} catch (IOException e) {
+			throw new AxisFault("Cannot extract archive", e);
+		}
+
+		// TODO copy the spring xml
+		String springContextRelLocation = "spring/context.xml";
+		try {
+			File springContextRelDir = new File(unzippeDir + File.separator
+					+ "spring");
+			springContextRelDir.mkdirs();
+			File absFile = new File(springContextRelDir, "context.xml");
+			if (!absFile.exists()) {
+				absFile.createNewFile();
+			}
+			File file = new File(filePathForSpringContext);
+			FileInputStream in = new FileInputStream(file);
+			FileOutputStream out = new FileOutputStream(absFile);
+			// Transfer bytes from in to out
+			byte[] buf = new byte[1024];
+			int len;
+			while ((len = in.read(buf)) > 0) {
+				out.write(buf, 0, len);
+			}
+			in.close();
+			out.close();
+
+		} catch (FileNotFoundException e) {
+			throw AxisFault.makeFault(e);
+		} catch (IOException e) {
+			throw AxisFault.makeFault(e);
+		}
+
+		// ---- Generate the services.xml and place it in META-INF -----
+		File file = new File(unzippeDir + File.separator + "META-INF"
+				+ File.separator + "services.xml");
+		file.mkdirs();
+
+		try {
+			File absoluteFile = file.getAbsoluteFile();
+
+			if (absoluteFile.exists()) {
+				absoluteFile.delete();
+			}
+
+			absoluteFile.createNewFile();
+
+			OutputStream os = new FileOutputStream(file);
+			OMElement servicesXML = createServicesXMLFromSpringBeans(
+					beanClasses, springContextRelLocation);
+			servicesXML.build();
+			servicesXML.serialize(os);
+		} catch (Exception e) {
+			String msg = "Cannot write services XML";
+			log.error(msg, e);
+			throw new AxisFault(msg, e);
+		}
+
+		// ----------------- Create the AAR ------------------------------------
+		// These are the files to include in the ZIP file
+		String outAARFilename = filePath + File.separator + archiveFileName
+				+ ".aar";
+
+		try {
+			archiveManipulator.archiveDir(outAARFilename, unzipped.getPath());
+		} catch (IOException e) {
+			String msg = "Cannot create new AAR archive";
+			log.error(msg, e);
+			throw new AxisFault(msg, e);
+		}
+
+		// ------------- Copy the AAR to the respository/services directory
+		// --------
+		String repo = MessageContext.getCurrentMessageContext()
+				.getConfigurationContext().getAxisConfiguration()
+				.getRepository().getPath()
+				+ File.separator + "services";
+
+		try {
+			new FileManipulator().copyFile(new File(outAARFilename), new File(
+					repo + File.separator + archiveFileName + ".aar"));
+		} catch (IOException e) {
+			String msg = "Cannot copy AAR file to Repo";
+			log.error(msg, e);
+			throw new AxisFault(msg, e);
+		}
+	}
+
+	public void createAndDeployEJBService(String archiveId,
+			String[] serviceClasses, String jnpProviderUrl,
+			String beanJNDIName, String homeInterface, String remoteInterface)
+			throws AxisFault {
+		// Find details of selected ejb application server configuration
+		EJBAppServerDO ejbAppServerDO = pm
+				.getEJBAppServerConfiguration(jnpProviderUrl);
+		if (ejbAppServerDO == null) {
+			throw new AxisFault(
+					"Non-existance Application server configuration");
+		}
+
+		// save ejb configuration
+		EJBProviderAdmin ejbProviderAdmin = new EJBProviderAdmin();
+
+		// search for existing configuration, if found abort service deployment
+		try {
+			EJBProviderDO ejbProviderDO = ejbProviderAdmin.getEJBConfiguration(
+					beanJNDIName, jnpProviderUrl);
+			if (!(ejbProviderDO == null)) {
+				// configuration found.Throw exception
+				throw new AxisFault(
+						"A Service exists for the provided JNDI name("
+								+ beanJNDIName + ") and JNP Url("
+								+ jnpProviderUrl + ").");
+			}
+		} catch (Exception e) {
+			throw new AxisFault("A Service exists for the provided JNDI name("
+					+ beanJNDIName + ") and JNP Url(" + jnpProviderUrl + ").");
+		}
+
+		ejbProviderAdmin.addEJBConfiguration(ejbAppServerDO.getProviderURL(),
+				ejbAppServerDO.getJndiContextClass(), ejbAppServerDO
+						.getUserName(), ejbAppServerDO.getUserName(),
+				beanJNDIName, homeInterface, remoteInterface, ejbAppServerDO
+						.getAppServerType());
+
+		String filePathFromArchiveId = getFilePathFromArchiveId(archiveId);
+
+		if (filePathFromArchiveId == null) {
+			String msg = "A non-existent file was requested";
+			log.warn(msg);
+			throw new AxisFault(msg);
+		}
+
+		int endIndex = filePathFromArchiveId.lastIndexOf(File.separator);
+		String filePath = filePathFromArchiveId.substring(0, endIndex);
+		String archiveFileName = filePathFromArchiveId.substring(endIndex);
+		archiveFileName = archiveFileName.substring(0, archiveFileName
+				.lastIndexOf("."));
+
+		ArchiveManipulator archiveManipulator = new ArchiveManipulator();
+
+		// ----------------- Unzip the file ------------------------------------
+		String unzippeDir = filePath + File.separator + "temp";
+		File unzipped = new File(unzippeDir);
+		unzipped.mkdirs();
+
+		try {
+			archiveManipulator.extract(filePathFromArchiveId, unzippeDir);
+		} catch (IOException e) {
+			throw new AxisFault("Cannot extract archive", e);
+		}
+
+		// ---- Generate the services.xml and place it in META-INF -----
+		File file = new File(unzippeDir + File.separator + "META-INF"
+				+ File.separator + "services.xml");
+		file.mkdirs();
+
+		try {
+			File absoluteFile = file.getAbsoluteFile();
+			if (absoluteFile.exists()) {
+				absoluteFile.delete();
+			}
+			absoluteFile.createNewFile();
+			OutputStream os = new FileOutputStream(file);
+			OMElement servicesXML = createServicesXMLForEJBService(
+					serviceClasses, ejbAppServerDO.getProviderURL(),
+					ejbAppServerDO.getJndiContextClass(), ejbAppServerDO
+							.getUserName(), ejbAppServerDO.getPassword(),
+					beanJNDIName, homeInterface, remoteInterface);
+			servicesXML.build();
+			servicesXML.serialize(os);
+		} catch (Exception e) {
+			String msg = "Cannot write services XML";
+			log.error(msg, e);
+			throw new AxisFault(msg, e);
+		}
+
+		// ----------------- Create the AAR ------------------------------------
+		// These are the files to include in the ZIP file
+		String outAARFilename = filePath + File.separator + archiveFileName
+				+ ".aar";
+
+		try {
+			archiveManipulator.archiveDir(outAARFilename, unzipped.getPath());
+		} catch (IOException e) {
+			String msg = "Cannot create new AAR archive";
+			log.error(msg, e);
+			throw new AxisFault(msg, e);
+		}
+
+		// ------------- Copy the AAR to the respository/services directory
+		// --------
+		String repo = MessageContext.getCurrentMessageContext()
+				.getConfigurationContext().getAxisConfiguration()
+				.getRepository().getPath()
+				+ File.separator + "services";
+
+		try {
+			new FileManipulator().copyFile(new File(outAARFilename), new File(
+					repo + File.separator + archiveFileName + ".aar"));
+		} catch (IOException e) {
+			String msg = "Cannot copy AAR file to Repo";
+			log.error(msg, e);
+			throw new AxisFault(msg, e);
+		}
+	}
+
+	/*
+	 * <serviceGroup> <service name="TimeService"> <description>Time!! web
+	 * service</description> <parameter name="ServiceClass"
+	 * locked="false">org.apache.axis2.samples.ejb.session.interfaces.TimeServiceRemote</parameter>
 +	 * <messageReceivers> <messageReceiver
+	 * mep="http://www.w3.org/2004/08/wsdl/in-only"
+	 * class="org.apache.axis2.rpc.receivers.ejb.EJBInOnlyMessageReceiver"/>
+	 * <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
+	 * class="org.apache.axis2.rpc.receivers.ejb.EJBMessageReceiver"/>
+	 * </messageReceivers> <parameter
+	 * name="remoteInterfaceName">org.apache.axis2.samples.ejb.session.interfaces.TimeServiceRemote</parameter>
 +	 * <parameter
+	 * name="homeInterfaceName">org.apache.axis2.samples.ejb.session.interfaces.TimeServiceRemoteHome</parameter>
 +	 * <parameter
+	 * name="beanJndiName">org.apache.axis2.samples.ejb.session.interfaces.TimeServiceLocalHome</parameter>
 +	 * <parameter name="service_type">ejb_service</parameter> <!--for jboss -->
+	 * <parameter name="providerUrl">jnp://localhost:1099</parameter>
+	 * <parameter
+	 * name="jndiContextClass">org.jnp.interfaces.NamingContextFactory</parameter>
+	 * 
+	 * <!--for geronimo <parameter name="providerUrl">localhost:4201</parameter>
+	 * <parameter name="jndiContextClass">org.openejb.client.JNDIContext</parameter>
+	 * --> </service> </serviceGroup>
+	 */
+	private OMElement createServicesXMLForEJBService(String[] serviceClasses,
+			String providerURL, String jndiContextClass, String userName,
+			String password, String beanJNDIName, String homeInterface,
+			String remoteInterface) {
+
+		OMFactory factory = OMAbstractFactory.getOMFactory();
+		OMNamespace emptyNS = factory.createOMNamespace("", "");
+		OMElement serviceGroupEle = factory.createOMElement("serviceGroup", "",
+				"");
+
+		// Although we have a loop here, only one class will come
+		for (int i = 0; i < serviceClasses.length; i++) {
+			String serviceClass = serviceClasses[i];
+			String serviceName = serviceClass.substring(serviceClass
+					.lastIndexOf(".") + 1);
+
+			OMElement serviceEle = factory.createOMElement("service", "", "");
+
+			OMElement schemaEle = factory.createOMElement("schema", "", "");
+			schemaEle.addAttribute(factory.createOMAttribute(
+					"elementFormDefaultQualified", emptyNS, "false"));
+
+			serviceEle.addAttribute(factory.createOMAttribute("name", emptyNS,
+					serviceName));
+
+			OMElement msgReceiversEle = factory.createOMElement(
+					"messageReceivers", "", "");
+			OMElement msgReceiverEle1 = factory.createOMElement(
+					"messageReceiver", "", "");
+			msgReceiverEle1.addAttribute("mep",
+					"http://www.w3.org/ns/wsdl/in-only", emptyNS);
+			msgReceiverEle1
+					.addAttribute(
+							"class",
+							"org.apache.axis2.rpc.receivers.ejb.EJBInOnlyMessageReceiver",
+							emptyNS);
+
+			OMElement msgReceiverEle2 = factory.createOMElement(
+					"messageReceiver", "", "");
+			msgReceiverEle2.addAttribute("mep",
+					"http://www.w3.org/ns/wsdl/in-out", emptyNS);
+			msgReceiverEle2.addAttribute("class",
+					"org.apache.axis2.rpc.receivers.ejb.EJBMessageReceiver",
+					emptyNS);
+			msgReceiversEle.addChild(msgReceiverEle1);
+			msgReceiversEle.addChild(msgReceiverEle2);
+
+			OMElement parameterEle1 = factory.createOMElement("parameter", "",
+					"");
+			parameterEle1.addAttribute("name",
+					EJBUtil.EJB_REMOTE_INTERFACE_NAME, emptyNS);
+			parameterEle1.setText(remoteInterface);
+
+			OMElement parameterEle2 = factory.createOMElement("parameter", "",
+					"");
+			parameterEle2.addAttribute("name", EJBUtil.EJB_HOME_INTERFACE_NAME,
+					emptyNS);
+			parameterEle2.setText(homeInterface);
+
+			OMElement parameterEle3 = factory.createOMElement("parameter", "",
+					"");
+			parameterEle3.addAttribute("name", EJBUtil.EJB_JNDI_NAME, emptyNS);
+			parameterEle3.setText(beanJNDIName);
+
+			OMElement parameterEle4 = factory.createOMElement("parameter", "",
+					"");
+			parameterEle4.addAttribute("name", EJBUtil.EJB_PROVIDER_URL,
+					emptyNS);
+			parameterEle4.setText(providerURL);
+
+			OMElement parameterEle5 = factory.createOMElement("parameter", "",
+					"");
+			parameterEle5.addAttribute("name",
+					EJBUtil.EJB_INITIAL_CONTEXT_FACTORY, emptyNS);
+			parameterEle5.setText(jndiContextClass);
+
+			OMElement parameterEle6 = factory.createOMElement("parameter", "",
+					"");
+			parameterEle6.addAttribute("name", EJBUtil.EJB_JNDI_USERNAME,
+					emptyNS);
+			parameterEle6.setText(userName);
+
+			OMElement parameterEle7 = factory.createOMElement("parameter", "",
+					"");
+			parameterEle7.addAttribute("name", EJBUtil.EJB_JNDI_PASSWORD,
+					emptyNS);
+			parameterEle7.setText(password);
+
+			OMElement parameterEle8 = factory.createOMElement("parameter", "",
+					"");
+			parameterEle8.addAttribute("name", "ServiceClass", emptyNS);
+			parameterEle8.setText(serviceClass);
+
+			OMElement parameterEle9 = factory.createOMElement("parameter", "",
+					"");
+			parameterEle9.addAttribute("name", ServerConstants.SERVICE_TYPE,
+					emptyNS);
+			parameterEle9.setText(ServerConstants.SERVICE_TYPE_EJB);
+
+			serviceEle.addChild(schemaEle);
+			serviceEle.addChild(msgReceiversEle);
+			serviceEle.addChild(parameterEle1);
+			serviceEle.addChild(parameterEle2);
+			serviceEle.addChild(parameterEle3);
+			serviceEle.addChild(parameterEle4);
+			serviceEle.addChild(parameterEle5);
+			serviceEle.addChild(parameterEle6);
+			serviceEle.addChild(parameterEle7);
+			serviceEle.addChild(parameterEle8);
+			serviceEle.addChild(parameterEle9);
+
+			serviceGroupEle.addChild(serviceEle);
+		}
+		return serviceGroupEle;
+	}
 
 }

Modified: trunk/wsas/java/modules/core/src/org/wso2/wsas/persistence/dataobject/ServicePolicyDO.java
 ==============================================================================
--- trunk/wsas/java/modules/core/src/org/wso2/wsas/persistence/dataobject/ServicePolicyDO.java	(original)
                
+++ trunk/wsas/java/modules/core/src/org/wso2/wsas/persistence/dataobject/ServicePolicyDO.java	Sun \
Apr  6 21:31:26 2008 @@ -20,6 +20,43 @@
  * Data object representing policy of a service
  */
 public class ServicePolicyDO extends AbstractDataObject {
+	
+	public static final int ANON_POLICY = 100;
+
+    public static final int AXIS_POLICY = 1;
+
+    public static final int AXIS_MODULE_POLICY = 2;
+    
+    public static final int AXIS_MODULE_OPERATION_POLICY = 17;
+
+    public static final int AXIS_SERVICE_POLICY = 3;
+
+    public static final int AXIS_OPERATION_POLICY = 4;
+
+    public static final int AXIS_MESSAGE_POLICY = 5;
+
+    public static final int SERVICE_POLICY = 6;
+
+    public static final int PORT_POLICY = 7;
+
+    public static final int PORT_TYPE_POLICY = 8;
+
+    public static final int BINDING_POLICY = 9;
+
+    public static final int OPERATION_POLICY = 10;
+
+    public static final int BINDING_OPERATION_POLICY = 11;
+
+    public static final int INPUT_POLICY = 12;
+
+    public static final int OUTPUT_POLICY = 13;
+
+    public static final int BINDING_INPUT_POLICY = 14;
+
+    public static final int BINDING_OUTPUT_POLICY = 15;
+
+    public static final int MESSAGE_POLICY = 16;
+    
     private String policy;
     private String uuid;
     private int type;

_______________________________________________
Wsas-java-dev mailing list
Wsas-java-dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/wsas-java-dev


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic