diff --git a/pom.xml b/pom.xml
index ec5de92..23ea8bb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
com.neva.felix
search-webconsole-plugin
bundle
- 2.0.0
+ 2.0.1-SNAPSHOT
search-webconsole-plugin
Search everywhere plugin for Apache Felix Web Console
2017
@@ -64,27 +64,6 @@
-
-
-
- false
-
- central
- bintray
- https://jcenter.bintray.com
-
-
-
-
-
- false
-
- central
- bintray-plugins
- https://jcenter.bintray.com
-
-
-
@@ -116,15 +95,12 @@
${project.description}
com.neva.felix.webconsole.plugins.search
com.neva.felix.webconsole.plugins.search.SearchActivator
- javax.management.*,javax.lang.*,org.slf4j.*,org.osgi.*
+ javax.management.*,javax.lang.*,org.slf4j.*,org.osgi.*,jakarta.servlet.*,org.apache.felix.webconsole.*
org.osgi.service.log;version="[1.3,2)",
org.osgi.service.cm;version="[1.2,2)",
org.osgi.service.metatype;version="[1.1,2)",
org.osgi.util.tracker;version="[1.5.1,2)",
- javax.servlet;
- javax.servlet.http;version="[2.3,4)",
- org.apache.felix.webconsole;version="[3.0,4)"
com.neva.felix.webconsole.plugins.search.*,
@@ -214,13 +190,13 @@
org.apache.felix
org.apache.felix.webconsole
- 3.0.0
+ 4.9.6
provided
- javax.servlet
- servlet-api
- 2.3
+ jakarta.servlet
+ jakarta.servlet-api
+ 6.0.0
provided
diff --git a/src/main/java/com/neva/felix/webconsole/plugins/search/SearchActivator.java b/src/main/java/com/neva/felix/webconsole/plugins/search/SearchActivator.java
index 080f033..0cd4a44 100644
--- a/src/main/java/com/neva/felix/webconsole/plugins/search/SearchActivator.java
+++ b/src/main/java/com/neva/felix/webconsole/plugins/search/SearchActivator.java
@@ -3,34 +3,59 @@
import com.neva.felix.webconsole.plugins.search.plugin.AbstractPlugin;
import com.neva.felix.webconsole.plugins.search.plugin.SearchPlugin;
import com.google.common.collect.ImmutableSet;
+import com.neva.felix.webconsole.plugins.search.rest.*;
+import jakarta.servlet.Servlet;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
+import java.util.LinkedList;
+import java.util.List;
import java.util.Set;
public class SearchActivator implements BundleActivator {
- private SearchHttpTracker httpTracker;
+ private final List services = new LinkedList<>();
@Override
public void start(BundleContext bundleContext) throws Exception {
for (AbstractPlugin plugin : getPlugins(bundleContext)) {
- plugin.register();
+ ServiceRegistration service = bundleContext.registerService(Servlet.class.getName(), this, plugin.getProps());
+ if (service != null) {
+ services.add(service);
+ }
+ }
+ for (RestServlet servlet : getServlets(bundleContext)) {
+ ServiceRegistration service = bundleContext.registerService(Servlet.class.getName(), servlet, servlet.getProps());
+ if (service != null) {
+ services.add(service);
+ }
}
-
- httpTracker = new SearchHttpTracker(bundleContext);
- httpTracker.open();
}
@Override
public void stop(BundleContext bundleContext) throws Exception {
- httpTracker.close();
- httpTracker = null;
+ for (ServiceRegistration service : services) {
+ service.unregister();
+ }
}
private Set getPlugins(BundleContext bundleContext) {
- return ImmutableSet.of(
+ return ImmutableSet.of(
new SearchPlugin(bundleContext)
);
}
+
+ private ImmutableSet getServlets(BundleContext context) {
+ return ImmutableSet.of(
+ new ByPhraseServlet(context),
+ new BundleDownloadServlet(context),
+ new BundleClassesServlet(context),
+ new ClassDecompileServlet(context),
+ new ClassSearchServlet(context),
+ new SourceGenerateServlet(context),
+ new FileDownloadServlet(context),
+ new BundleAssembleServlet(context)
+ );
+ }
}
diff --git a/src/main/java/com/neva/felix/webconsole/plugins/search/SearchHttpTracker.java b/src/main/java/com/neva/felix/webconsole/plugins/search/SearchHttpTracker.java
deleted file mode 100644
index 88937c5..0000000
--- a/src/main/java/com/neva/felix/webconsole/plugins/search/SearchHttpTracker.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package com.neva.felix.webconsole.plugins.search;
-
-import com.neva.felix.webconsole.plugins.search.rest.*;
-import com.google.common.collect.ImmutableSet;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.http.HttpService;
-import org.osgi.service.http.NamespaceException;
-import org.osgi.util.tracker.ServiceTracker;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.servlet.ServletException;
-import java.util.Set;
-
-public class SearchHttpTracker extends ServiceTracker {
-
- private static final Logger LOG = LoggerFactory.getLogger(SearchHttpTracker.class);
-
- private final Set restServlets;
-
- public SearchHttpTracker(BundleContext context) {
- super(context, HttpService.class.getName(), null);
- this.restServlets = createRestServlets();
- }
-
- @Override
- public Object addingService(ServiceReference reference) {
- HttpService httpService = (HttpService) super.addingService(reference);
- if (httpService == null)
- return null;
-
- try {
- for (RestServlet restServlet : restServlets) {
- httpService.registerServlet(restServlet.getAlias(), restServlet, restServlet.createProps(), null);
- }
- } catch (NamespaceException | ServletException e) {
- LOG.error("Cannot register REST servlet for search webconsole plugin.", e);
- }
-
- return httpService;
- }
-
- public void removedService(ServiceReference reference, Object service) {
- HttpService httpService = (HttpService) service;
- for (RestServlet restServlet : restServlets) {
- httpService.unregister(restServlet.getAlias());
- }
-
- super.removedService(reference, service);
- }
-
- private ImmutableSet createRestServlets() {
- return ImmutableSet.of(
- new ByPhraseServlet(context),
- new BundleDownloadServlet(context),
- new BundleClassesServlet(context),
- new ClassDecompileServlet(context),
- new ClassSearchServlet(context),
- new SourceGenerateServlet(context),
- new FileDownloadServlet(context),
- new BundleAssembleServlet(context)
- );
- }
-}
diff --git a/src/main/java/com/neva/felix/webconsole/plugins/search/plugin/AbstractPlugin.java b/src/main/java/com/neva/felix/webconsole/plugins/search/plugin/AbstractPlugin.java
index d844c26..045d883 100644
--- a/src/main/java/com/neva/felix/webconsole/plugins/search/plugin/AbstractPlugin.java
+++ b/src/main/java/com/neva/felix/webconsole/plugins/search/plugin/AbstractPlugin.java
@@ -1,20 +1,19 @@
package com.neva.felix.webconsole.plugins.search.plugin;
import com.google.common.collect.ImmutableMap;
+import jakarta.servlet.Servlet;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.text.StrSubstitutor;
-import org.apache.felix.webconsole.AbstractWebConsolePlugin;
+import org.apache.felix.webconsole.servlet.AbstractServlet;
import org.osgi.framework.BundleContext;
-import javax.servlet.Servlet;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
-import java.net.URL;
import java.util.Dictionary;
import java.util.Hashtable;
-public abstract class AbstractPlugin extends AbstractWebConsolePlugin {
+public abstract class AbstractPlugin extends AbstractServlet {
public static final String CATEGORY = "OSGi";
@@ -25,7 +24,7 @@ public AbstractPlugin(BundleContext bundleContext) {
}
@Override
- protected void renderContent(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ public void renderContent(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
final String common = readTemplateFile("/search/common.html");
final String specific = readTemplateFile("/" + getLabel() + "/plugin.html");
final String content = StrSubstitutor.replace(specific, ImmutableMap.of("common", common));
@@ -33,7 +32,11 @@ protected void renderContent(HttpServletRequest request, HttpServletResponse res
response.getWriter().write(content);
}
- protected Dictionary createProps() {
+ public abstract String getLabel();
+
+ public abstract String getTitle();
+
+ public Dictionary getProps() {
final Dictionary props = new Hashtable<>();
props.put("felix.webconsole.label", getLabel());
@@ -41,18 +44,4 @@ protected Dictionary createProps() {
return props;
}
-
- public void register() {
- bundleContext.registerService(Servlet.class.getName(), this, createProps());
- }
-
- public URL getResource(final String path) {
- String prefix = "/" + getLabel() + "/";
- if (path.startsWith(prefix)) {
- return this.getClass().getResource(path);
- }
-
- return null;
- }
-
}
diff --git a/src/main/java/com/neva/felix/webconsole/plugins/search/rest/BundleAssembleServlet.java b/src/main/java/com/neva/felix/webconsole/plugins/search/rest/BundleAssembleServlet.java
index 88ea45c..b8d6def 100644
--- a/src/main/java/com/neva/felix/webconsole/plugins/search/rest/BundleAssembleServlet.java
+++ b/src/main/java/com/neva/felix/webconsole/plugins/search/rest/BundleAssembleServlet.java
@@ -3,18 +3,16 @@
import static com.neva.felix.webconsole.plugins.search.utils.JsonUtils.MessageType;
import static com.neva.felix.webconsole.plugins.search.utils.JsonUtils.writeMessage;
-import com.google.common.collect.Lists;
import com.neva.felix.webconsole.plugins.search.core.BundleJar;
import com.neva.felix.webconsole.plugins.search.core.OsgiExplorer;
import com.neva.felix.webconsole.plugins.search.core.SearchMonitor;
import com.neva.felix.webconsole.plugins.search.core.bundleassemble.BundleAssembleJob;
-import java.io.File;
import java.io.IOException;
-import java.util.List;
import java.util.Set;
-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.osgi.framework.BundleContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/src/main/java/com/neva/felix/webconsole/plugins/search/rest/BundleClassesServlet.java b/src/main/java/com/neva/felix/webconsole/plugins/search/rest/BundleClassesServlet.java
index fd88328..ccd9902 100644
--- a/src/main/java/com/neva/felix/webconsole/plugins/search/rest/BundleClassesServlet.java
+++ b/src/main/java/com/neva/felix/webconsole/plugins/search/rest/BundleClassesServlet.java
@@ -7,13 +7,13 @@
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.List;
diff --git a/src/main/java/com/neva/felix/webconsole/plugins/search/rest/BundleDownloadServlet.java b/src/main/java/com/neva/felix/webconsole/plugins/search/rest/BundleDownloadServlet.java
index a4e554e..2f68690 100644
--- a/src/main/java/com/neva/felix/webconsole/plugins/search/rest/BundleDownloadServlet.java
+++ b/src/main/java/com/neva/felix/webconsole/plugins/search/rest/BundleDownloadServlet.java
@@ -4,13 +4,13 @@
import com.neva.felix.webconsole.plugins.search.core.SearchPaths;
import com.neva.felix.webconsole.plugins.search.utils.JsonUtils;
import com.neva.felix.webconsole.plugins.search.utils.io.FileDownloader;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
diff --git a/src/main/java/com/neva/felix/webconsole/plugins/search/rest/ByPhraseServlet.java b/src/main/java/com/neva/felix/webconsole/plugins/search/rest/ByPhraseServlet.java
index 17d03d5..4450921 100644
--- a/src/main/java/com/neva/felix/webconsole/plugins/search/rest/ByPhraseServlet.java
+++ b/src/main/java/com/neva/felix/webconsole/plugins/search/rest/ByPhraseServlet.java
@@ -5,13 +5,13 @@
import com.neva.felix.webconsole.plugins.search.core.SearchService;
import com.google.common.collect.Lists;
import com.google.common.primitives.Ints;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.osgi.framework.BundleContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
diff --git a/src/main/java/com/neva/felix/webconsole/plugins/search/rest/ClassDecompileServlet.java b/src/main/java/com/neva/felix/webconsole/plugins/search/rest/ClassDecompileServlet.java
index c448b16..8ebc789 100644
--- a/src/main/java/com/neva/felix/webconsole/plugins/search/rest/ClassDecompileServlet.java
+++ b/src/main/java/com/neva/felix/webconsole/plugins/search/rest/ClassDecompileServlet.java
@@ -5,13 +5,13 @@
import com.neva.felix.webconsole.plugins.search.core.SearchPaths;
import com.neva.felix.webconsole.plugins.search.decompiler.Decompilers;
import com.neva.felix.webconsole.plugins.search.utils.JsonUtils;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
diff --git a/src/main/java/com/neva/felix/webconsole/plugins/search/rest/ClassSearchServlet.java b/src/main/java/com/neva/felix/webconsole/plugins/search/rest/ClassSearchServlet.java
index 7f48728..9575339 100644
--- a/src/main/java/com/neva/felix/webconsole/plugins/search/rest/ClassSearchServlet.java
+++ b/src/main/java/com/neva/felix/webconsole/plugins/search/rest/ClassSearchServlet.java
@@ -4,13 +4,13 @@
import com.neva.felix.webconsole.plugins.search.core.OsgiExplorer;
import com.neva.felix.webconsole.plugins.search.core.SearchMonitor;
import com.neva.felix.webconsole.plugins.search.core.classsearch.ClassSearchJob;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import org.osgi.framework.BundleContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Set;
diff --git a/src/main/java/com/neva/felix/webconsole/plugins/search/rest/FileDownloadServlet.java b/src/main/java/com/neva/felix/webconsole/plugins/search/rest/FileDownloadServlet.java
index 60ad959..51861fc 100644
--- a/src/main/java/com/neva/felix/webconsole/plugins/search/rest/FileDownloadServlet.java
+++ b/src/main/java/com/neva/felix/webconsole/plugins/search/rest/FileDownloadServlet.java
@@ -2,14 +2,14 @@
import com.neva.felix.webconsole.plugins.search.core.SearchPaths;
import com.neva.felix.webconsole.plugins.search.utils.io.FileDownloader;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.osgi.framework.BundleContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
diff --git a/src/main/java/com/neva/felix/webconsole/plugins/search/rest/RestParams.java b/src/main/java/com/neva/felix/webconsole/plugins/search/rest/RestParams.java
index f818185..ca310f2 100644
--- a/src/main/java/com/neva/felix/webconsole/plugins/search/rest/RestParams.java
+++ b/src/main/java/com/neva/felix/webconsole/plugins/search/rest/RestParams.java
@@ -2,11 +2,11 @@
import com.google.common.collect.Lists;
import com.neva.felix.webconsole.plugins.search.decompiler.Decompilers;
+import jakarta.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
-import javax.servlet.http.HttpServletRequest;
import java.util.Collections;
import java.util.List;
diff --git a/src/main/java/com/neva/felix/webconsole/plugins/search/rest/RestServlet.java b/src/main/java/com/neva/felix/webconsole/plugins/search/rest/RestServlet.java
index b0b69b9..555c462 100644
--- a/src/main/java/com/neva/felix/webconsole/plugins/search/rest/RestServlet.java
+++ b/src/main/java/com/neva/felix/webconsole/plugins/search/rest/RestServlet.java
@@ -2,9 +2,9 @@
import com.neva.felix.webconsole.plugins.search.core.SearchPaths;
import com.neva.felix.webconsole.plugins.search.utils.TemplateRenderer;
+import jakarta.servlet.http.HttpServlet;
import org.osgi.framework.BundleContext;
-import javax.servlet.http.HttpServlet;
import java.util.Dictionary;
import java.util.Hashtable;
@@ -21,7 +21,7 @@ public RestServlet(BundleContext bundleContext) {
protected abstract String getAliasName();
- public Dictionary createProps() {
+ public Dictionary getProps() {
Dictionary props = new Hashtable<>();
props.put("alias", getAlias());
diff --git a/src/main/java/com/neva/felix/webconsole/plugins/search/rest/SourceGenerateServlet.java b/src/main/java/com/neva/felix/webconsole/plugins/search/rest/SourceGenerateServlet.java
index 38dfff7..7ebec46 100644
--- a/src/main/java/com/neva/felix/webconsole/plugins/search/rest/SourceGenerateServlet.java
+++ b/src/main/java/com/neva/felix/webconsole/plugins/search/rest/SourceGenerateServlet.java
@@ -4,13 +4,13 @@
import com.neva.felix.webconsole.plugins.search.core.OsgiExplorer;
import com.neva.felix.webconsole.plugins.search.core.SearchMonitor;
import com.neva.felix.webconsole.plugins.search.core.sourcegenerator.SourceGeneratorJob;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import org.osgi.framework.BundleContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Set;
diff --git a/src/main/java/com/neva/felix/webconsole/plugins/search/utils/JsonUtils.java b/src/main/java/com/neva/felix/webconsole/plugins/search/utils/JsonUtils.java
index 049c077..9c71d8d 100644
--- a/src/main/java/com/neva/felix/webconsole/plugins/search/utils/JsonUtils.java
+++ b/src/main/java/com/neva/felix/webconsole/plugins/search/utils/JsonUtils.java
@@ -3,8 +3,8 @@
import com.google.common.collect.ImmutableMap;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
+import jakarta.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Collections;
import java.util.Map;
diff --git a/src/main/java/com/neva/felix/webconsole/plugins/search/utils/io/FileDownloader.java b/src/main/java/com/neva/felix/webconsole/plugins/search/utils/io/FileDownloader.java
index f845b5d..ec6db8f 100644
--- a/src/main/java/com/neva/felix/webconsole/plugins/search/utils/io/FileDownloader.java
+++ b/src/main/java/com/neva/felix/webconsole/plugins/search/utils/io/FileDownloader.java
@@ -1,6 +1,7 @@
package com.neva.felix.webconsole.plugins.search.utils.io;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
+
import java.io.IOException;
import java.io.InputStream;