This is an automated email from the ASF dual-hosted git repository. radcortez pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tomee.git
commit 7914391ce8477e666d52ad79bfb949dcb49c3a69 Author: James Meen <james.m...@my-managed.net> AuthorDate: Wed Feb 6 23:55:10 2019 +0000 TOMEE-2408 - When MP is enabled CXF JAX-RS filter is also enabled. The filter was treating ALL endpoint resources as CXF resources. This commit makes the filter only process it's own CXF resources and pass everything else down the chain. --- .../openejb/server/cxf/rs/CxfRsHttpListener.java | 25 ++++++++++++++++++++++ .../apache/tomee/webservices/CXFJAXRSFilter.java | 7 +++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java b/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java index 8c9203c..b77b5b0 100644 --- a/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java +++ b/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java @@ -35,6 +35,7 @@ import org.apache.cxf.jaxrs.model.ClassResourceInfo; import org.apache.cxf.jaxrs.model.MethodDispatcher; import org.apache.cxf.jaxrs.model.OperationResourceInfo; import org.apache.cxf.jaxrs.model.ProviderInfo; +import org.apache.cxf.jaxrs.model.URITemplate; import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.jaxrs.provider.ServerProviderFactory; import org.apache.cxf.jaxrs.utils.JAXRSUtils; @@ -106,6 +107,8 @@ import javax.ws.rs.RuntimeType; import javax.ws.rs.core.Application; import javax.ws.rs.core.Configuration; import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.MultivaluedMap; +import javax.ws.rs.core.MultivaluedHashMap; import javax.ws.rs.core.Response; import javax.ws.rs.ext.ExceptionMapper; import javax.ws.rs.ext.MessageBodyReader; @@ -327,6 +330,28 @@ public class CxfRsHttpListener implements RsHttpListener { } return true; } + + public boolean isCXFResource(final HttpServletRequest request) { + final JAXRSServiceImpl service; + try { + service = (JAXRSServiceImpl)server.getEndpoint().getService(); + } finally { } + if( service == null ) { + return false; + } + final List<ClassResourceInfo> resources = service.getClassResourceInfos(); + for (final ClassResourceInfo info : resources) { + if (info.getResourceClass() == null || info.getURITemplate() == null) { // possible? + continue; + } + + final MultivaluedMap<String, String> parameters = new MultivaluedHashMap<>(); + if (info.getURITemplate().match(request.getServletPath(), parameters)) { + return true; + } + } + return false; + } @Override @Deprecated // we could drop it now I think diff --git a/tomee/tomee-jaxrs/src/main/java/org/apache/tomee/webservices/CXFJAXRSFilter.java b/tomee/tomee-jaxrs/src/main/java/org/apache/tomee/webservices/CXFJAXRSFilter.java index 193ab47..7909459 100644 --- a/tomee/tomee-jaxrs/src/main/java/org/apache/tomee/webservices/CXFJAXRSFilter.java +++ b/tomee/tomee-jaxrs/src/main/java/org/apache/tomee/webservices/CXFJAXRSFilter.java @@ -78,6 +78,11 @@ public class CXFJAXRSFilter implements Filter { final HttpServletRequest httpServletRequest = HttpServletRequest.class.cast(request); final HttpServletResponse httpServletResponse = HttpServletResponse.class.cast(response); + if (!this.delegate.isCXFResource(httpServletRequest)) { + chain.doFilter(request, response); + return; + } + if (CxfRsHttpListener.TRY_STATIC_RESOURCES) { // else 100% JAXRS if (servletMappingIsUnderRestPath(httpServletRequest)) { chain.doFilter(request, response); @@ -121,7 +126,7 @@ public class CXFJAXRSFilter implements Filter { accept = false; if (!"org.apache.catalina.servlets.DefaultServlet".equals(wrapper.getServletClass())) { for (final String mapping : wrapper.findMappings()) { - if (!mapping.isEmpty() && !"/*".equals(mapping) && !"/".equals(mapping) && !mapping.equals("*") + if (!mapping.isEmpty() && !"/*".equals(mapping) && !"/".equals(mapping) && !mapping.startsWith("*") && mapping.startsWith(this.mapping)) { accept = true; break;