This is an automated email from the ASF dual-hosted git repository.

cziegeler pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/felix-dev.git


The following commit(s) were added to refs/heads/master by this push:
     new e488d9968d FELIX-6631 : Migrate webconsole plugins to jakarta.servlet 
api
e488d9968d is described below

commit e488d9968dbeee5e14251e5fe3200b712b3e730f
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Tue Aug 22 13:06:54 2023 +0200

    FELIX-6631 : Migrate webconsole plugins to jakarta.servlet api
---
 .../plugins/event/internal/PluginServlet.java      |  52 +++-----
 .../webconsole/plugins/obr/internal/Activator.java |   6 +-
 .../plugins/obr/internal/WebConsolePlugin.java     |  70 ++++++-----
 webconsole-plugins/script-console/pom.xml          |  42 +++----
 .../internal/ScriptConsolePlugin.java              | 135 +++++++++------------
 .../internal/ScriptEngineManager.java              |   4 +-
 .../integration/ServerConfiguration.java           |   4 +-
 7 files changed, 132 insertions(+), 181 deletions(-)

diff --git 
a/webconsole-plugins/event/src/main/java/org/apache/felix/webconsole/plugins/event/internal/PluginServlet.java
 
b/webconsole-plugins/event/src/main/java/org/apache/felix/webconsole/plugins/event/internal/PluginServlet.java
index 3bac3a82d5..7ea923dc50 100644
--- 
a/webconsole-plugins/event/src/main/java/org/apache/felix/webconsole/plugins/event/internal/PluginServlet.java
+++ 
b/webconsole-plugins/event/src/main/java/org/apache/felix/webconsole/plugins/event/internal/PluginServlet.java
@@ -21,7 +21,6 @@ import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.PrintWriter;
-import java.net.URL;
 import java.util.Date;
 import java.util.Dictionary;
 import java.util.Iterator;
@@ -45,11 +44,11 @@ public class PluginServlet extends HttpServlet
 
     private static final long serialVersionUID = -8601361741848077124L;
 
-    private static final String ACTION_POST = "post"; //$NON-NLS-1$
-    private static final String ACTION_SEND = "send"; //$NON-NLS-1$
-    private static final String ACTION_CLEAR = "clear"; //$NON-NLS-1$
+    private static final String ACTION_POST = "post";
+    private static final String ACTION_SEND = "send";
+    private static final String ACTION_CLEAR = "clear";
 
-    private static final String PARAMETER_ACTION = "action"; //$NON-NLS-1$
+    private static final String PARAMETER_ACTION = "action";
 
     /** The event collector. */
     private final EventCollector collector;
@@ -64,7 +63,7 @@ public class PluginServlet extends HttpServlet
     public PluginServlet()
     {
         this.collector = new EventCollector();
-        TEMPLATE = readTemplateFile(getClass(), "/res/events.html"); 
//$NON-NLS-1$
+        TEMPLATE = readTemplateFile(getClass(), "/res/events.html");
     }
 
     private final String readTemplateFile(final Class<?> clazz, final String 
templateFile)
@@ -81,7 +80,7 @@ public class PluginServlet extends HttpServlet
                 {
                     baos.write(data, 0, len);
                 }
-                return baos.toString("UTF-8"); //$NON-NLS-1$
+                return baos.toString("UTF-8");
             }
             catch (IOException e)
             {
@@ -106,12 +105,12 @@ public class PluginServlet extends HttpServlet
         // template file does not exist, return an empty string
         log("readTemplateFile: File '" + templateFile + "' not found through 
class "
             + clazz);
-        return ""; //$NON-NLS-1$
+        return "";
     }
 
     private static final Event newEvent(HttpServletRequest request)
     {
-        String topic = request.getParameter("topic"); //$NON-NLS-1$
+        String topic = request.getParameter("topic");
 
         return new Event(topic, 
PropertiesEditorSupport.convertProperties(request));
     }
@@ -135,8 +134,8 @@ public class PluginServlet extends HttpServlet
             this.collector.clear();
         }
         // we always send back the json data
