Author: rmannibucau
Date: Thu Sep 18 18:41:30 2014
New Revision: 1626044

URL: http://svn.apache.org/r1626044
Log:
(jaxrs) making hack to register our internal filter easier to maintain

Modified:
    
tomee/tomee/trunk/tomee/tomee-jaxrs/src/main/java/org/apache/tomee/webservices/TomcatRsRegistry.java

Modified: 
tomee/tomee/trunk/tomee/tomee-jaxrs/src/main/java/org/apache/tomee/webservices/TomcatRsRegistry.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-jaxrs/src/main/java/org/apache/tomee/webservices/TomcatRsRegistry.java?rev=1626044&r1=1626043&r2=1626044&view=diff
==============================================================================
--- 
tomee/tomee/trunk/tomee/tomee-jaxrs/src/main/java/org/apache/tomee/webservices/TomcatRsRegistry.java
 (original)
+++ 
tomee/tomee/trunk/tomee/tomee-jaxrs/src/main/java/org/apache/tomee/webservices/TomcatRsRegistry.java
 Thu Sep 18 18:41:30 2014
@@ -23,7 +23,6 @@ import org.apache.catalina.Host;
 import org.apache.catalina.Service;
 import org.apache.catalina.connector.Connector;
 import org.apache.catalina.core.ApplicationFilterConfig;
-import org.apache.catalina.core.StandardContext;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.server.cxf.rs.CxfRsHttpListener;
 import org.apache.openejb.server.httpd.HttpListener;
@@ -31,17 +30,17 @@ import org.apache.openejb.server.httpd.u
 import org.apache.openejb.server.rest.RsRegistry;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
+import org.apache.openejb.util.reflection.Reflections;
 import org.apache.tomcat.util.descriptor.web.FilterDef;
 import org.apache.tomcat.util.descriptor.web.FilterMap;
 import org.apache.tomee.catalina.environment.Hosts;
 import org.apache.tomee.loader.TomcatHelper;
 
-import java.lang.reflect.Field;
+import java.lang.reflect.Constructor;
 import java.net.URI;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
@@ -144,28 +143,12 @@ public class TomcatRsRegistry implements
     private void addFilterConfig(final Context context, final FilterDef 
filterDef) {
         // hack to force filter to get a config otherwise it is ignored in the 
http routing
         try {
-            final Field def = 
StandardContext.class.getDeclaredField("filterDefs");
-            if (!def.isAccessible()) {
-                def.setAccessible(true);
-            }
-            final Field config = 
StandardContext.class.getDeclaredField("filterConfigs");
-            if (!config.isAccessible()) {
-                config.setAccessible(true);
-            }
-            final Object oldDefs = def.get(context);
-            final Map<String, ApplicationFilterConfig> oldConfig = new 
HashMap<>((Map<String, ApplicationFilterConfig>) config.get(context));
-            try {
-                final Map<String, FilterDef> tempDef = new HashMap<>();
-                tempDef.put(filterDef.getFilterName(), filterDef);
-                def.set(context, tempDef);
-
-                StandardContext.class.cast(context).filterStart();
-                // update configs
-                oldConfig.putAll((Map<String, ApplicationFilterConfig>) 
config.get(context));
-            } finally {
-                def.set(context, oldDefs);
-                config.set(context, oldConfig);
+            final Constructor<ApplicationFilterConfig> cons = 
ApplicationFilterConfig.class.getDeclaredConstructor(Context.class, 
FilterDef.class);
+            if (!cons.isAccessible()) {
+                cons.setAccessible(true);
             }
+            final ApplicationFilterConfig config = cons.newInstance(context, 
filterDef);
+            ((Map<String, ApplicationFilterConfig>) Reflections.get(context, 
"filterConfigs")).put(filterDef.getFilterName(), config);
         } catch (final Exception e) {
             throw new IllegalStateException(e);
         }


Reply via email to