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 e0ea7186d3 FELIX-6631 : Migrate webconsole plugins to jakarta.servlet 
api
e0ea7186d3 is described below

commit e0ea7186d372bdf77555bfb395c41c38f4d50a4b
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Tue Aug 22 08:04:43 2023 +0200

    FELIX-6631 : Migrate webconsole plugins to jakarta.servlet api
---
 webconsole-plugins/obr/pom.xml                     | 30 ++++----
 .../AbstractBundleRepositoryRenderHelper.java      | 12 ++--
 .../webconsole/plugins/obr/internal/Activator.java | 11 ++-
 .../FelixBundleRepositoryRenderHelper.java         | 16 ++---
 .../plugins/obr/internal/FelixDeployer.java        | 23 +++---
 .../internal/OsgiBundleRepositoryRenderHelper.java | 14 ++--
 .../plugins/obr/internal/OsgiDeployer.java         | 34 ++++-----
 .../plugins/obr/internal/WebConsolePlugin.java     | 84 +++++++++++++---------
 8 files changed, 121 insertions(+), 103 deletions(-)

diff --git a/webconsole-plugins/obr/pom.xml b/webconsole-plugins/obr/pom.xml
index d7fac0e4e3..65364f8bfb 100644
--- a/webconsole-plugins/obr/pom.xml
+++ b/webconsole-plugins/obr/pom.xml
@@ -33,6 +33,10 @@
                <url>https://gitbox.apache.org/repos/asf?p=felix-dev.git</url>
        </scm>
 
+    <properties>
+           <felix.java.version>11</felix.java.version>
+    </properties>
+
        <build>
                <plugins>
                        <!-- translate UTF-8 encoded properties files to 
ISO-8859-1 -->
@@ -55,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>
@@ -96,33 +100,33 @@
 
        <dependencies>
                <dependency>
-                       <groupId>javax.servlet</groupId>
-                       <artifactId>servlet-api</artifactId>
-                       <version>2.4</version>
-                       <scope>provided</scope>
-               </dependency>
-               <dependency>
-                       <groupId>org.osgi</groupId>
-                       <artifactId>org.osgi.core</artifactId>
+                       <groupId>jakarta.servlet</groupId>
+                       <artifactId>jakarta.servlet-api</artifactId>
                        <version>5.0.0</version>
                        <scope>provided</scope>
                </dependency>
                <dependency>
                        <groupId>org.osgi</groupId>
-                       <artifactId>org.osgi.compendium</artifactId>
-                       <version>4.1.0</version>
+                       <artifactId>osgi.core</artifactId>
+                       <version>6.0.0</version>
                        <scope>provided</scope>
                </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <version>1.7.36</version>
+            <scope>provided</scope>
+        </dependency>
                <dependency>
             <groupId>org.apache.felix</groupId>
                        <artifactId>org.apache.felix.utils</artifactId>
-                       <version>1.9.0</version>
+                       <version>1.11.8</version>
                        <scope>provided</scope>
                </dependency>
                <dependency>
                        <groupId>org.apache.felix</groupId>
                        <artifactId>org.apache.felix.webconsole</artifactId>
-                       <version>3.0.0</version>
+                       <version>4.8.13-SNAPSHOT</version>
                        <scope>provided</scope>
                </dependency>
 
diff --git 
a/webconsole-plugins/obr/src/main/java/org/apache/felix/webconsole/plugins/obr/internal/AbstractBundleRepositoryRenderHelper.java
 
b/webconsole-plugins/obr/src/main/java/org/apache/felix/webconsole/plugins/obr/internal/AbstractBundleRepositoryRenderHelper.java
index 9e0b5f212e..c1bf8c0a28 100644
--- 
a/webconsole-plugins/obr/src/main/java/org/apache/felix/webconsole/plugins/obr/internal/AbstractBundleRepositoryRenderHelper.java
+++ 
b/webconsole-plugins/obr/src/main/java/org/apache/felix/webconsole/plugins/obr/internal/AbstractBundleRepositoryRenderHelper.java
@@ -21,25 +21,25 @@ package org.apache.felix.webconsole.plugins.obr.internal;
 
 import java.io.IOException;
 
