[wsas-java-dev] svn commit r15590 - in trunk/wsas/java/modules:
admin/src/org/wso2/wsas/admin/service
core/src/org/wso2/wsas/persistence/dataobject
svn at wso2.org
svn at wso2.org
Sun Apr 6 21:31:40 PDT 2008
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.e