You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2021/12/30 13:10:56 UTC
[felix-dev] branch master updated: Remove unused code/classes and adjust tests
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 2f4a002 Remove unused code/classes and adjust tests
2f4a002 is described below
commit 2f4a0025faffd4ddb30eeccecfab75d1373843db
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Thu Dec 30 14:10:45 2021 +0100
Remove unused code/classes and adjust tests
---
.../http/base/internal/handler/FilterHandler.java | 61 ++++++-----
.../internal/handler/HttpServiceFilterHandler.java | 37 -------
.../base/internal/handler/ListenerHandler.java | 74 +++++++------
.../internal/handler/WhiteboardFilterHandler.java | 80 --------------
.../handler/WhiteboardListenerHandler.java | 80 --------------
.../http/base/internal/runtime/FilterInfo.java | 19 ----
.../internal/service/SharedHttpServiceImpl.java | 12 +-
.../internal/whiteboard/WhiteboardManager.java | 6 +-
.../base/internal/handler/FilterHandlerTest.java | 39 ++++---
.../registry/EventListenerRegistryTest.java | 114 ++++++++-----------
.../base/internal/registry/FilterRegistryTest.java | 121 +++++++++++++--------
http/jetty/pom.xml | 2 +-
12 files changed, 227 insertions(+), 418 deletions(-)
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/handler/FilterHandler.java b/http/base/src/main/java/org/apache/felix/http/base/internal/handler/FilterHandler.java
index e7c754c..09de56f 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/handler/FilterHandler.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/handler/FilterHandler.java
@@ -27,14 +27,17 @@ import javax.servlet.ServletResponse;
import org.apache.felix.http.base.internal.context.ExtServletContext;
import org.apache.felix.http.base.internal.logger.SystemLogger;
import org.apache.felix.http.base.internal.runtime.FilterInfo;
+import org.apache.felix.http.base.internal.util.ServiceUtils;
import org.jetbrains.annotations.NotNull;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
import org.osgi.service.http.runtime.dto.DTOConstants;
/**
* The filter handler handles the initialization and destruction of filter
* objects.
*/
-public abstract class FilterHandler implements Comparable<FilterHandler>
+public class FilterHandler implements Comparable<FilterHandler>
{
private final long contextServiceId;
@@ -42,17 +45,21 @@ public abstract class FilterHandler implements Comparable<FilterHandler>
private final ExtServletContext context;
+ private final BundleContext bundleContext;
+
private volatile Filter filter;
protected volatile int useCount;
public FilterHandler(final long contextServiceId,
final ExtServletContext context,
- final FilterInfo filterInfo)
+ final FilterInfo filterInfo,
+ final BundleContext bundleContext)
{
this.contextServiceId = contextServiceId;
this.context = context;
this.filterInfo = filterInfo;
+ this.bundleContext = bundleContext;
}
@Override
@@ -76,11 +83,6 @@ public abstract class FilterHandler implements Comparable<FilterHandler>
return filter;
}
- protected void setFilter(final Filter f)
- {
- this.filter = f;
- }
-
public FilterInfo getFilterInfo()
{
return this.filterInfo;
@@ -112,6 +114,9 @@ public abstract class FilterHandler implements Comparable<FilterHandler>
return -1;
}
+ final ServiceReference<Filter> serviceReference = getFilterInfo().getServiceReference();
+ this.filter = ServiceUtils.safeGetServiceObjects(this.bundleContext, serviceReference);
+
if (this.filter == null)
{
return DTOConstants.FAILURE_REASON_SERVICE_NOT_GETTABLE;
@@ -126,8 +131,10 @@ public abstract class FilterHandler implements Comparable<FilterHandler>
SystemLogger.error(this.getFilterInfo().getServiceReference(),
"Error during calling init() on filter " + this.filter,
e);
+ ServiceUtils.safeUngetServiceObjects(this.bundleContext, serviceReference, this.getFilter());
return DTOConstants.FAILURE_REASON_EXCEPTION_ON_INIT;
}
+
this.useCount++;
return -1;
}
@@ -149,28 +156,30 @@ public abstract class FilterHandler implements Comparable<FilterHandler>
public boolean destroy()
{
- if (this.filter == null)
+ final Filter f = this.getFilter();
+ if ( f != null )
{
- return false;
- }
-
- this.useCount--;
- if ( this.useCount == 0 )
- {
- try
+ this.useCount--;
+ if ( this.useCount == 0 )
{
- filter.destroy();
+ filter = null;
+ try
+ {
+ f.destroy();
+ }
+ catch ( final Exception ignore )
+ {
+ // we ignore this
+ SystemLogger.error(this.getFilterInfo().getServiceReference(),
+ "Error during calling destroy() on filter " + f,
+ ignore);
+ }
+
+ ServiceUtils.safeUngetServiceObjects(this.bundleContext,
+ getFilterInfo().getServiceReference(), f);
+
+ return true;
}
- catch ( final Exception ignore )
- {
- // we ignore this
- SystemLogger.error(this.getFilterInfo().getServiceReference(),
- "Error during calling destroy() on filter " + this.filter,
- ignore);
- }
-
- filter = null;
- return true;
}
return false;
}
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/handler/HttpServiceFilterHandler.java b/http/base/src/main/java/org/apache/felix/http/base/internal/handler/HttpServiceFilterHandler.java
deleted file mode 100644
index 013af7f..0000000
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/handler/HttpServiceFilterHandler.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.felix.http.base.internal.handler;
-
-import javax.servlet.Filter;
-
-import org.apache.felix.http.base.internal.context.ExtServletContext;
-import org.apache.felix.http.base.internal.runtime.FilterInfo;
-import org.apache.felix.http.base.internal.service.HttpServiceFactory;
-
-/**
- * Servlet handler for filters registered through the ext http service.
- */
-public final class HttpServiceFilterHandler extends FilterHandler
-{
- public HttpServiceFilterHandler(final ExtServletContext context,
- final FilterInfo filterInfo,
- final Filter filter)
- {
- super(HttpServiceFactory.HTTP_SERVICE_CONTEXT_SERVICE_ID, context, filterInfo);
- this.setFilter(filter);
- }
-}
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/handler/ListenerHandler.java b/http/base/src/main/java/org/apache/felix/http/base/internal/handler/ListenerHandler.java
index 415ff63..57e3063 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/handler/ListenerHandler.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/handler/ListenerHandler.java
@@ -20,13 +20,16 @@ import java.util.EventListener;
import org.apache.felix.http.base.internal.context.ExtServletContext;
import org.apache.felix.http.base.internal.runtime.ListenerInfo;
+import org.apache.felix.http.base.internal.util.ServiceUtils;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
import org.osgi.service.http.runtime.dto.DTOConstants;
/**
* The listener handler handles the initialization and destruction of listener
* objects.
*/
-public abstract class ListenerHandler implements Comparable<ListenerHandler>
+public class ListenerHandler implements Comparable<ListenerHandler>
{
private final long contextServiceId;
@@ -34,17 +37,21 @@ public abstract class ListenerHandler implements Comparable<ListenerHandler>
private final ExtServletContext context;
- private EventListener listener;
+ private final BundleContext bundleContext;
+
+ private volatile EventListener listener;
protected volatile int useCount;
public ListenerHandler(final long contextServiceId,
final ExtServletContext context,
- final ListenerInfo listenerInfo)
+ final ListenerInfo listenerInfo,
+ final BundleContext bundleContext)
{
this.contextServiceId = contextServiceId;
this.context = context;
this.listenerInfo = listenerInfo;
+ this.bundleContext = bundleContext;
}
@Override
@@ -68,14 +75,35 @@ public abstract class ListenerHandler implements Comparable<ListenerHandler>
return listener;
}
- protected void setListener(final EventListener f)
+ public ListenerInfo getListenerInfo()
{
- this.listener = f;
+ return this.listenerInfo;
}
- public ListenerInfo getListenerInfo()
+ public boolean destroy()
{
- return this.listenerInfo;
+ final EventListener l = this.listener;
+ if ( l != null )
+ {
+ this.useCount--;
+ if ( this.useCount == 0 )
+ {
+ this.listener = null;
+
+ ServiceUtils.safeUngetServiceObjects(this.bundleContext,
+ getListenerInfo().getServiceReference(), l);
+
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean dispose()
+ {
+ // fully destroy the listener
+ this.useCount = 1;
+ return this.destroy();
}
/**
@@ -90,37 +118,21 @@ public abstract class ListenerHandler implements Comparable<ListenerHandler>
return -1;
}
- if (this.listener == null)
- {
- return DTOConstants.FAILURE_REASON_SERVICE_NOT_GETTABLE;
- }
+ final ServiceReference<EventListener> serviceReference = getListenerInfo().getServiceReference();
+ this.listener = ServiceUtils.safeGetServiceObjects(this.bundleContext, serviceReference);
- this.useCount++;
- return -1;
- }
-
- public boolean destroy()
- {
+ final int reason;
if (this.listener == null)
{
- return false;
+ reason = DTOConstants.FAILURE_REASON_SERVICE_NOT_GETTABLE;
}
-
- this.useCount--;
- if ( this.useCount == 0 )
+ else
{
-
- listener = null;
- return true;
+ this.useCount++;
+ reason = -1;
}
- return false;
- }
- public boolean dispose()
- {
- // fully destroy the listener
- this.useCount = 1;
- return this.destroy();
+ return reason;
}
@Override
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/handler/WhiteboardFilterHandler.java b/http/base/src/main/java/org/apache/felix/http/base/internal/handler/WhiteboardFilterHandler.java
deleted file mode 100644
index 8cb7751..0000000
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/handler/WhiteboardFilterHandler.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.felix.http.base.internal.handler;
-
-import javax.servlet.Filter;
-
-import org.apache.felix.http.base.internal.context.ExtServletContext;
-import org.apache.felix.http.base.internal.runtime.FilterInfo;
-import org.apache.felix.http.base.internal.util.ServiceUtils;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-
-/**
- * Filter holder for filters registered through the http whiteboard.
- */
-public final class WhiteboardFilterHandler extends FilterHandler
-{
- private final BundleContext bundleContext;
-
- public WhiteboardFilterHandler(final long contextServiceId,
- final ExtServletContext context,
- final FilterInfo filterInfo,
- final BundleContext bundleContext)
- {
- super(contextServiceId, context, filterInfo);
- this.bundleContext = bundleContext;
- }
-
- @Override
- public int init()
- {
- if ( this.useCount > 0 )
- {
- this.useCount++;
- return -1;
- }
-
- final ServiceReference<Filter> serviceReference = getFilterInfo().getServiceReference();
- this.setFilter(ServiceUtils.safeGetServiceObjects(this.bundleContext, serviceReference));
-
- final int reason = super.init();
- if ( reason != -1 )
- {
- ServiceUtils.safeUngetServiceObjects(this.bundleContext, serviceReference, this.getFilter());
- this.setFilter(null);
- }
- return reason;
- }
-
- @Override
- public boolean destroy()
- {
- final Filter f = this.getFilter();
- if ( f != null )
- {
- if ( super.destroy() )
- {
- ServiceUtils.safeUngetServiceObjects(this.bundleContext,
- getFilterInfo().getServiceReference(), f);
-
- return true;
- }
- }
- return false;
- }
-}
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/handler/WhiteboardListenerHandler.java b/http/base/src/main/java/org/apache/felix/http/base/internal/handler/WhiteboardListenerHandler.java
deleted file mode 100644
index 3a4ce9f..0000000
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/handler/WhiteboardListenerHandler.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.felix.http.base.internal.handler;
-
-import java.util.EventListener;
-
-import org.apache.felix.http.base.internal.context.ExtServletContext;
-import org.apache.felix.http.base.internal.runtime.ListenerInfo;
-import org.apache.felix.http.base.internal.util.ServiceUtils;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-
-/**
- * Listener handler for listeners registered through the http whiteboard.
- */
-public final class WhiteboardListenerHandler extends ListenerHandler
-{
- private final BundleContext bundleContext;
-
- public WhiteboardListenerHandler(final long contextServiceId,
- final ExtServletContext context,
- final ListenerInfo listenerInfo,
- final BundleContext bundleContext)
- {
- super(contextServiceId, context, listenerInfo);
- this.bundleContext = bundleContext;
- }
-
- @Override
- public int init()
- {
- if ( this.useCount > 0 )
- {
- this.useCount++;
- return -1;
- }
-
- final ServiceReference<EventListener> serviceReference = getListenerInfo().getServiceReference();
- this.setListener(ServiceUtils.safeGetServiceObjects(this.bundleContext, serviceReference));
-
- final int reason = super.init();
- if ( reason != -1 )
- {
- ServiceUtils.safeUngetServiceObjects(this.bundleContext, serviceReference, this.getListener());
- this.setListener(null);
- }
- return reason;
- }
-
- @Override
- public boolean destroy()
- {
- final EventListener l = this.getListener();
- if ( l != null )
- {
- if ( super.destroy() )
- {
- ServiceUtils.safeUngetServiceObjects(this.bundleContext,
- getListenerInfo().getServiceReference(), l);
-
- return true;
- }
- }
- return false;
- }
-}
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/FilterInfo.java b/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/FilterInfo.java
index c477bde..d08dbc0 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/FilterInfo.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/FilterInfo.java
@@ -18,7 +18,6 @@
*/
package org.apache.felix.http.base.internal.runtime;
-import java.util.Collections;
import java.util.Map;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
@@ -123,24 +122,6 @@ public final class FilterInfo extends WhiteboardServiceInfo<Filter>
}
}
- /**
- * Constructor for Http Service
- */
- public FilterInfo(final String name,
- final String regex,
- final int serviceRanking,
- final Map<String, String> initParams)
- {
- super(serviceRanking);
- this.name = name;
- this.patterns = null;
- this.servletNames = null;
- this.regexs = new String[] {regex};
- this.initParams = Collections.unmodifiableMap(initParams);
- this.asyncSupported = false;
- this.dispatcher = new DispatcherType[] {DispatcherType.REQUEST};
- }
-
@Override
public boolean isValid()
{
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/service/SharedHttpServiceImpl.java b/http/base/src/main/java/org/apache/felix/http/base/internal/service/SharedHttpServiceImpl.java
index 5ac6dec..7ce664b 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/service/SharedHttpServiceImpl.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/service/SharedHttpServiceImpl.java
@@ -20,16 +20,15 @@ import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
-import org.jetbrains.annotations.NotNull;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import org.apache.felix.http.base.internal.context.ExtServletContext;
-import org.apache.felix.http.base.internal.handler.FilterHandler;
import org.apache.felix.http.base.internal.handler.HttpServiceServletHandler;
import org.apache.felix.http.base.internal.handler.ServletHandler;
import org.apache.felix.http.base.internal.registry.HandlerRegistry;
import org.apache.felix.http.base.internal.runtime.ServletInfo;
+import org.jetbrains.annotations.NotNull;
import org.osgi.service.http.NamespaceException;
public final class SharedHttpServiceImpl
@@ -49,15 +48,6 @@ public final class SharedHttpServiceImpl
}
/**
- * Register a filter
- */
- public boolean registerFilter(@NotNull final FilterHandler handler)
- {
- this.handlerRegistry.getRegistry(handler.getContextServiceId()).registerFilter(handler);
- return true;
- }
-
- /**
* Register a servlet
*/
public void registerServlet(@NotNull final String alias,
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java b/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java
index bfcb293..6832efb 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java
@@ -53,8 +53,6 @@ import org.apache.felix.http.base.internal.handler.HttpSessionWrapper;
import org.apache.felix.http.base.internal.handler.ListenerHandler;
import org.apache.felix.http.base.internal.handler.PreprocessorHandler;
import org.apache.felix.http.base.internal.handler.ServletHandler;
-import org.apache.felix.http.base.internal.handler.WhiteboardFilterHandler;
-import org.apache.felix.http.base.internal.handler.WhiteboardListenerHandler;
import org.apache.felix.http.base.internal.handler.WhiteboardServletHandler;
import org.apache.felix.http.base.internal.logger.SystemLogger;
import org.apache.felix.http.base.internal.registry.EventListenerRegistry;
@@ -788,7 +786,7 @@ public final class WhiteboardManager
}
else
{
- final FilterHandler filterHandler = new WhiteboardFilterHandler(
+ final FilterHandler filterHandler = new FilterHandler(
handler.getContextInfo().getServiceId(),
servletContext,
(FilterInfo)info,
@@ -824,7 +822,7 @@ public final class WhiteboardManager
}
else
{
- final ListenerHandler listenerHandler = new WhiteboardListenerHandler(
+ final ListenerHandler listenerHandler = new ListenerHandler(
handler.getContextInfo().getServiceId(),
servletContext,
(ListenerInfo)info,
diff --git a/http/base/src/test/java/org/apache/felix/http/base/internal/handler/FilterHandlerTest.java b/http/base/src/test/java/org/apache/felix/http/base/internal/handler/FilterHandlerTest.java
index 3eefc72..958dbd0 100644
--- a/http/base/src/test/java/org/apache/felix/http/base/internal/handler/FilterHandlerTest.java
+++ b/http/base/src/test/java/org/apache/felix/http/base/internal/handler/FilterHandlerTest.java
@@ -20,15 +20,12 @@ import static javax.servlet.http.HttpServletResponse.SC_FORBIDDEN;
import static javax.servlet.http.HttpServletResponse.SC_OK;
import static javax.servlet.http.HttpServletResponse.SC_PAYMENT_REQUIRED;
import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.any;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import java.util.Collections;
-import java.util.Map;
-
import javax.servlet.DispatcherType;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
@@ -42,6 +39,11 @@ import org.apache.felix.http.base.internal.runtime.FilterInfo;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceObjects;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
public class FilterHandlerTest
{
@@ -86,6 +88,7 @@ public class FilterHandlerTest
public void testHandleFound() throws Exception
{
FilterHandler h1 = createHandler(0, "/a");
+ h1.init();
HttpServletRequest req = createServletRequest();
HttpServletResponse res = createServletResponse();
FilterChain chain = mock(FilterChain.class);
@@ -102,6 +105,7 @@ public class FilterHandlerTest
public void testHandleFoundContextRoot() throws Exception
{
FilterHandler h1 = createHandler(0, "/");
+ h1.init();
HttpServletRequest req = createServletRequest();
HttpServletResponse res = createServletResponse();
FilterChain chain = mock(FilterChain.class);
@@ -234,19 +238,24 @@ public class FilterHandlerTest
verify(this.filter).init(any(FilterConfig.class));
}
- private FilterHandler createHandler(int ranking, String pattern)
- {
- return createHandler(pattern, ranking, null);
- }
+ private static long id = 1;
- private FilterHandler createHandler(String pattern, int ranking, Map<String, String> initParams)
+ private FilterHandler createHandler(int ranking, String pattern)
{
- if ( initParams == null )
- {
- initParams = Collections.emptyMap();
- }
- final FilterInfo info = new FilterInfo(null, pattern, ranking, initParams);
- return new HttpServiceFilterHandler(this.context, info, this.filter);
+ @SuppressWarnings("unchecked")
+ final ServiceReference<Filter> ref = mock(ServiceReference.class);
+ when(ref.getProperty(Constants.SERVICE_ID)).thenReturn(id++);
+ when(ref.getProperty(Constants.SERVICE_RANKING)).thenReturn(ranking);
+ when(ref.getProperty(HttpWhiteboardConstants.HTTP_WHITEBOARD_FILTER_PATTERN)).thenReturn(pattern);
+ when(ref.getPropertyKeys()).thenReturn(new String[0]);
+ final FilterInfo info = new FilterInfo(ref);
+
+ @SuppressWarnings("unchecked")
+ final ServiceObjects<Filter> so = mock(ServiceObjects.class);
+ final BundleContext ctx = mock(BundleContext.class);
+ when(ctx.getServiceObjects(ref)).thenReturn(so);
+ when(so.getService()).thenReturn(this.filter);
+ return new FilterHandler(-1, this.context, info, ctx);
}
private HttpServletRequest createServletRequest()
diff --git a/http/base/src/test/java/org/apache/felix/http/base/internal/registry/EventListenerRegistryTest.java b/http/base/src/test/java/org/apache/felix/http/base/internal/registry/EventListenerRegistryTest.java
index e01d072..87235c2 100644
--- a/http/base/src/test/java/org/apache/felix/http/base/internal/registry/EventListenerRegistryTest.java
+++ b/http/base/src/test/java/org/apache/felix/http/base/internal/registry/EventListenerRegistryTest.java
@@ -21,18 +21,16 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import javax.servlet.DispatcherType;
-import javax.servlet.Filter;
-import javax.servlet.FilterConfig;
+import java.util.EventListener;
+
+import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;
import org.apache.felix.http.base.internal.context.ExtServletContext;
-import org.apache.felix.http.base.internal.handler.FilterHandler;
-import org.apache.felix.http.base.internal.handler.HttpServiceFilterHandler;
-import org.apache.felix.http.base.internal.runtime.FilterInfo;
+import org.apache.felix.http.base.internal.handler.ListenerHandler;
+import org.apache.felix.http.base.internal.runtime.ListenerInfo;
import org.apache.felix.http.base.internal.runtime.dto.FailedDTOHolder;
import org.junit.Test;
import org.mockito.ArgumentMatchers;
@@ -40,114 +38,92 @@ import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceObjects;
import org.osgi.framework.ServiceReference;
import org.osgi.service.http.runtime.dto.ServletContextDTO;
-import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
public class EventListenerRegistryTest {
- private final FilterRegistry reg = new FilterRegistry();
-
private void assertEmpty(final ServletContextDTO dto, final FailedDTOHolder holder)
{
- assertNull(dto.filterDTOs);
- assertTrue(holder.failedFilterDTOs.isEmpty());
+ assertNull(dto.listenerDTOs);
+ assertTrue(holder.failedListenerDTOs.isEmpty());
}
private void clear(final ServletContextDTO dto, final FailedDTOHolder holder)
{
- dto.filterDTOs = null;
- holder.failedFilterDTOs.clear();
+ dto.listenerDTOs = null;
+ holder.failedListenerDTOs.clear();
}
- @Test public void testSingleFilter() throws InvalidSyntaxException, ServletException
+ @Test public void testSingleListener() throws InvalidSyntaxException, ServletException
{
+ final EventListenerRegistry reg = new EventListenerRegistry();
final FailedDTOHolder holder = new FailedDTOHolder();
final ServletContextDTO dto = new ServletContextDTO();
// check DTO
- reg.getRuntimeInfo(dto, holder.failedFilterDTOs);
+ reg.getRuntimeInfo(dto, holder.failedListenerDTOs);
assertEmpty(dto, holder);
- // register filter
- final FilterHandler h1 = createFilterHandler(1L, 0, "/foo");
- reg.addFilter(h1);
-
- verify(h1.getFilter()).init(ArgumentMatchers.any(FilterConfig.class));
+ // register listener
+ final ListenerHandler h1 = createListenerHandler(1L, 0, ServletContextListener.class);
+ reg.addListeners(h1);
// one entry in DTO
clear(dto, holder);
- reg.getRuntimeInfo(dto, holder.failedFilterDTOs);
- assertTrue(holder.failedFilterDTOs.isEmpty());
- assertNotNull(dto.filterDTOs);
- assertEquals(1, dto.filterDTOs.length);
- assertEquals(1, dto.filterDTOs[0].patterns.length);
- assertEquals("/foo", dto.filterDTOs[0].patterns[0]);
-
- // remove filter
- final Filter f = h1.getFilter();
- reg.removeFilter(h1.getFilterInfo(), true);
- verify(f).destroy();
+ reg.getRuntimeInfo(dto, holder.failedListenerDTOs);
+ assertTrue(holder.failedListenerDTOs.isEmpty());
+ assertNotNull(dto.listenerDTOs);
+ assertEquals(1, dto.listenerDTOs.length);
+ assertEquals(1, dto.listenerDTOs[0].types.length);
+ assertEquals(ServletContextListener.class.getName(), dto.listenerDTOs[0].types[0]);
+
+ // remove listener
+ reg.removeListeners(h1.getListenerInfo());
// empty again
clear(dto, holder);
- reg.getRuntimeInfo(dto, holder.failedFilterDTOs);
+ reg.getRuntimeInfo(dto, holder.failedListenerDTOs);
assertEmpty(dto, holder);
}
- @Test public void testFilterOrdering() throws InvalidSyntaxException
+ private static ListenerInfo createListenerInfo(final long id, final int ranking, final Class<? extends EventListener> type) throws InvalidSyntaxException
{
- final FilterHandler h1 = createFilterHandler(1L, 20, "/foo");
- reg.addFilter(h1);
- final FilterHandler h2 = createFilterHandler(2L, 10, "/foo");
- reg.addFilter(h2);
- final FilterHandler h3 = createFilterHandler(3L, 30, "/foo");
- reg.addFilter(h3);
- final FilterHandler h4 = createFilterHandler(4L, 0, "/other");
- reg.addFilter(h4);
- final FilterHandler h5 = createFilterHandler(5L, 90, "/foo");
- reg.addFilter(h5);
-
- final FilterHandler[] handlers = reg.getFilterHandlers(null, DispatcherType.REQUEST, "/foo");
- assertEquals(4, handlers.length);
- assertEquals(h5.getFilterInfo(), handlers[0].getFilterInfo());
- assertEquals(h3.getFilterInfo(), handlers[1].getFilterInfo());
- assertEquals(h1.getFilterInfo(), handlers[2].getFilterInfo());
- assertEquals(h2.getFilterInfo(), handlers[3].getFilterInfo());
-
- // cleanup
- reg.removeFilter(h1.getFilterInfo(), true);
- reg.removeFilter(h2.getFilterInfo(), true);
- reg.removeFilter(h3.getFilterInfo(), true);
- reg.removeFilter(h4.getFilterInfo(), true);
- reg.removeFilter(h5.getFilterInfo(), true);
- }
+ final String[] typeNames = new String[1];
+ int index = 0;
+ typeNames[index++] = type.getName();
- private static FilterInfo createFilterInfo(final long id, final int ranking, final String... paths) throws InvalidSyntaxException
- {
final BundleContext bCtx = mock(BundleContext.class);
when(bCtx.createFilter(ArgumentMatchers.anyString())).thenReturn(null);
final Bundle bundle = mock(Bundle.class);
when(bundle.getBundleContext()).thenReturn(bCtx);
@SuppressWarnings("unchecked")
- final ServiceReference<Filter> ref = mock(ServiceReference.class);
+ final ServiceReference<EventListener> ref = mock(ServiceReference.class);
when(ref.getBundle()).thenReturn(bundle);
when(ref.getProperty(Constants.SERVICE_ID)).thenReturn(id);
when(ref.getProperty(Constants.SERVICE_RANKING)).thenReturn(ranking);
- when(ref.getProperty(HttpWhiteboardConstants.HTTP_WHITEBOARD_FILTER_PATTERN)).thenReturn(paths);
+ when(ref.getProperty(Constants.OBJECTCLASS)).thenReturn(typeNames);
when(ref.getPropertyKeys()).thenReturn(new String[0]);
- final FilterInfo si = new FilterInfo(ref);
- return si;
+ final EventListener listener = mock(type);
+ @SuppressWarnings("unchecked")
+ final ServiceObjects<EventListener> so = mock(ServiceObjects.class);
+ when(bCtx.getServiceObjects(ref)).thenReturn(so);
+ when(so.getService()).thenReturn(listener);
+
+ final ListenerInfo info = new ListenerInfo(ref);
+
+ return info;
}
- private static FilterHandler createFilterHandler(final long id, final int ranking, final String... paths) throws InvalidSyntaxException
+ private static ListenerHandler createListenerHandler(final long id, final int ranking, final Class<? extends EventListener> type) throws InvalidSyntaxException
{
- final FilterInfo si = createFilterInfo(id, ranking, paths);
+ final ListenerInfo info = createListenerInfo(id, ranking, type);
final ExtServletContext ctx = mock(ExtServletContext.class);
- final Filter filter = mock(Filter.class);
- return new HttpServiceFilterHandler(ctx, si, filter);
+ return new ListenerHandler(1L, ctx, info, info.getServiceReference().getBundle().getBundleContext());
}
+
}
diff --git a/http/base/src/test/java/org/apache/felix/http/base/internal/registry/FilterRegistryTest.java b/http/base/src/test/java/org/apache/felix/http/base/internal/registry/FilterRegistryTest.java
index da93f92..db247fc 100644
--- a/http/base/src/test/java/org/apache/felix/http/base/internal/registry/FilterRegistryTest.java
+++ b/http/base/src/test/java/org/apache/felix/http/base/internal/registry/FilterRegistryTest.java
@@ -21,17 +21,17 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import java.util.EventListener;
-
-import javax.servlet.ServletContextListener;
+import javax.servlet.DispatcherType;
+import javax.servlet.Filter;
+import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import org.apache.felix.http.base.internal.context.ExtServletContext;
-import org.apache.felix.http.base.internal.handler.ListenerHandler;
-import org.apache.felix.http.base.internal.handler.WhiteboardListenerHandler;
-import org.apache.felix.http.base.internal.runtime.ListenerInfo;
+import org.apache.felix.http.base.internal.handler.FilterHandler;
+import org.apache.felix.http.base.internal.runtime.FilterInfo;
import org.apache.felix.http.base.internal.runtime.dto.FailedDTOHolder;
import org.junit.Test;
import org.mockito.ArgumentMatchers;
@@ -42,88 +42,119 @@ import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceObjects;
import org.osgi.framework.ServiceReference;
import org.osgi.service.http.runtime.dto.ServletContextDTO;
+import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
public class FilterRegistryTest {
+ private final FilterRegistry reg = new FilterRegistry();
+
private void assertEmpty(final ServletContextDTO dto, final FailedDTOHolder holder)
{
- assertNull(dto.listenerDTOs);
- assertTrue(holder.failedListenerDTOs.isEmpty());
+ assertNull(dto.filterDTOs);
+ assertTrue(holder.failedFilterDTOs.isEmpty());
}
private void clear(final ServletContextDTO dto, final FailedDTOHolder holder)
{
- dto.listenerDTOs = null;
- holder.failedListenerDTOs.clear();
+ dto.filterDTOs = null;
+ holder.failedFilterDTOs.clear();
}
- @Test public void testSingleListener() throws InvalidSyntaxException, ServletException
+ @Test public void testSingleFilter() throws InvalidSyntaxException, ServletException
{
- final EventListenerRegistry reg = new EventListenerRegistry();
final FailedDTOHolder holder = new FailedDTOHolder();
final ServletContextDTO dto = new ServletContextDTO();
// check DTO
- reg.getRuntimeInfo(dto, holder.failedListenerDTOs);
+ reg.getRuntimeInfo(dto, holder.failedFilterDTOs);
assertEmpty(dto, holder);
- // register listener
- final ListenerHandler h1 = createListenerHandler(1L, 0, ServletContextListener.class);
- reg.addListeners(h1);
+ // register filter
+ final FilterHandler h1 = createFilterHandler(1L, 0, "/foo");
+ reg.addFilter(h1);
+
+ verify(h1.getFilter()).init(ArgumentMatchers.any(FilterConfig.class));
// one entry in DTO
clear(dto, holder);
- reg.getRuntimeInfo(dto, holder.failedListenerDTOs);
- assertTrue(holder.failedListenerDTOs.isEmpty());
- assertNotNull(dto.listenerDTOs);
- assertEquals(1, dto.listenerDTOs.length);
- assertEquals(1, dto.listenerDTOs[0].types.length);
- assertEquals(ServletContextListener.class.getName(), dto.listenerDTOs[0].types[0]);
-
- // remove listener
- reg.removeListeners(h1.getListenerInfo());
+ reg.getRuntimeInfo(dto, holder.failedFilterDTOs);
+ assertTrue(holder.failedFilterDTOs.isEmpty());
+ assertNotNull(dto.filterDTOs);
+ assertEquals(1, dto.filterDTOs.length);
+ assertEquals(1, dto.filterDTOs[0].patterns.length);
+ assertEquals("/foo", dto.filterDTOs[0].patterns[0]);
+
+ // remove filter
+ final Filter f = h1.getFilter();
+ reg.removeFilter(h1.getFilterInfo(), true);
+ verify(f).destroy();
// empty again
clear(dto, holder);
- reg.getRuntimeInfo(dto, holder.failedListenerDTOs);
+ reg.getRuntimeInfo(dto, holder.failedFilterDTOs);
assertEmpty(dto, holder);
}
- private static ListenerInfo createListenerInfo(final long id, final int ranking, final Class<? extends EventListener> type) throws InvalidSyntaxException
+ @Test public void testFilterOrdering() throws InvalidSyntaxException
{
- final String[] typeNames = new String[1];
- int index = 0;
- typeNames[index++] = type.getName();
+ final FilterHandler h1 = createFilterHandler(1L, 20, "/foo");
+ reg.addFilter(h1);
+ final FilterHandler h2 = createFilterHandler(2L, 10, "/foo");
+ reg.addFilter(h2);
+ final FilterHandler h3 = createFilterHandler(3L, 30, "/foo");
+ reg.addFilter(h3);
+ final FilterHandler h4 = createFilterHandler(4L, 0, "/other");
+ reg.addFilter(h4);
+ final FilterHandler h5 = createFilterHandler(5L, 90, "/foo");
+ reg.addFilter(h5);
+
+ final FilterHandler[] handlers = reg.getFilterHandlers(null, DispatcherType.REQUEST, "/foo");
+ assertEquals(4, handlers.length);
+ assertEquals(h5.getFilterInfo(), handlers[0].getFilterInfo());
+ assertEquals(h3.getFilterInfo(), handlers[1].getFilterInfo());
+ assertEquals(h1.getFilterInfo(), handlers[2].getFilterInfo());
+ assertEquals(h2.getFilterInfo(), handlers[3].getFilterInfo());
+
+ // cleanup
+ reg.removeFilter(h1.getFilterInfo(), true);
+ reg.removeFilter(h2.getFilterInfo(), true);
+ reg.removeFilter(h3.getFilterInfo(), true);
+ reg.removeFilter(h4.getFilterInfo(), true);
+ reg.removeFilter(h5.getFilterInfo(), true);
+ }
+ private static FilterInfo createFilterInfo(final long id, final int ranking, final String... paths) throws InvalidSyntaxException
+ {
final BundleContext bCtx = mock(BundleContext.class);
when(bCtx.createFilter(ArgumentMatchers.anyString())).thenReturn(null);
final Bundle bundle = mock(Bundle.class);
when(bundle.getBundleContext()).thenReturn(bCtx);
@SuppressWarnings("unchecked")
- final ServiceReference<EventListener> ref = mock(ServiceReference.class);
+ final ServiceReference<Filter> ref = mock(ServiceReference.class);
when(ref.getBundle()).thenReturn(bundle);
when(ref.getProperty(Constants.SERVICE_ID)).thenReturn(id);
when(ref.getProperty(Constants.SERVICE_RANKING)).thenReturn(ranking);
- when(ref.getProperty(Constants.OBJECTCLASS)).thenReturn(typeNames);
+ when(ref.getProperty(HttpWhiteboardConstants.HTTP_WHITEBOARD_FILTER_PATTERN)).thenReturn(paths);
when(ref.getPropertyKeys()).thenReturn(new String[0]);
+ final FilterInfo si = new FilterInfo(ref);
- final EventListener listener = mock(type);
- @SuppressWarnings("unchecked")
- final ServiceObjects<EventListener> so = mock(ServiceObjects.class);
- when(bCtx.getServiceObjects(ref)).thenReturn(so);
- when(so.getService()).thenReturn(listener);
-
- final ListenerInfo info = new ListenerInfo(ref);
-
- return info;
+ return si;
}
- private static ListenerHandler createListenerHandler(final long id, final int ranking, final Class<? extends EventListener> type) throws InvalidSyntaxException
+ private static FilterHandler createFilterHandler(final long id, final int ranking, final String... paths) throws InvalidSyntaxException
{
- final ListenerInfo info = createListenerInfo(id, ranking, type);
- final ExtServletContext ctx = mock(ExtServletContext.class);
+ final FilterInfo si = createFilterInfo(id, ranking, paths);
+ @SuppressWarnings("unchecked")
+ final ServiceObjects<Filter> so = mock(ServiceObjects.class);
+ final BundleContext ctx = mock(BundleContext.class);
+ when(ctx.getServiceObjects(si.getServiceReference())).thenReturn(so);
+
+ final Filter filter = mock(Filter.class);
+ when(so.getService()).thenReturn(filter);
- return new WhiteboardListenerHandler(1L, ctx, info, info.getServiceReference().getBundle().getBundleContext());
+ final ExtServletContext context = mock(ExtServletContext.class);
+ return new FilterHandler(-1, context, si, ctx);
}
+
}
diff --git a/http/jetty/pom.xml b/http/jetty/pom.xml
index d9e97d5..9587234 100644
--- a/http/jetty/pom.xml
+++ b/http/jetty/pom.xml
@@ -399,7 +399,7 @@
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.http.base</artifactId>
- <version>4.1.6</version>
+ <version>4.1.7-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>