-        resp.setContentType( "application/json" ); //$NON-NLS-1$
-        resp.setCharacterEncoding( "utf-8" ); //$NON-NLS-1$
+        resp.setContentType( "application/json" );
+        resp.setCharacterEncoding( "utf-8" );
 
         renderJSON( resp.getWriter() );
     }
@@ -196,17 +195,13 @@ public class PluginServlet extends HttpServlet
         writer.endObject();
     }
 
-
     @Override
-    protected void doGet( HttpServletRequest request, HttpServletResponse 
response )
-    throws ServletException, IOException
-    {
-
+    public void doGet( HttpServletRequest request, HttpServletResponse 
response )
+    throws ServletException, IOException {
         final String info = request.getPathInfo();
-        if ( info.endsWith( ".json" ) ) //$NON-NLS-1$
-        {
-            response.setContentType( "application/json" ); //$NON-NLS-1$
-            response.setCharacterEncoding( "UTF-8" ); //$NON-NLS-1$
+        if ( info.endsWith( ".json" ) )  {
+            response.setContentType( "application/json" ); 
+            response.setCharacterEncoding( "UTF-8" );
 
             PrintWriter pw = response.getWriter();
             this.renderJSON( pw );
@@ -215,29 +210,12 @@ public class PluginServlet extends HttpServlet
             return;
         }
 
-        this.renderContent( request, response );
-    }
-
-
-    protected void renderContent( HttpServletRequest request, 
HttpServletResponse response )
-    throws ServletException, IOException
-    {
         final PrintWriter pw = response.getWriter();
         //final String appRoot = ( String ) request.getAttribute( 
"felix.webconsole.appRoot" );
         //pw.println( "<script src='" + appRoot + "/events/res/ui/" + 
"events.js" + "' type='text/javascript'></script>" );
         pw.print(TEMPLATE);
     }
 
