You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2013/07/23 14:05:18 UTC
svn commit: r1506005 -
/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/CXFNonSpringServlet.java
Author: sergeyb
Date: Tue Jul 23 12:05:18 2013
New Revision: 1506005
URL: http://svn.apache.org/r1506005
Log:
Using reflection to get FilterRegistration
Modified:
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/CXFNonSpringServlet.java
Modified: cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/CXFNonSpringServlet.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/CXFNonSpringServlet.java?rev=1506005&r1=1506004&r2=1506005&view=diff
==============================================================================
--- cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/CXFNonSpringServlet.java (original)
+++ cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/CXFNonSpringServlet.java Tue Jul 23 12:05:18 2013
@@ -19,9 +19,12 @@
package org.apache.cxf.transport.servlet;
import java.io.IOException;
+import java.lang.reflect.Method;
+import java.util.Collection;
import javax.servlet.FilterChain;
import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
@@ -35,6 +38,7 @@ import org.apache.cxf.BusException;
import org.apache.cxf.BusFactory;
import org.apache.cxf.common.classloader.ClassLoaderUtils;
import org.apache.cxf.common.classloader.ClassLoaderUtils.ClassLoaderHolder;
+import org.apache.cxf.helpers.CastUtils;
import org.apache.cxf.resource.ResourceManager;
import org.apache.cxf.transport.DestinationFactory;
import org.apache.cxf.transport.DestinationFactoryManager;
@@ -196,6 +200,8 @@ public class CXFNonSpringServlet extends
private static class HttpServletRequestFilter extends HttpServletRequestWrapper {
private String filterName;
+ private String servletPath;
+ private String pathInfo;
public HttpServletRequestFilter(HttpServletRequest request, String filterName) {
super(request);
this.filterName = filterName;
@@ -203,25 +209,43 @@ public class CXFNonSpringServlet extends
@Override
public String getServletPath() {
- javax.servlet.FilterRegistration fr = super.getServletContext().getFilterRegistration(filterName);
- if (fr != null && !fr.getUrlPatternMappings().isEmpty()) {
- String mapping = fr.getUrlPatternMappings().iterator().next();
- if (mapping.endsWith("/*")) {
- return mapping.substring(0, mapping.length() - 2);
+ if (servletPath == null) {
+ try {
+ Method m = ServletContext.class.getMethod("getFilterRegistration", new Class[] {String.class});
+ Object registration = m.invoke(super.getServletContext(), new Object[]{filterName});
+ if (registration != null) {
+ m = registration.getClass().getMethod("getUrlPatternMappings", new Class[] {});
+ Collection<String> mappings =
+ CastUtils.cast((Collection<?>)m.invoke(registration, new Object[]{}));
+ if (!mappings.isEmpty()) {
+ String mapping = mappings.iterator().next();
+ if (mapping.endsWith("/*")) {
+ servletPath = mapping.substring(0, mapping.length() - 2);
+ }
+ }
+ }
+ } catch (Throwable ex) {
+ // ignore
+ }
+ if (servletPath == null) {
+ servletPath = "";
}
}
- return "";
+
+ return servletPath;
}
@Override
public String getPathInfo() {
- String pathInfo = super.getPathInfo();
if (pathInfo == null) {
- pathInfo = getRequestURI();
- }
- String prefix = super.getContextPath() + this.getServletPath();
- if (pathInfo.startsWith(prefix)) {
- pathInfo = pathInfo.substring(prefix.length());
+ pathInfo = super.getPathInfo();
+ if (pathInfo == null) {
+ pathInfo = getRequestURI();
+ }
+ String prefix = super.getContextPath() + this.getServletPath();
+ if (pathInfo.startsWith(prefix)) {
+ pathInfo = pathInfo.substring(prefix.length());
+ }
}
return pathInfo;
}