-import javax.servlet.ServletException;
-import org.apache.felix.webconsole.AbstractWebConsolePlugin;
+import jakarta.servlet.ServletException;
+
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.util.tracker.ServiceTracker;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 
 abstract class AbstractBundleRepositoryRenderHelper
 {
 
-    protected final AbstractWebConsolePlugin logger;
+    protected final Logger logger = LoggerFactory.getLogger(this.getClass());
 
     private final ServiceTracker repositoryAdmin;
 
 
-    protected AbstractBundleRepositoryRenderHelper( final 
AbstractWebConsolePlugin logger,
-        final BundleContext bundleContext, final String serviceName )
+    protected AbstractBundleRepositoryRenderHelper( final BundleContext 
bundleContext, final String serviceName )
     {
-        this.logger = logger;
         this.repositoryAdmin = new ServiceTracker( bundleContext, serviceName, 
null );
         this.repositoryAdmin.open();
     }
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 0a5338058f..3d0a52a6f6 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
@@ -16,7 +16,6 @@
  */
 package org.apache.felix.webconsole.plugins.obr.internal;
 
-import org.apache.felix.webconsole.SimpleWebConsolePlugin;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
@@ -34,7 +33,7 @@ public class Activator implements BundleActivator, 
ServiceTrackerCustomizer, Con
     private ServiceTracker tracker;
     private BundleContext context;
 
-    private SimpleWebConsolePlugin plugin;
+    private WebConsolePlugin plugin;
 
     /**
      * @see 
org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
@@ -76,10 +75,10 @@ public class Activator implements BundleActivator, 
ServiceTrackerCustomizer, Con
      */
     public final Object addingService(ServiceReference reference)
     {
-        SimpleWebConsolePlugin plugin = this.plugin;
+        WebConsolePlugin plugin = this.plugin;
         if (plugin == null)
         {
-            this.plugin = plugin = new WebConsolePlugin().register(context);
+            this.plugin = new WebConsolePlugin().register(context);
         }
 
         return context.getService(reference);
@@ -91,11 +90,11 @@ public class Activator implements BundleActivator, 
ServiceTrackerCustomizer, Con
      */
     public final void removedService(ServiceReference reference, Object 
service)
     {
-        SimpleWebConsolePlugin plugin = this.plugin;
+        WebConsolePlugin plugin = this.plugin;
 
         if (tracker.getTrackingCount() == 0 && plugin != null)
         {
-            plugin.unregister();
+            plugin.deactivate();
             this.plugin = null;
         }
 
diff --git 
a/webconsole-plugins/obr/src/main/java/org/apache/felix/webconsole/plugins/obr/internal/FelixBundleRepositoryRenderHelper.java
 
b/webconsole-plugins/obr/src/main/java/org/apache/felix/webconsole/plugins/obr/internal/FelixBundleRepositoryRenderHelper.java
index ba5aaa0f4f..b54317b236 100644
--- 
a/webconsole-plugins/obr/src/main/java/org/apache/felix/webconsole/plugins/obr/internal/FelixBundleRepositoryRenderHelper.java
+++ 
b/webconsole-plugins/obr/src/main/java/org/apache/felix/webconsole/plugins/obr/internal/FelixBundleRepositoryRenderHelper.java
@@ -22,7 +22,7 @@ package org.apache.felix.webconsole.plugins.obr.internal;
 import java.io.IOException;
 import java.io.StringWriter;
 
-import javax.servlet.ServletException;
+import jakarta.servlet.ServletException;
 
 import org.apache.felix.bundlerepository.Capability;
 import org.apache.felix.bundlerepository.Property;
@@ -33,7 +33,7 @@ import org.apache.felix.bundlerepository.Requirement;
 import org.apache.felix.bundlerepository.Resolver;
 import org.apache.felix.bundlerepository.Resource;
 import org.apache.felix.utils.json.JSONWriter;
-import org.apache.felix.webconsole.AbstractWebConsolePlugin;
+import org.apache.felix.webconsole.servlet.AbstractServlet;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.InvalidSyntaxException;
@@ -47,9 +47,9 @@ import org.osgi.framework.Version;
 class FelixBundleRepositoryRenderHelper extends 
AbstractBundleRepositoryRenderHelper
 {
 
-    FelixBundleRepositoryRenderHelper( AbstractWebConsolePlugin logger, 
BundleContext bundleContext )
+    FelixBundleRepositoryRenderHelper( BundleContext bundleContext )
     {
-        super( logger, bundleContext, RepositoryAdmin.class.getName() );
+        super( bundleContext, RepositoryAdmin.class.getName() );
     }
 
 
@@ -105,11 +105,11 @@ class FelixBundleRepositoryRenderHelper extends 
AbstractBundleRepositoryRenderHe
             }
             catch ( IOException e )
             {
-                logger.log( "Failed to serialize repository to JSON object.", 
e );
+                logger.info( "Failed to serialize repository to JSON object.", 
e );
             }
             catch ( Exception e )
             {
-                logger.log( "Failed to parse filter '" + filter + "'", e );
+                logger.info( "Failed to parse filter '" + filter + "'", e );
                 try
                 {
                     String reason = "filter=" + filter;
@@ -178,7 +178,7 @@ class FelixBundleRepositoryRenderHelper extends 
AbstractBundleRepositoryRenderHe
             // check whether we have to do something
             if ( bundles == null || bundles.length == 0 )
             {
-                logger.log( "No resources to deploy" );
+                logger.info( "No resources to deploy" );
                 return;
             }
 
@@ -202,7 +202,7 @@ class FelixBundleRepositoryRenderHelper extends 
AbstractBundleRepositoryRenderHe
                 }
             }
 
-            FelixDeployer.deploy( resolver, logger, start, optional );
+            FelixDeployer.deploy( resolver, start, optional );
         }
         catch ( InvalidSyntaxException e )
         {
diff --git 
a/webconsole-plugins/obr/src/main/java/org/apache/felix/webconsole/plugins/obr/internal/FelixDeployer.java
 
b/webconsole-plugins/obr/src/main/java/org/apache/felix/webconsole/plugins/obr/internal/FelixDeployer.java
index bfed872bf9..06db7b228a 100644
--- 
a/webconsole-plugins/obr/src/main/java/org/apache/felix/webconsole/plugins/obr/internal/FelixDeployer.java
+++ 
b/webconsole-plugins/obr/src/main/java/org/apache/felix/webconsole/plugins/obr/internal/FelixDeployer.java
@@ -22,8 +22,8 @@ package org.apache.felix.webconsole.plugins.obr.internal;
 import org.apache.felix.bundlerepository.Reason;
 import org.apache.felix.bundlerepository.Resolver;
 import org.apache.felix.bundlerepository.Resource;
-import org.apache.felix.webconsole.AbstractWebConsolePlugin;
-import org.osgi.service.log.LogService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 
 class FelixDeployer implements Runnable
@@ -31,25 +31,24 @@ class FelixDeployer implements Runnable
 
     private final Resolver obrResolver;
 
-    private final AbstractWebConsolePlugin logger;
+    private final Logger logger = LoggerFactory.getLogger( getClass() );
 
     private final boolean startBundles;
 
     private final boolean optionalDependencies;
 
-    static void deploy(Resolver obrResolver, AbstractWebConsolePlugin logger, 
boolean startBundles,
+    static void deploy(Resolver obrResolver, boolean startBundles,
         boolean optionalDependencies)
     {
-        final FelixDeployer d = new FelixDeployer(obrResolver, logger, 
startBundles, optionalDependencies);
+        final FelixDeployer d = new FelixDeployer(obrResolver, startBundles, 
optionalDependencies);
         final Thread t = new Thread(d, "OBR Bundle Deployer (Apache Felix 
API)");
         t.start();
     }
 
-    private FelixDeployer(Resolver obrResolver, AbstractWebConsolePlugin 
logger, boolean startBundles,
+    private FelixDeployer(Resolver obrResolver, boolean startBundles,
         boolean optionalDependencies)
     {
         this.obrResolver = obrResolver;
-        this.logger = logger;
         this.startBundles = startBundles;
         this.optionalDependencies = optionalDependencies;
     }
@@ -78,7 +77,7 @@ class FelixDeployer implements Runnable
         }
         catch ( Exception ie )
         {
-            logger.log( LogService.LOG_ERROR, "Cannot install bundles", ie );
+            logger.error( "Cannot install bundles", ie );
         }
     }
 
@@ -87,10 +86,10 @@ class FelixDeployer implements Runnable
     {
         if ( res != null && res.length > 0 )
         {
-            logger.log( LogService.LOG_INFO, message );
+            logger.info( message );
             for ( int i = 0; i < res.length; i++ )
             {
-                logger.log( LogService.LOG_INFO, "  " + i + ": " + 
res[i].getSymbolicName() + ", "
+                logger.info( "  " + i + ": " + res[i].getSymbolicName() + ", "
                     + res[i].getVersion() );
             }
         }
@@ -99,7 +98,7 @@ class FelixDeployer implements Runnable
 
     private void logRequirements( String message, Reason[] reasons )
     {
-        logger.log( LogService.LOG_ERROR, message );
+        logger.error( message );
         for ( int i = 0; reasons != null && i < reasons.length; i++ )
         {
             String moreInfo = reasons[i].getRequirement().getComment();
@@ -107,7 +106,7 @@ class FelixDeployer implements Runnable
             {
                 moreInfo = reasons[i].getRequirement().getFilter().toString();
             }
-            logger.log( LogService.LOG_ERROR, "  " + i + ": " + 
reasons[i].getRequirement().getName() + " (" + moreInfo + ")" );
+            logger.error( "  " + i + ": " + 
reasons[i].getRequirement().getName() + " (" + moreInfo + ")" );
         }
     }
 
diff --git 
a/webconsole-plugins/obr/src/main/java/org/apache/felix/webconsole/plugins/obr/internal/OsgiBundleRepositoryRenderHelper.java
 
b/webconsole-plugins/obr/src/main/java/org/apache/felix/webconsole/plugins/obr/internal/OsgiBundleRepositoryRenderHelper.java
index 69f913edae..290bf5ff41 100644
--- 
a/webconsole-plugins/obr/src/main/java/org/apache/felix/webconsole/plugins/obr/internal/OsgiBundleRepositoryRenderHelper.java
+++ 
b/webconsole-plugins/obr/src/main/java/org/apache/felix/webconsole/plugins/obr/internal/OsgiBundleRepositoryRenderHelper.java
@@ -26,7 +26,7 @@ import java.util.Iterator;
 import java.util.Map;
 import java.util.Map.Entry;
 
-import javax.servlet.ServletException;
+import jakarta.servlet.ServletException;
 
 import org.apache.felix.utils.json.JSONWriter;
 import org.apache.felix.webconsole.AbstractWebConsolePlugin;
@@ -48,9 +48,9 @@ import org.osgi.service.obr.Resource;
 class OsgiBundleRepositoryRenderHelper extends 
AbstractBundleRepositoryRenderHelper
 {
 
-    OsgiBundleRepositoryRenderHelper( final AbstractWebConsolePlugin logger, 
final BundleContext bundleContext )
+    OsgiBundleRepositoryRenderHelper( final BundleContext bundleContext )
     {
-        super( logger, bundleContext, RepositoryAdmin.class.getName() );
+        super( bundleContext, RepositoryAdmin.class.getName() );
     }
 
 
@@ -104,11 +104,11 @@ class OsgiBundleRepositoryRenderHelper extends 
AbstractBundleRepositoryRenderHel
             }
             catch ( IOException e )
             {
-                logger.log( "Failed to serialize repository to JSON object.", 
e );
+                logger.error( "Failed to serialize repository to JSON 
object.", e );
             }
             catch ( Exception e )
             {
-                logger.log( "Failed to parse filter '" + filter + "'", e );
+                logger.error( "Failed to parse filter '" + filter + "'", e );
                 try
                 {
                     String reason = "filter=" + filter;
@@ -175,7 +175,7 @@ class OsgiBundleRepositoryRenderHelper extends 
AbstractBundleRepositoryRenderHel
         // check whether we have to do something
         if ( bundles == null || bundles.length == 0 )
         {
-            logger.log( "No resources to deploy" );
+            logger.info( "No resources to deploy" );
             return;
         }
 
@@ -199,7 +199,7 @@ class OsgiBundleRepositoryRenderHelper extends 
AbstractBundleRepositoryRenderHel
             }
         }
 
-        OsgiDeployer.deploy( resolver, logger, start );
+        OsgiDeployer.deploy( resolver, start );
     }
 
 
diff --git 
a/webconsole-plugins/obr/src/main/java/org/apache/felix/webconsole/plugins/obr/internal/OsgiDeployer.java
 
b/webconsole-plugins/obr/src/main/java/org/apache/felix/webconsole/plugins/obr/internal/OsgiDeployer.java
index e20da6f859..e585585d9a 100644
--- 
a/webconsole-plugins/obr/src/main/java/org/apache/felix/webconsole/plugins/obr/internal/OsgiDeployer.java
+++ 
b/webconsole-plugins/obr/src/main/java/org/apache/felix/webconsole/plugins/obr/internal/OsgiDeployer.java
@@ -20,10 +20,11 @@ package org.apache.felix.webconsole.plugins.obr.internal;
 
 
 import org.apache.felix.webconsole.AbstractWebConsolePlugin;
-import org.osgi.service.log.LogService;
 import org.osgi.service.obr.Requirement;
 import org.osgi.service.obr.Resolver;
 import org.osgi.service.obr.Resource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 
 class OsgiDeployer implements Runnable
@@ -31,21 +32,20 @@ class OsgiDeployer implements Runnable
 
     private final Resolver obrResolver;
 
-    private final AbstractWebConsolePlugin logger;
+    private final static Logger logger = LoggerFactory.getLogger( 
OsgiDeployer.class );
 
     private final boolean startBundles;
 
 
-    OsgiDeployer( Resolver obrResolver, AbstractWebConsolePlugin logger, 
boolean startBundles )
+    OsgiDeployer( Resolver obrResolver, boolean startBundles )
     {
         this.obrResolver = obrResolver;
-        this.logger = logger;
         this.startBundles = startBundles;
     }
 
-    static void deploy( Resolver obrResolver, AbstractWebConsolePlugin logger, 
boolean startBundles )
+    static void deploy( Resolver obrResolver, boolean startBundles )
     {
-        final OsgiDeployer d = new OsgiDeployer( obrResolver, logger, 
startBundles );
+        final OsgiDeployer d = new OsgiDeployer( obrResolver, startBundles );
         final Thread t = new Thread( d, "OBR Bundle Deployer (OSGi API)" );
         t.start();
     }
@@ -60,42 +60,42 @@ class OsgiDeployer implements Runnable
             if ( obrResolver.resolve() )
             {
 
-                logResource( logger, "Installing Requested Resources", 
obrResolver.getAddedResources() );
-                logResource( logger, "Installing Required Resources", 
obrResolver.getRequiredResources() );
-                logResource( logger, "Installing Optional Resources", 
obrResolver.getOptionalResources() );
+                logResource( "Installing Requested Resources", 
obrResolver.getAddedResources() );
+                logResource( "Installing Required Resources", 
obrResolver.getRequiredResources() );
+                logResource( "Installing Optional Resources", 
obrResolver.getOptionalResources() );
 
                 obrResolver.deploy( startBundles );
             }
             else
             {
-                logRequirements( logger, "Cannot Install requested bundles due 
to unsatisfied requirements",
+                logRequirements( "Cannot Install requested bundles due to 
unsatisfied requirements",
                     obrResolver.getUnsatisfiedRequirements() );
             }
         }
         catch ( Exception ie )
         {
-            logger.log( LogService.LOG_ERROR, "Cannot install bundles", ie );
+            logger.error( "Cannot install bundles", ie );
         }
     }
 
 
-    public static void logResource( AbstractWebConsolePlugin logger, String 
message, Resource[] res )
+    public static void logResource( String message, Resource[] res )
     {
         if ( res != null && res.length > 0 )
         {
-            logger.log( LogService.LOG_INFO, message );
+            logger.info( message );
             for ( int i = 0; i < res.length; i++ )
             {
-                logger.log( LogService.LOG_INFO, "  " + i + ": " + 
res[i].getSymbolicName() + ", "
+                logger.info( "  " + i + ": " + res[i].getSymbolicName() + ", "
                     + res[i].getVersion() );
             }
         }
     }
 
 
-    public static void logRequirements( AbstractWebConsolePlugin logger, 
String message, Requirement[] reasons )
+    public static void logRequirements( String message, Requirement[] reasons )
     {
-        logger.log( LogService.LOG_ERROR, message );
+        logger.error(  message );
         for ( int i = 0; reasons != null && i < reasons.length; i++ )
         {
             String moreInfo = reasons[i].getComment();
@@ -103,7 +103,7 @@ class OsgiDeployer implements Runnable
             {
                 moreInfo = reasons[i].getFilter().toString();
             }
-            logger.log( LogService.LOG_ERROR, "  " + i + ": " + 
reasons[i].getName() + " (" + moreInfo + ")" );
+            logger.error( "  " + i + ": " + reasons[i].getName() + " (" + 
moreInfo + ")" );
         }
     }
 
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 ef1b85bf9c..cef9b1025c 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,22 +20,30 @@ 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;
 
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 
-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.ServiceRegistration;
+
+import jakarta.servlet.Servlet;
 
 
 /**
  * This class provides a plugin for rendering the available OSGi Bundle 
Repositories
  * and the resources they provide.
  */
-class WebConsolePlugin extends SimpleWebConsolePlugin
+class WebConsolePlugin extends AbstractServlet
 {
     private static final String LABEL = "obr"; //$NON-NLS-1$
     private static final String TITLE = "%obr.pluginTitle"; //$NON-NLS-1$
@@ -47,56 +55,64 @@ class WebConsolePlugin extends SimpleWebConsolePlugin
 
     private AbstractBundleRepositoryRenderHelper helper;
 
+    private ServiceRegistration<Servlet> registration;
+
+    private BundleContext bundleContext;
 
     /**
      *
      */
     public WebConsolePlugin()
     {
-        super( LABEL, TITLE, CSS );
-
         // load templates
-        TEMPLATE = readTemplateFile("/res/plugin.html"); //$NON-NLS-1$
+        try {
+            TEMPLATE = readTemplateFile("/res/plugin.html");
+        } catch (IOException e) {
+            throw new RuntimeException("Unable to read template");
+        }
     }
 
+    public WebConsolePlugin register(final BundleContext context) {
+        this.bundleContext = context;
+        final Dictionary<String, Object> props = new Hashtable<>();
+        props.put(ServletConstants.PLUGIN_LABEL, LABEL);
+        props.put(ServletConstants.PLUGIN_TITLE, TITLE);
+        props.put(ServletConstants.PLUGIN_CATEGORY, CATEGORY);
+        props.put(ServletConstants.PLUGIN_CSS_REFERENCES, CSS);
 
-    public String getCategory()
-    {
-        return CATEGORY;
+        this.registration = context.registerService(Servlet.class, this, 
props);
+        return this;
     }
 
-
-    /**
-     * @see org.apache.felix.webconsole.SimpleWebConsolePlugin#deactivate()
-     */
     public void deactivate()
     {
+        if (this.registration != null) {
+            try {
+                this.registration.unregister();
+            } catch ( final IllegalStateException ignore) {
+                // ignore
+            }
+            this.registration = null;
+        }
         if ( helper != null )
         {
             helper.dispose();
             helper = null;
         }
-
-        super.deactivate();
     }
 
-
-    /**
-     * @see 
org.apache.felix.webconsole.AbstractWebConsolePlugin#renderContent(javax.servlet.http.HttpServletRequest,
 javax.servlet.http.HttpServletResponse)
-     */
-    protected void renderContent( HttpServletRequest request, 
HttpServletResponse response ) throws IOException
+    @Override
+    public void renderContent( HttpServletRequest request, HttpServletResponse 
response ) throws IOException
     {
         // prepare variables
-        DefaultVariableResolver vars = ( ( DefaultVariableResolver ) 
WebConsoleUtil.getVariableResolver( request ) );
-        vars.put( "__data__", getData( request ) ); //$NON-NLS-1$
+        RequestVariableResolver vars = this.getVariableResolver(request);
+        vars.put( "__data__", getData( request ) );
 
         response.getWriter().print( TEMPLATE );
     }
 
 
-    /**
-     * @see 
javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, 
javax.servlet.http.HttpServletResponse)
-     */
+    @Override
     protected void doPost( HttpServletRequest request, HttpServletResponse 
response ) throws ServletException,
         IOException
     {
@@ -135,7 +151,7 @@ class WebConsolePlugin extends SimpleWebConsolePlugin
         {
             try
             {
-                helper = new FelixBundleRepositoryRenderHelper( this, 
getBundleContext() );
+                helper = new FelixBundleRepositoryRenderHelper( 
this.bundleContext );
             }
             catch ( Throwable felixt )
             {
@@ -143,7 +159,7 @@ class WebConsolePlugin extends SimpleWebConsolePlugin
 
                 try
                 {
-                    helper = new OsgiBundleRepositoryRenderHelper( this, 
getBundleContext() );
+                    helper = new OsgiBundleRepositoryRenderHelper( 
this.bundleContext );
                 }
                 catch ( Throwable osgit )
                 {
@@ -238,7 +254,7 @@ class WebConsolePlugin extends SimpleWebConsolePlugin
             }
         }
 
-        return helper.getData( filter, info.showDetails(), 
getBundleContext().getBundles() );
+        return helper.getData( filter, info.showDetails(), 
this.bundleContext.getBundles() );
     }
 
 
@@ -287,7 +303,7 @@ class WebConsolePlugin extends SimpleWebConsolePlugin
         {
             if ( query == null )
             {
-                String query = WebConsoleUtil.urlDecode( request.getParameter( 
"query" ) ); //$NON-NLS-1$
+                String query = URLDecoder.decode( request.getParameter( 
"query" ), StandardCharsets.UTF_8 ); //$NON-NLS-1$
                 boolean details = false;
                 if ( query == null && request.getPathInfo().length() > 5 )
                 {
@@ -318,7 +334,7 @@ class WebConsolePlugin extends SimpleWebConsolePlugin
         {
             if ( list == null )
             {
-                list = WebConsoleUtil.urlDecode( request.getParameter( "list" 
) ); //$NON-NLS-1$
+                list = URLDecoder.decode( request.getParameter( "list" ), 
StandardCharsets.UTF_8 ); //$NON-NLS-1$
                 if ( list == null && 
!request.getParameterNames().hasMoreElements() && getQuery() == null )
                 {
                     list = "a"; //$NON-NLS-1$

Reply via email to