-    public URL getResource(String path)
-    {
-        if ( path.startsWith("/events/res/ui/") ) //$NON-NLS-1$
-        {
-            return this.getClass().getResource(path.substring(7));
-        }
-        return null;
-    }
-
-
     private void eventJson( JSONWriter jw, EventInfo info, int index, final 
long start, final float scale )
     throws IOException
     {
diff --git 
a/webconsole-plugins/obr/src/main/java/org/apache/felix/webconsole/plugins/obr/internal/Activator.java
 
b/webconsole-plugins/obr/src/main/java/org/apache/felix/webconsole/plugins/obr/internal/Activator.java
index 3e94b5f79e..b864466905 100644
--- 
a/webconsole-plugins/obr/src/main/java/org/apache/felix/webconsole/plugins/obr/internal/Activator.java
+++ 
b/webconsole-plugins/obr/src/main/java/org/apache/felix/webconsole/plugins/obr/internal/Activator.java
@@ -41,9 +41,9 @@ public class Activator implements BundleActivator, 
ServiceTrackerCustomizer
     public final void start(BundleContext context) throws Exception
     {
         this.context = context;
-        Filter filter = context.createFilter("(|" //$NON-NLS-1$
-            + '(' + Constants.OBJECTCLASS + 
"=org.osgi.service.obr.RepositoryAdmin)" //$NON-NLS-1$
-            + '(' + Constants.OBJECTCLASS + 
"=org.apache.felix.bundlerepository.RepositoryAdmin)" //$NON-NLS-1$
+        Filter filter = context.createFilter("(|"
+            + '(' + Constants.OBJECTCLASS + 
"=org.osgi.service.obr.RepositoryAdmin)"
+            + '(' + Constants.OBJECTCLASS + 
"=org.apache.felix.bundlerepository.RepositoryAdmin)"
             + ')');
         this.tracker = new ServiceTracker(context, filter, this);
         this.tracker.open();
diff --git 
a/webconsole-plugins/obr/src/main/java/org/apache/felix/webconsole/plugins/obr/internal/WebConsolePlugin.java
 
b/webconsole-plugins/obr/src/main/java/org/apache/felix/webconsole/plugins/obr/internal/WebConsolePlugin.java
index cef9b1025c..22b00c4cf8 100644
--- 
a/webconsole-plugins/obr/src/main/java/org/apache/felix/webconsole/plugins/obr/internal/WebConsolePlugin.java
+++ 
b/webconsole-plugins/obr/src/main/java/org/apache/felix/webconsole/plugins/obr/internal/WebConsolePlugin.java
@@ -20,8 +20,6 @@ package org.apache.felix.webconsole.plugins.obr.internal;
 
 
 import java.io.IOException;
-import java.net.URLDecoder;
-import java.nio.charset.StandardCharsets;
 import java.util.Dictionary;
 import java.util.Enumeration;
 import java.util.Hashtable;
@@ -45,10 +43,10 @@ import jakarta.servlet.Servlet;
  */
 class WebConsolePlugin extends AbstractServlet
 {
-    private static final String LABEL = "obr"; //$NON-NLS-1$
-    private static final String TITLE = "%obr.pluginTitle"; //$NON-NLS-1$
-    private static final String CATEGORY = "OSGi"; //$NON-NLS-1$
-    private static final String CSS[] = { "/" + LABEL + "/res/plugin.css" }; 
//$NON-NLS-1$ //$NON-NLS-2$
+    private static final String LABEL = "obr";
+    private static final String TITLE = "%obr.pluginTitle";
+    private static final String CATEGORY = "OSGi";
+    private static final String CSS[] = { "/" + LABEL + "/res/plugin.css" };
 
     // templates
     private final String TEMPLATE;
@@ -122,21 +120,21 @@ class WebConsolePlugin extends AbstractServlet
             return;
         }
 
-        final String action = request.getParameter( "action" ); //$NON-NLS-1$
-        final String deploy = request.getParameter( "deploy" ); //$NON-NLS-1$
-        final String deploystart = request.getParameter( "deploystart" ); 
//$NON-NLS-1$
-        final String optional = request.getParameter( "optional" ); 
//$NON-NLS-1$
+        final String action = request.getParameter( "action" );
+        final String deploy = request.getParameter( "deploy" );
+        final String deploystart = request.getParameter( "deploystart" );
+        final String optional = request.getParameter( "optional" );
 
         if ( action != null )
         {
-            doAction( action, request.getParameter( "url" ) ); //$NON-NLS-1$
+            doAction( action, request.getParameter( "url" ) );
             response.getWriter().print( getData( request ) );
             return;
         }
 
         if ( deploy != null || deploystart != null )
         {
-            doDeploy( request.getParameterValues( "bundle" ), deploystart != 
null, optional != null ); //$NON-NLS-1$
+            doDeploy( request.getParameterValues( "bundle" ), deploystart != 
null, optional != null );
             doGet( request, response );
             return;
         }
@@ -184,7 +182,7 @@ class WebConsolePlugin extends AbstractServlet
         AbstractBundleRepositoryRenderHelper helper = getHelper();
         if ( helper == null || !helper.hasRepositoryAdmin() )
         {
-            return "{}"; //$NON-NLS-1$
+            return "{}";
         }
 
         RequestInfo info = new RequestInfo( request );
@@ -193,22 +191,22 @@ class WebConsolePlugin extends AbstractServlet
         String list = info.getList();
         if ( list != null )
         {
-            if ( "-".equals( list ) ) //$NON-NLS-1$
+            if ( "-".equals( list ) )
             {
-                StringBuffer sb = new StringBuffer( "(!(|" ); //$NON-NLS-1$
+                StringBuffer sb = new StringBuffer( "(!(|" );
                 for ( int c = 0; c < 26; c++ )
                 {
-                    sb.append( "(presentationname=" ).append( ( char ) ( 'a' + 
c ) ) //$NON-NLS-1$
-                      .append( "*)(presentationname=" ).append( ( char ) ( 'A' 
+ c ) ) //$NON-NLS-1$
-                      .append( "*)" ); //$NON-NLS-1$
+                    sb.append( "(presentationname=" ).append( ( char ) ( 'a' + 
c ) )
+                      .append( "*)(presentationname=" ).append( ( char ) ( 'A' 
+ c ) )
+                      .append( "*)" );
                 }
-                sb.append( "))" ); //$NON-NLS-1$
+                sb.append( "))" );
                 filter = sb.toString();
             }
             else
             {
-                filter = "(|(presentationname=" + list.toLowerCase() 
//$NON-NLS-1$
-                    + "*)(presentationname=" + list.toUpperCase() + "*))"; 
//$NON-NLS-1$ //$NON-NLS-2$
+                filter = "(|(presentationname=" + list.toLowerCase()
+                    + "*)(presentationname=" + list.toUpperCase() + "*))";
             }
         }
         else
@@ -218,33 +216,33 @@ class WebConsolePlugin extends AbstractServlet
             {
                 if ( query.indexOf( '=' ) > 0 )
                 {
-                    if ( query.startsWith( "(" ) ) //$NON-NLS-1$
+                    if ( query.startsWith( "(" ) )
                     {
                         filter = query;
                     }
                     else
                     {
-                        filter = "(" + query + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+                        filter = "(" + query + ")";
                     }
                 }
                 else
                 {
-                    filter = "(|(presentationame=*" + query + 
"*)(symbolicname=*" + query + "*))"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+                    filter = "(|(presentationame=*" + query + 
"*)(symbolicname=*" + query + "*))";
                 }
             }
             else
             {
-                StringBuffer sb = new StringBuffer( "(&" ); //$NON-NLS-1$
+                StringBuffer sb = new StringBuffer( "(&" );
                 for ( Enumeration e = request.getParameterNames(); 
e.hasMoreElements(); )
                 {
                     String k = ( String ) e.nextElement();
                     String v = request.getParameter( k );
                     if ( v != null && v.length() > 0
-                        && !"details".equals( k )  //$NON-NLS-1$
-                        && !"deploy".equals( k ) //$NON-NLS-1$
-                        && !"deploystart".equals( k )  //$NON-NLS-1$
-                        && !"bundle".equals( k )  //$NON-NLS-1$
-                        && !"optional".equals( k ) ) //$NON-NLS-1$
+                        && !"details".equals( k ) 
+                        && !"deploy".equals( k )
+                        && !"deploystart".equals( k ) 
+                        && !"bundle".equals( k ) 
+                        && !"optional".equals( k ) )
                     {
                         sb.append( '(' ).append( k ).append( '=' ).append( v 
).append( ')' );
                     }
@@ -303,7 +301,7 @@ class WebConsolePlugin extends AbstractServlet
         {
             if ( query == null )
             {
-                String query = URLDecoder.decode( request.getParameter( 
"query" ), StandardCharsets.UTF_8 ); //$NON-NLS-1$
+                String query = request.getParameter( "query" );
                 boolean details = false;
                 if ( query == null && request.getPathInfo().length() > 5 )
                 {
@@ -313,12 +311,12 @@ class WebConsolePlugin extends AbstractServlet
                     if ( slash < 0 )
                     {
                         // symbolic name only, version ??
-                        query = "(symbolicname=" + path + ")"; //$NON-NLS-1$ 
//$NON-NLS-2$
+                        query = "(symbolicname=" + path + ")";
                     }
                     else
                     {
-                        query = "(&(symbolicname=" + path.substring( 0, slash 
)  //$NON-NLS-1$
-                            + ")(version=" + path.substring( slash + 1 ) + 
"))"; //$NON-NLS-1$ //$NON-NLS-2$
+                        query = "(&(symbolicname=" + path.substring( 0, slash 
) 
+                            + ")(version=" + path.substring( slash + 1 ) + 
"))";
                         details = true;
                     }
                 }
@@ -334,10 +332,10 @@ class WebConsolePlugin extends AbstractServlet
         {
             if ( list == null )
             {
-                list = URLDecoder.decode( request.getParameter( "list" ), 
StandardCharsets.UTF_8 ); //$NON-NLS-1$
+                list = request.getParameter( "list" );
                 if ( list == null && 
!request.getParameterNames().hasMoreElements() && getQuery() == null )
                 {
-                    list = "a"; //$NON-NLS-1$
+                    list = "a";
                 }
             }
             return list;
diff --git a/webconsole-plugins/script-console/pom.xml 
b/webconsole-plugins/script-console/pom.xml
index f645535729..ce2120b0d4 100644
--- a/webconsole-plugins/script-console/pom.xml
+++ b/webconsole-plugins/script-console/pom.xml
@@ -37,14 +37,13 @@
   </description>
 
   <properties>
-    <pax-exam.version>4.6.0</pax-exam.version>
+    <pax-exam.version>4.13.5</pax-exam.version>
     <bundle.build.name>
       ${basedir}/target
     </bundle.build.name>
     <bundle.file.name>
       ${bundle.build.name}/${project.build.finalName}.jar
     </bundle.file.name>
-    <felix.java.version>6</felix.java.version>
   </properties>
 
   <scm>
@@ -60,7 +59,7 @@
             <plugin>
                 <groupId>org.apache.felix</groupId>
                 <artifactId>maven-bundle-plugin</artifactId>
-                <version>3.2.0</version>
+                <version>5.1.9</version>
                 <extensions>true</extensions>
                 <configuration>
                     <instructions>
@@ -69,8 +68,7 @@
                             ${project.artifactId}
                         </Bundle-SymbolicName>
                         <Import-Package>
-                           javax.servlet.*;version=2.3,
-                           org.apache.commons.io; version="[1.4,3)",
+                           jakarta.servlet.*;version="[5,7)",
                            *
                         </Import-Package>
                         <Bundle-Activator>
@@ -160,31 +158,30 @@
   </build>
 
   <dependencies>
-    <!-- Need to keep first to override conflicts in core and
-    compendium jars-->
+  <!-- Keep first to avoid problems with framework api differences during 
testing -->
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.framework</artifactId>
-      <version>5.4.0</version>
+      <version>7.0.5</version>
       <scope>test</scope>
     </dependency>
 
     <dependency>
       <groupId>org.osgi</groupId>
-      <artifactId>org.osgi.core</artifactId>
-      <version>4.2.0</version>
+      <artifactId>osgi.core</artifactId>
+      <version>6.0.0</version>
       <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>org.osgi</groupId>
-      <artifactId>org.osgi.compendium</artifactId>
-      <version>4.2.0</version>
+      <artifactId>org.osgi.service.log</artifactId>
+      <version>1.3.0</version>
       <scope>provided</scope>
     </dependency>
     <dependency>
-      <groupId>javax.servlet</groupId>
-      <artifactId>servlet-api</artifactId>
-      <version>2.4</version>
+      <groupId>jakarta.servlet</groupId>
+      <artifactId>jakarta.servlet-api</artifactId>
+      <version>5.0.0</version>
       <scope>provided</scope>
     </dependency>
     <dependency>
@@ -196,7 +193,7 @@
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.webconsole</artifactId>
-      <version>4.3.12</version>
+      <version>4.8.13-SNAPSHOT</version>
       <scope>provided</scope>
     </dependency>
     <dependency>
@@ -205,20 +202,13 @@
       <version>1.11.8</version>
       <scope>provided</scope>
     </dependency>
-    <dependency>
-      <groupId>commons-fileupload</groupId>
-      <artifactId>commons-fileupload</artifactId>
-      <version>1.5</version>
-      <scope>provided</scope>
-    </dependency>
-
 
     <!-- testing -->
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
+      <version>4.13.2</version>
       <scope>test</scope>
-      <version>4.10</version>
     </dependency>
     <!-- Pax Exam Dependencies -->
     <dependency>
@@ -260,13 +250,13 @@
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.configadmin</artifactId>
-      <version>1.6.0</version>
+      <version>1.9.26</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.http.jetty</artifactId>
-      <version>2.2.0</version>
+      <version>5.0.7-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git 
a/webconsole-plugins/script-console/src/main/java/org/apache/felix/webconsole/plugins/scriptconsole/internal/ScriptConsolePlugin.java
 
b/webconsole-plugins/script-console/src/main/java/org/apache/felix/webconsole/plugins/scriptconsole/internal/ScriptConsolePlugin.java
index 7c033dca13..feb7a2e8b3 100644
--- 
a/webconsole-plugins/script-console/src/main/java/org/apache/felix/webconsole/plugins/scriptconsole/internal/ScriptConsolePlugin.java
+++ 
b/webconsole-plugins/script-console/src/main/java/org/apache/felix/webconsole/plugins/scriptconsole/internal/ScriptConsolePlugin.java
@@ -18,30 +18,41 @@
  */
 package org.apache.felix.webconsole.plugins.scriptconsole.internal;
 
-import org.apache.commons.fileupload.FileItem;
 import org.apache.commons.io.IOUtils;
 import org.apache.felix.utils.json.JSONWriter;
-import org.apache.felix.webconsole.AbstractWebConsolePlugin;
-import org.apache.felix.webconsole.DefaultVariableResolver;
-import org.apache.felix.webconsole.SimpleWebConsolePlugin;
-import org.apache.felix.webconsole.WebConsoleUtil;
+import org.apache.felix.webconsole.servlet.AbstractServlet;
+import org.apache.felix.webconsole.servlet.RequestVariableResolver;
+import org.apache.felix.webconsole.servlet.ServletConstants;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.log.LogService;
 
-import javax.script.*;
-import javax.servlet.Servlet;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.*;
-import java.util.ArrayList;
+import jakarta.servlet.Servlet;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.Part;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintWriter;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.Dictionary;
+import java.util.Hashtable;
 import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-
-class ScriptConsolePlugin extends SimpleWebConsolePlugin
+import javax.script.Bindings;
+import javax.script.ScriptContext;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineFactory;
+import javax.script.ScriptException;
+import javax.script.SimpleBindings;
+import javax.script.SimpleScriptContext;
+
+class ScriptConsolePlugin extends AbstractServlet
 {
 
     public static final String NAME = "sc";
@@ -52,47 +63,44 @@ class ScriptConsolePlugin extends SimpleWebConsolePlugin
     private final String TEMPLATE;
     private final Logger log;
     private final ScriptEngineManager scriptEngineManager;
-    private final ServiceRegistration registration;
+    private final ServiceRegistration<Servlet> registration;
+    private final BundleContext bundleContext;
 
     public ScriptConsolePlugin(BundleContext bundleContext, Logger logger, 
ScriptEngineManager scriptEngineManager)
     {
-        super(NAME, TITLE, processFileNames(CSS));
+        this.bundleContext = bundleContext;
         this.log = logger;
         this.scriptEngineManager = scriptEngineManager;
-        TEMPLATE = readTemplateFile("/templates/script-console.html");
-        super.activate(bundleContext);
+        try {
+            TEMPLATE = readTemplateFile("/templates/script-console.html");
+        } catch (IOException e) {
+            throw new RuntimeException("Unable to read template file", e);
+        }
 
-        Properties props = new Properties();
+        Dictionary<String, Object> props = new Hashtable<>();
         props.put(Constants.SERVICE_VENDOR, "Apache Software Foundation");
         props.put(Constants.SERVICE_DESCRIPTION, "Script Console Web Console 
Plugin");
-        props.put("felix.webconsole.label", ScriptConsolePlugin.NAME);
-        props.put("felix.webconsole.title", "Script Console");
-
-        registration = 
getBundleContext().registerService(Servlet.class.getName(), this,
-            props);
-    }
-
+        props.put(ServletConstants.PLUGIN_LABEL, NAME);
+        props.put(ServletConstants.PLUGIN_TITLE, TITLE);
+        props.put(ServletConstants.PLUGIN_CATEGORY,  CATEGORY);
+        props.put(ServletConstants.PLUGIN_CSS_REFERENCES, 
processFileNames(CSS));
 
-    public String getCategory()
-    {
-        return CATEGORY;
+        registration = bundleContext.registerService(Servlet.class, this, 
props);
     }
 
-    @SuppressWarnings("unchecked")
     @Override
-    protected void renderContent(HttpServletRequest request, 
HttpServletResponse response)
+    public void renderContent(HttpServletRequest request, HttpServletResponse 
response)
         throws ServletException, IOException
     {
         final PrintWriter pw = response.getWriter();
-        DefaultVariableResolver varResolver = (DefaultVariableResolver) 
WebConsoleUtil.getVariableResolver(request);
+        RequestVariableResolver varResolver = 
this.getVariableResolver(request);
         varResolver.put("__scriptConfig__", getScriptConfig());
         pw.println(TEMPLATE);
     }
 
     @Override
     protected void doPost(HttpServletRequest req, HttpServletResponse resp)
-        throws ServletException, IOException
-    {
+        throws ServletException, IOException {
         final String contentType = getContentType(req);
         resp.setContentType(contentType);
         if (contentType.startsWith("text/"))
@@ -102,10 +110,10 @@ class ScriptConsolePlugin extends SimpleWebConsolePlugin
         final String script = getCodeValue(req);
         final Bindings bindings = new SimpleBindings();
         final PrintWriter pw = resp.getWriter();
-        final ScriptHelper osgi = new ScriptHelper(getBundleContext());
+        final ScriptHelper osgi = new ScriptHelper(this.bundleContext);
         final Writer errorWriter = new LogWriter(log);
-        final Reader reader = new StringReader(script)
-                ;
+        final Reader reader = new StringReader(script);
+
         //Populate bindings
         bindings.put("request", req);
         bindings.put("reader", reader);
@@ -115,12 +123,10 @@ class ScriptConsolePlugin extends SimpleWebConsolePlugin
 
         //Also expose the bundleContext to simplify scripts interaction with 
the
         //enclosing OSGi container
-        bindings.put("bundleContext", getBundleContext());
-
-        final String lang = WebConsoleUtil.getParameter(req, "lang");
-        final boolean webClient = 
"webconsole".equals(WebConsoleUtil.getParameter(req,
-            "client"));
+        bindings.put("bundleContext", this.bundleContext);
 
+        final String lang = req.getParameter("lang");
+        final boolean webClient = 
"webconsole".equals(req.getParameter("client"));
 
         SimpleScriptContext sc = new SimpleScriptContext();
         sc.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
@@ -131,7 +137,7 @@ class ScriptConsolePlugin extends SimpleWebConsolePlugin
         try
         {
             log.log(LogService.LOG_DEBUG, "Executing script" + script);
-           eval(script, lang, sc);
+            eval(script, lang, sc);
         }
         catch (Throwable t)
         {
@@ -165,9 +171,9 @@ class ScriptConsolePlugin extends SimpleWebConsolePlugin
 
     }
 
-    private String getCodeValue(HttpServletRequest req) throws IOException
+    private String getCodeValue(HttpServletRequest req) throws IOException, 
ServletException
     {
-        String script = WebConsoleUtil.getParameter(req, "code");
+        String script = req.getParameter("code");
         if (script == null)
         {
             script = getContentFromFilePart(req, "code");
@@ -181,7 +187,7 @@ class ScriptConsolePlugin extends SimpleWebConsolePlugin
 
     private String getContentType(HttpServletRequest req)
     {
-        String passedContentType = WebConsoleUtil.getParameter(req, 
"responseContentType");
+        String passedContentType = req.getParameter("responseContentType");
         if (passedContentType != null)
         {
             return passedContentType;
@@ -262,27 +268,22 @@ class ScriptConsolePlugin extends SimpleWebConsolePlugin
     }
 
     private String getContentFromFilePart(HttpServletRequest req, String 
paramName)
-        throws IOException
+        throws IOException, ServletException
     {
-        String value = WebConsoleUtil.getParameter(req, paramName);
+        String value = req.getParameter(paramName);
         if (value != null)
         {
             return value;
         }
-        final Map params = (Map) 
req.getAttribute(AbstractWebConsolePlugin.ATTR_FILEUPLOAD);
-        if (params == null)
-        {
-            return null;
-        }
-        FileItem[] codeFile = getFileItems(params, paramName);
-        if (codeFile.length == 0)
+        final Part part = req.getPart(paramName);
+        if (part == null)
         {
             return null;
         }
         InputStream is = null;
         try
         {
-            is = codeFile[0].getInputStream();
+            is = part.getInputStream();
             StringWriter sw = new StringWriter();
             IOUtils.copy(is, sw, "utf-8");
             return sw.toString();
@@ -293,26 +294,8 @@ class ScriptConsolePlugin extends SimpleWebConsolePlugin
         }
     }
 
-    private FileItem[] getFileItems(Map params, String name)
-    {
-        final List<FileItem> files = new ArrayList<FileItem>();
-        FileItem[] items = (FileItem[]) params.get(name);
-        if (items != null)
-        {
-            for (int i = 0; i < items.length; i++)
-            {
-                if (!items[i].isFormField() && items[i].getSize() > 0)
-                {
-                    files.add(items[i]);
-                }
-            }
-        }
-        return files.toArray(new FileItem[files.size()]);
-    }
-
     public void dispose()
     {
-        super.deactivate();
         if (registration != null)
         {
             registration.unregister();
diff --git 
a/webconsole-plugins/script-console/src/main/java/org/apache/felix/webconsole/plugins/scriptconsole/internal/ScriptEngineManager.java
 
b/webconsole-plugins/script-console/src/main/java/org/apache/felix/webconsole/plugins/scriptconsole/internal/ScriptEngineManager.java
index ce335e29a6..a8847985ea 100644
--- 
a/webconsole-plugins/script-console/src/main/java/org/apache/felix/webconsole/plugins/scriptconsole/internal/ScriptEngineManager.java
+++ 
b/webconsole-plugins/script-console/src/main/java/org/apache/felix/webconsole/plugins/scriptconsole/internal/ScriptEngineManager.java
@@ -204,8 +204,8 @@ class ScriptEngineManager implements BundleListener, 
ServiceTrackerCustomizer
             {
                 try
                 {
-                    Class<ScriptEngineFactory> clazz = 
bundle.loadClass(className);
-                    ScriptEngineFactory spi = clazz.newInstance();
+                    Class<ScriptEngineFactory> clazz = 
(Class<ScriptEngineFactory>) bundle.loadClass(className);
+                    ScriptEngineFactory spi = 
clazz.getDeclaredConstructor().newInstance();
                     registerFactory(mgr, spi, null);
                     extensions.addAll(spi.getExtensions());
                 }
diff --git 
a/webconsole-plugins/script-console/src/test/java/org/apache/felix/webconsole/plugins/scriptconsole/integration/ServerConfiguration.java
 
b/webconsole-plugins/script-console/src/test/java/org/apache/felix/webconsole/plugins/scriptconsole/integration/ServerConfiguration.java
index c53004fa5e..e716628753 100644
--- 
a/webconsole-plugins/script-console/src/test/java/org/apache/felix/webconsole/plugins/scriptconsole/integration/ServerConfiguration.java
+++ 
b/webconsole-plugins/script-console/src/test/java/org/apache/felix/webconsole/plugins/scriptconsole/integration/ServerConfiguration.java
@@ -81,10 +81,12 @@ public class ServerConfiguration
                 mavenBundle("org.ops4j.pax.logging", "pax-logging-api", 
"1.7.0").startLevel(2),
                 mavenBundle("org.ops4j.pax.logging", "pax-logging-service", 
"1.7.0").startLevel(2),
                 mavenBundle("org.apache.felix", 
"org.apache.felix.configadmin").versionAsInProject(),
+                mavenBundle("org.apache.felix", 
"org.apache.felix.http.servlet-api", "2.1.0"),
+                mavenBundle("org.owasp.encoder", "encoder", "1.2.3"),
                 mavenBundle("org.apache.felix", 
"org.apache.felix.http.jetty").versionAsInProject(),
                 mavenBundle("org.apache.felix", 
"org.apache.felix.webconsole").versionAsInProject(),
                 mavenBundle("commons-io", "commons-io").versionAsInProject(),
-                wrappedBundle(mavenBundle("commons-fileupload", 
"commons-fileupload").versionAsInProject()),
+                mavenBundle("commons-fileupload", "commons-fileupload", "1.5"),
                 mavenBundle("org.codehaus.groovy", "groovy-all", "2.1.0"),
                 frameworkProperty("osgi.clean").value("true"),
 //            
systemProperty("org.ops4j.pax.logging.DefaultServiceLog.level").value("INFO"),

Reply via email to