You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ace.apache.org by ma...@apache.org on 2014/02/25 14:57:00 UTC
svn commit: r1571697 - in /ace/trunk: org.apache.ace.gogo.servlet/
org.apache.ace.gogo.servlet/.settings/ org.apache.ace.gogo.servlet/src/
org.apache.ace.gogo.servlet/src/org/
org.apache.ace.gogo.servlet/src/org/apache/
org.apache.ace.gogo.servlet/src/...
Author: marrs
Date: Tue Feb 25 13:56:59 2014
New Revision: 1571697
URL: http://svn.apache.org/r1571697
Log:
ACE-460 Applied the patch. Thanks Herko.
Added:
ace/trunk/org.apache.ace.gogo.servlet/
ace/trunk/org.apache.ace.gogo.servlet/.classpath
ace/trunk/org.apache.ace.gogo.servlet/.gitignore
ace/trunk/org.apache.ace.gogo.servlet/.project
ace/trunk/org.apache.ace.gogo.servlet/.settings/
ace/trunk/org.apache.ace.gogo.servlet/.settings/org.eclipse.jdt.core.prefs
ace/trunk/org.apache.ace.gogo.servlet/bnd.bnd
ace/trunk/org.apache.ace.gogo.servlet/build.xml
ace/trunk/org.apache.ace.gogo.servlet/src/
ace/trunk/org.apache.ace.gogo.servlet/src/org/
ace/trunk/org.apache.ace.gogo.servlet/src/org/apache/
ace/trunk/org.apache.ace.gogo.servlet/src/org/apache/ace/
ace/trunk/org.apache.ace.gogo.servlet/src/org/apache/ace/gogo/
ace/trunk/org.apache.ace.gogo.servlet/src/org/apache/ace/gogo/servlet/
ace/trunk/org.apache.ace.gogo.servlet/src/org/apache/ace/gogo/servlet/Activator.java
ace/trunk/org.apache.ace.gogo.servlet/src/org/apache/ace/gogo/servlet/ScriptServlet.java
ace/trunk/org.apache.ace.gogo.servlet/test/
ace/trunk/run-client/conf/org.apache.ace.gogo.servlet.cfg
ace/trunk/run-server-allinone/conf/org.apache.ace.gogo.servlet.cfg
Added: ace/trunk/org.apache.ace.gogo.servlet/.classpath
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.gogo.servlet/.classpath?rev=1571697&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.gogo.servlet/.classpath (added)
+++ ace/trunk/org.apache.ace.gogo.servlet/.classpath Tue Feb 25 13:56:59 2014
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" output="bin" path="src"/>
+ <classpathentry kind="src" output="bin_test" path="test"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+ <classpathentry kind="con" path="aQute.bnd.classpath.container"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
Added: ace/trunk/org.apache.ace.gogo.servlet/.gitignore
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.gogo.servlet/.gitignore?rev=1571697&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.gogo.servlet/.gitignore (added)
+++ ace/trunk/org.apache.ace.gogo.servlet/.gitignore Tue Feb 25 13:56:59 2014
@@ -0,0 +1,3 @@
+/bin/
+/bin_test/
+/generated/
Added: ace/trunk/org.apache.ace.gogo.servlet/.project
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.gogo.servlet/.project?rev=1571697&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.gogo.servlet/.project (added)
+++ ace/trunk/org.apache.ace.gogo.servlet/.project Tue Feb 25 13:56:59 2014
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.apache.ace.gogo.servlet</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>bndtools.core.bndbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>bndtools.core.bndnature</nature>
+ </natures>
+</projectDescription>
Added: ace/trunk/org.apache.ace.gogo.servlet/.settings/org.eclipse.jdt.core.prefs
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.gogo.servlet/.settings/org.eclipse.jdt.core.prefs?rev=1571697&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.gogo.servlet/.settings/org.eclipse.jdt.core.prefs (added)
+++ ace/trunk/org.apache.ace.gogo.servlet/.settings/org.eclipse.jdt.core.prefs Tue Feb 25 13:56:59 2014
@@ -0,0 +1,11 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
Added: ace/trunk/org.apache.ace.gogo.servlet/bnd.bnd
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.gogo.servlet/bnd.bnd?rev=1571697&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.gogo.servlet/bnd.bnd (added)
+++ ace/trunk/org.apache.ace.gogo.servlet/bnd.bnd Tue Feb 25 13:56:59 2014
@@ -0,0 +1,9 @@
+-buildpath: osgi.core,\
+ osgi.cmpn,\
+ org.apache.felix.dependencymanager,\
+ javax.servlet,\
+ org.apache.ace.gogo;version=latest,\
+ org.apache.felix.gogo.runtime,\
+ org.apache.commons.io
+Bundle-Activator: org.apache.ace.gogo.servlet.Activator
+Private-Package: org.apache.ace.gogo.servlet
\ No newline at end of file
Added: ace/trunk/org.apache.ace.gogo.servlet/build.xml
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.gogo.servlet/build.xml?rev=1571697&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.gogo.servlet/build.xml (added)
+++ ace/trunk/org.apache.ace.gogo.servlet/build.xml Tue Feb 25 13:56:59 2014
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="project" default="build">
+
+ <!-- -->
+
+ <import file="../cnf/build.xml" />
+</project>
Added: ace/trunk/org.apache.ace.gogo.servlet/src/org/apache/ace/gogo/servlet/Activator.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.gogo.servlet/src/org/apache/ace/gogo/servlet/Activator.java?rev=1571697&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.gogo.servlet/src/org/apache/ace/gogo/servlet/Activator.java (added)
+++ ace/trunk/org.apache.ace.gogo.servlet/src/org/apache/ace/gogo/servlet/Activator.java Tue Feb 25 13:56:59 2014
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ace.gogo.servlet;
+
+import javax.servlet.Servlet;
+
+import org.apache.felix.dm.DependencyActivatorBase;
+import org.apache.felix.dm.DependencyManager;
+import org.apache.felix.service.command.CommandProcessor;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.log.LogService;
+
+public class Activator extends DependencyActivatorBase {
+
+ private static final String SCRIPT_SERVLET_PID = "org.apache.ace.gogo.servlet";
+
+ @Override
+ public void init(BundleContext context, DependencyManager manager) throws Exception {
+ manager.add(createComponent()
+ .setInterface(Servlet.class.getName(), null)
+ .setImplementation(ScriptServlet.class)
+ .add(createConfigurationDependency().setPropagate(true).setPid(SCRIPT_SERVLET_PID))
+ .add(createServiceDependency().setService(CommandProcessor.class).setRequired(true))
+ .add(createServiceDependency().setService(LogService.class).setRequired(false))
+ );
+ }
+
+ @Override
+ public void destroy(BundleContext context, DependencyManager manager) throws Exception {
+ // nothing to do here for now
+ }
+}
Added: ace/trunk/org.apache.ace.gogo.servlet/src/org/apache/ace/gogo/servlet/ScriptServlet.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.gogo.servlet/src/org/apache/ace/gogo/servlet/ScriptServlet.java?rev=1571697&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.gogo.servlet/src/org/apache/ace/gogo/servlet/ScriptServlet.java (added)
+++ ace/trunk/org.apache.ace.gogo.servlet/src/org/apache/ace/gogo/servlet/ScriptServlet.java Tue Feb 25 13:56:59 2014
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ace.gogo.servlet;
+
+import java.io.IOException;
+import java.util.Dictionary;
+import java.util.Hashtable;
+import java.util.Map;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.felix.service.command.CommandProcessor;
+import org.apache.felix.service.command.CommandSession;
+import org.osgi.service.log.LogService;
+
+/**
+ * Servlet that can execute a Gogo script provided by the caller. Note that this is a generic service that is not
+ * actually specific to ACE, it will accept any Gogo script.
+ *
+ * Requests to this servlet must include a "script" parameter that contains a valid Gogo script.
+ *
+ * Note that commands used in the script must be deployed before the script is executed.
+ *
+ * Motivation: provide the ability to script client calls to an ACE server for various automation purposes.
+ */
+public class ScriptServlet extends HttpServlet {
+ private static final long serialVersionUID = -7838800050936438994L;
+ private static final String SCRIPT_KEY = "script";
+ private volatile LogService m_logger;
+ private volatile CommandProcessor m_processor;
+
+ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+ @SuppressWarnings("unchecked")
+ Dictionary<String, String> scriptDefinition = toDictionary(req.getParameterMap());
+ respondToScriptRequest(resp, scriptDefinition);
+ }
+
+ @Override
+ protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+ String script = IOUtils.toString(req.getInputStream(), "UTF-8");
+ req.getInputStream();
+ Dictionary<String, String> scriptDefinition = new Hashtable<String, String>();
+ scriptDefinition.put(SCRIPT_KEY, script);
+ respondToScriptRequest(resp, scriptDefinition);
+ }
+
+ private void respondToScriptRequest(HttpServletResponse resp, Dictionary<String, String> scriptDefinition) throws IOException {
+ try {
+ executeScript(scriptDefinition);
+ }
+ catch (Exception e) {
+ m_logger.log(LogService.LOG_ERROR, "Unable to execute Gogo script.", e);
+ resp.sendError(HttpServletResponse.SC_BAD_REQUEST, e.getMessage());
+ }
+ };
+
+ private void executeScript(Dictionary<String, String> scriptDefinition) throws Exception {
+ String script = scriptDefinition.get(SCRIPT_KEY);
+ if (script == null) {
+ throw new IllegalArgumentException("Script definition *must* define at least a 'script' property!");
+ }
+
+ CommandSession session = m_processor.createSession(System.in, System.out, System.err);
+ try {
+ Object scriptResult = session.execute(script);
+ m_logger.log(LogService.LOG_DEBUG, "Script output:\n" + scriptResult);
+ }
+ finally {
+ session.close();
+ }
+ }
+
+ private Dictionary<String, String> toDictionary(Map<String, ?> map) {
+ Dictionary<String, String> result = new Hashtable<String, String>();
+ for (Map.Entry<String, ?> entry : map.entrySet()) {
+ result.put(entry.getKey(), toString(entry.getValue()));
+ }
+ return result;
+ }
+
+ private String toString(Object value) {
+ if (value != null) {
+ if (!(value instanceof String)) {
+ m_logger.log(LogService.LOG_DEBUG, "Using String value for non-String object: " + value);
+ }
+ return value.toString();
+ }
+ return null;
+ }
+}
Added: ace/trunk/run-client/conf/org.apache.ace.gogo.servlet.cfg
URL: http://svn.apache.org/viewvc/ace/trunk/run-client/conf/org.apache.ace.gogo.servlet.cfg?rev=1571697&view=auto
==============================================================================
--- ace/trunk/run-client/conf/org.apache.ace.gogo.servlet.cfg (added)
+++ ace/trunk/run-client/conf/org.apache.ace.gogo.servlet.cfg Tue Feb 25 13:56:59 2014
@@ -0,0 +1,3 @@
+org.apache.ace.server.servlet.endpoint=/gogo
+
+
Added: ace/trunk/run-server-allinone/conf/org.apache.ace.gogo.servlet.cfg
URL: http://svn.apache.org/viewvc/ace/trunk/run-server-allinone/conf/org.apache.ace.gogo.servlet.cfg?rev=1571697&view=auto
==============================================================================
--- ace/trunk/run-server-allinone/conf/org.apache.ace.gogo.servlet.cfg (added)
+++ ace/trunk/run-server-allinone/conf/org.apache.ace.gogo.servlet.cfg Tue Feb 25 13:56:59 2014
@@ -0,0 +1,3 @@
+org.apache.ace.server.servlet.endpoint=/gogo
+
+