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 190e7ebfee FELIX-6626 : Support jakarta servlet registration
190e7ebfee is described below
commit 190e7ebfee0256fc535d789451a200f4faf0db29
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Mon Aug 21 12:41:07 2023 +0200
FELIX-6626 : Support jakarta servlet registration
---
webconsole/pom.xml | 5 +++-
.../felix/webconsole/AbstractWebConsolePlugin.java | 21 +++++----------
.../webconsole/internal/core/ServicesServlet.java | 31 +++++++++++-----------
.../internal/filter/FilteringResponseWrapper.java | 31 +++++++---------------
.../internal/misc/SystemPropertiesPrinter.java | 4 +--
.../internal/servlet/JakartaServletAdapter.java | 24 -----------------
.../webconsole/internal/servlet/OsgiManager.java | 10 ++++++-
7 files changed, 48 insertions(+), 78 deletions(-)
diff --git a/webconsole/pom.xml b/webconsole/pom.xml
index 3a3258d334..7b3e7ed916 100644
--- a/webconsole/pom.xml
+++ b/webconsole/pom.xml
@@ -42,6 +42,7 @@
org.apache.felix.webconsole;provide:=true,
org.apache.felix.webconsole.bundleinfo;provide:=true,
org.apache.felix.webconsole.i18n;provide:=true,
+ org.apache.felix.webconsole.servlet,
org.apache.felix.webconsole.spi
</webconsole.exports>
</properties>
@@ -118,6 +119,7 @@
javax.servlet.*;version="[3,5)",
!javax.portlet,
!jakarta.servlet,
+ !jakarta.servlet.http,
!org.apache.felix.http.javaxwrappers,
!org.apache.felix.bundlerepository,
!org.osgi.service.obr,
@@ -141,7 +143,8 @@
org.osgi.service.permissionadmin;version="[1.2,2)",
org.osgi.service.prefs;version="[1.1,2)",
org.osgi.service.wireadmin;version="[1.0,2)",
- jakarta.servlet;version="[1,2)",
+ jakarta.servlet;version="[5,6)",
+ jakarta.servlet.http;version="[5,6)",
org.apache.felix.http.javaxwrappers;version="[4,6)"
</DynamicImport-Package>
<Embed-Dependency>
diff --git
a/webconsole/src/main/java/org/apache/felix/webconsole/AbstractWebConsolePlugin.java
b/webconsole/src/main/java/org/apache/felix/webconsole/AbstractWebConsolePlugin.java
index 374d6f305f..4592249c36 100644
---
a/webconsole/src/main/java/org/apache/felix/webconsole/AbstractWebConsolePlugin.java
+++
b/webconsole/src/main/java/org/apache/felix/webconsole/AbstractWebConsolePlugin.java
@@ -193,14 +193,11 @@ public abstract class AbstractWebConsolePlugin extends
HttpServlet {
* @see
javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest,
* javax.servlet.http.HttpServletResponse)
*/
- protected void doGet( HttpServletRequest request, HttpServletResponse
response ) throws ServletException,
- IOException
- {
- if ( !spoolResource( request, response ) )
- {
+ protected void doGet( HttpServletRequest request, HttpServletResponse
response )
+ throws ServletException, IOException {
+ if ( !spoolResource( request, response ) ) {
// detect if this is an html request
- if ( isHtmlRequest(request) )
- {
+ if ( isHtmlRequest(request) ) {
// start the html response, write the header, open body and
main div
PrintWriter pw = startResponse( request, response );
@@ -214,9 +211,7 @@ public abstract class AbstractWebConsolePlugin extends
HttpServlet {
// close the main div, body, and html
endResponse( pw );
- }
- else
- {
+ } else {
renderContent( request, response );
}
}
@@ -232,8 +227,7 @@ public abstract class AbstractWebConsolePlugin extends
HttpServlet {
* @param request the original request passed from the HTTP server
* @return <code>true</code> if the page should have headers and footers
rendered
*/
- protected boolean isHtmlRequest( final HttpServletRequest request )
- {
+ protected boolean isHtmlRequest( final HttpServletRequest request ) {
return true;
}
@@ -649,8 +643,7 @@ public abstract class AbstractWebConsolePlugin extends
HttpServlet {
// support localization of the plugin title
String title = getTitle();
- if ( title.startsWith( "%" ) )
- {
+ if ( title.startsWith( "%" ) ) {
title = "${" + title.substring( 1 ) + "}";
}
diff --git
a/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/ServicesServlet.java
b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/ServicesServlet.java
index 4aeea6b73f..4f872e30d4 100644
---
a/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/ServicesServlet.java
+++
b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/ServicesServlet.java
@@ -33,6 +33,7 @@ import org.apache.felix.utils.json.JSONWriter;
import org.apache.felix.webconsole.SimpleWebConsolePlugin;
import org.apache.felix.webconsole.WebConsoleConstants;
import org.apache.felix.webconsole.WebConsoleUtil;
+import org.apache.felix.webconsole.bundleinfo.BundleInfoProvider;
import org.apache.felix.webconsole.internal.OsgiManagerPlugin;
import org.apache.felix.webconsole.internal.Util;
import org.apache.felix.webconsole.servlet.RequestVariableResolver;
@@ -123,7 +124,7 @@ public class ServicesServlet extends SimpleWebConsolePlugin
implements OsgiManag
TEMPLATE = readTemplateFile( "/templates/services.html" );
//$NON-NLS-1$
}
- private ServiceRegistration bipReg;
+ private ServiceRegistration<BundleInfoProvider> bipReg;
public void activate(BundleContext bundleContext)
{
@@ -141,7 +142,7 @@ public class ServicesServlet extends SimpleWebConsolePlugin
implements OsgiManag
}
- final ServiceReference getServiceById( String pathInfo )
+ final ServiceReference<?> getServiceById( String pathInfo )
{
// only use last part of the pathInfo
pathInfo = pathInfo.substring( pathInfo.lastIndexOf( '/' ) + 1 );
@@ -152,7 +153,7 @@ public class ServicesServlet extends SimpleWebConsolePlugin
implements OsgiManag
String filterStr = filter.toString();
try
{
- ServiceReference[] refs =
BundleContextUtil.getWorkingBundleContext(this.getBundleContext()).getAllServiceReferences(
null, filterStr );
+ ServiceReference<?>[] refs =
BundleContextUtil.getWorkingBundleContext(this.getBundleContext()).getAllServiceReferences(
null, filterStr );
if ( refs == null || refs.length != 1 )
{
return null;
@@ -168,7 +169,7 @@ public class ServicesServlet extends SimpleWebConsolePlugin
implements OsgiManag
}
- private final ServiceReference[] getServices(String filter)
+ private final ServiceReference<?>[] getServices(String filter)
{
// empty filter string will return nothing, must set it to null to
return all services
if (filter != null && filter.trim().length() == 0) {
@@ -176,7 +177,7 @@ public class ServicesServlet extends SimpleWebConsolePlugin
implements OsgiManag
}
try
{
- final ServiceReference[] refs =
BundleContextUtil.getWorkingBundleContext(this.getBundleContext()).getAllServiceReferences(
null, filter );
+ final ServiceReference<?>[] refs =
BundleContextUtil.getWorkingBundleContext(this.getBundleContext()).getAllServiceReferences(
null, filter );
if ( refs != null )
{
return refs;
@@ -192,7 +193,7 @@ public class ServicesServlet extends SimpleWebConsolePlugin
implements OsgiManag
}
- static final String getStatusLine( final ServiceReference[] services )
+ static final String getStatusLine( final ServiceReference<?>[] services )
{
final int count = services.length;
final StringBuilder buffer = new StringBuilder();
@@ -205,14 +206,14 @@ public class ServicesServlet extends
SimpleWebConsolePlugin implements OsgiManag
}
- static final String propertyAsString( ServiceReference ref, String name )
+ static final String propertyAsString( ServiceReference<?> ref, String name
)
{
final Object value = ref.getProperty( name );
return WebConsoleUtil.toString( value );
}
- private void renderJSON( final HttpServletResponse response, final
ServiceReference service, final Locale locale )
+ private void renderJSON( final HttpServletResponse response, final
ServiceReference<?> service, final Locale locale )
throws IOException
{
response.setContentType( "application/json" );
@@ -233,7 +234,7 @@ public class ServicesServlet extends SimpleWebConsolePlugin
implements OsgiManag
}
}
- private void serviceDetails( JSONWriter jw, ServiceReference service )
throws IOException
+ private void serviceDetails( JSONWriter jw, ServiceReference<?> service )
throws IOException
{
String[] keys = service.getPropertyKeys();
@@ -267,7 +268,7 @@ public class ServicesServlet extends SimpleWebConsolePlugin
implements OsgiManag
}
- private void usingBundles( JSONWriter jw, ServiceReference service, Locale
locale ) throws IOException
+ private void usingBundles( JSONWriter jw, ServiceReference<?> service,
Locale locale ) throws IOException
{
jw.key( "usingBundles" );
jw.array();
@@ -288,7 +289,7 @@ public class ServicesServlet extends SimpleWebConsolePlugin
implements OsgiManag
}
- private void serviceInfo( JSONWriter jw, ServiceReference service, boolean
details, final Locale locale )
+ private void serviceInfo( JSONWriter jw, ServiceReference<?> service,
boolean details, final Locale locale )
throws IOException
{
jw.object();
@@ -334,19 +335,19 @@ public class ServicesServlet extends
SimpleWebConsolePlugin implements OsgiManag
}
- private void writeJSON(final Writer pw, final ServiceReference service,
final Locale locale, final String filter) throws IOException
+ private void writeJSON(final Writer pw, final ServiceReference<?> service,
final Locale locale, final String filter) throws IOException
{
writeJSON( pw, service, false, locale, filter );
}
- private void writeJSON( final Writer pw, final ServiceReference service,
final boolean fullDetails, final Locale locale, final String filter )
+ private void writeJSON( final Writer pw, final ServiceReference<?>
service, final boolean fullDetails, final Locale locale, final String filter )
throws IOException
{
- final ServiceReference[] allServices = this.getServices(filter);
+ final ServiceReference<?>[] allServices = this.getServices(filter);
final String statusLine = getStatusLine( allServices );
- final ServiceReference[] services = ( service != null ) ? new
ServiceReference[]
+ final ServiceReference<?>[] services = ( service != null ) ? new
ServiceReference[]
{ service } : allServices;
final JSONWriter jw = new JSONWriter( pw );
diff --git
a/webconsole/src/main/java/org/apache/felix/webconsole/internal/filter/FilteringResponseWrapper.java
b/webconsole/src/main/java/org/apache/felix/webconsole/internal/filter/FilteringResponseWrapper.java
index 6b6d41b279..6d27cc099c 100644
---
a/webconsole/src/main/java/org/apache/felix/webconsole/internal/filter/FilteringResponseWrapper.java
+++
b/webconsole/src/main/java/org/apache/felix/webconsole/internal/filter/FilteringResponseWrapper.java
@@ -40,8 +40,7 @@ import
org.apache.felix.webconsole.servlet.RequestVariableResolver;
* exists in the resource bundle, the text is written unmodifed (except the
* wrapping <code>${}</code> characters are removed.
*/
-public class FilteringResponseWrapper extends HttpServletResponseWrapper
-{
+public class FilteringResponseWrapper extends HttpServletResponseWrapper {
// the resource bundle providing translations for the output
private final ResourceBundle locale;
@@ -62,15 +61,14 @@ public class FilteringResponseWrapper extends
HttpServletResponseWrapper
* @param locale a resource bundle, that will be used for translation of
the strings
* @param request the original request - used to obtain the variable
resolver
*/
- public FilteringResponseWrapper( final HttpServletResponse response, final
ResourceBundle locale,
- final ServletRequest request )
- {
+ public FilteringResponseWrapper( final HttpServletResponse response,
+ final ResourceBundle locale,
+ final ServletRequest request ) {
super( response );
this.locale = locale;
this.request = request;
}
-
/**
* Returns a <code>PrintWriter</code> for the response. If
<code>text/html</code>
* is being generated a filtering writer is returned which translates
@@ -79,19 +77,14 @@ public class FilteringResponseWrapper extends
HttpServletResponseWrapper
*
* @see javax.servlet.ServletResponseWrapper#getWriter()
*/
- public PrintWriter getWriter() throws IOException
- {
- if ( writer == null )
- {
+ public PrintWriter getWriter() throws IOException {
+ if ( writer == null ) {
final PrintWriter base = super.getWriter();
- if ( doWrap() )
- {
+ if ( doWrap() ) {
final RequestVariableResolver vars =
WebConsoleUtil.getRequestVariableResolver(request);
final ResourceFilteringWriter filter = new
ResourceFilteringWriter( base, locale, vars );
writer = new PrintWriter( filter );
- }
- else
- {
+ } else {
writer = base;
}
}
@@ -99,11 +92,7 @@ public class FilteringResponseWrapper extends
HttpServletResponseWrapper
return writer;
}
-
- private final boolean doWrap()
- {
- boolean doWrap = getContentType() != null && getContentType().indexOf(
"text/html" ) >= 0;
- return doWrap;
+ private final boolean doWrap() {
+ return getContentType() != null && getContentType().indexOf(
"text/html" ) >= 0;
}
-
}
diff --git
a/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/SystemPropertiesPrinter.java
b/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/SystemPropertiesPrinter.java
index 43183f7aba..acebddea91 100644
---
a/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/SystemPropertiesPrinter.java
+++
b/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/SystemPropertiesPrinter.java
@@ -32,6 +32,7 @@ public class SystemPropertiesPrinter extends
AbstractConfigurationPrinter {
private static final String TITLE = "System Properties";
+ @SuppressWarnings("unused")
private static final String LABEL = "_systemproperties";
@@ -41,8 +42,7 @@ public class SystemPropertiesPrinter extends
AbstractConfigurationPrinter {
}
- public void printConfiguration( PrintWriter printWriter )
- {
+ public void printConfiguration( PrintWriter printWriter ) {
Properties props = System.getProperties();
SortedSet keys = new TreeSet( props.keySet() );
for ( Iterator ki = keys.iterator(); ki.hasNext(); )
diff --git
a/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/JakartaServletAdapter.java
b/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/JakartaServletAdapter.java
index 458d5d0498..a4c1d1d86d 100644
---
a/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/JakartaServletAdapter.java
+++
b/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/JakartaServletAdapter.java
@@ -148,30 +148,6 @@ public class JakartaServletAdapter extends
AbstractWebConsolePlugin {
}
}
- /**
- * Detects whether this request is intended to have the headers and
- * footers of this plugin be rendered or not. The decision is taken based
- * on whether and what extension the request URI has: If the request URI
- * has no extension or the the extension is <code>.html</code>, the request
- * is assumed to be rendered with header and footer. Otherwise the
- * headers and footers are omitted and the
- * {@link #renderContent(HttpServletRequest, HttpServletResponse)}
- * method is called without any decorations and without setting any
- * response headers.
- *
- * @see
org.apache.felix.webconsole.AbstractWebConsolePlugin#isHtmlRequest(javax.servlet.http.HttpServletRequest)
- */
- protected boolean isHtmlRequest( final HttpServletRequest request ) {
- final String requestUri = request.getRequestURI();
- if ( requestUri.endsWith( ".html" ) ) {
- return true;
- }
- // check if there is an extension
- final int lastSlash = requestUri.lastIndexOf('/');
- final int lastDot = requestUri.indexOf('.', lastSlash + 1);
- return lastDot < 0;
- }
-
private static final class CheckHttpServletResponse extends
HttpServletResponseWrapper {
private boolean done = false;
diff --git
a/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java
b/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java
index 3945fc4762..e1b2b549c7 100644
---
a/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java
+++
b/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java
@@ -65,6 +65,7 @@ import
org.apache.felix.webconsole.internal.core.BundlesServlet;
import org.apache.felix.webconsole.internal.filter.FilteringResponseWrapper;
import org.apache.felix.webconsole.internal.i18n.ResourceBundleManager;
import org.apache.felix.webconsole.internal.servlet.Plugin.InternalPlugin;
+import org.apache.felix.webconsole.servlet.RequestVariableResolver;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
@@ -630,11 +631,18 @@ public class OsgiManager extends GenericServlet {
response = wrapResponse(request, response, plugin);
// make sure to set the variable resolver
- WebConsoleUtil.getVariableResolver(request);
+ initRequestVariableResolver(request);
plugin.service(request, response);
}
+ private void initRequestVariableResolver(final HttpServletRequest request)
{
+ final RequestVariableResolver resolver = new RequestVariableResolver();
+ request.setAttribute(RequestVariableResolver.REQUEST_ATTRIBUTE,
resolver);
+ resolver.put( "appRoot", (String) request.getAttribute(
WebConsoleConstants.ATTR_APP_ROOT ) );
+ resolver.put( "pluginRoot", (String) request.getAttribute(
WebConsoleConstants.ATTR_PLUGIN_ROOT ) );
+ }
+
private final void logout(HttpServletRequest request, HttpServletResponse
response)
throws IOException {
final Object securityProvider = securityProviderTracker.getService();