in meecrowave-core/src/main/java/org/apache/meecrowave/cxf/CxfCdiAutoSetup.java [80:146]
public void onStartup(final Set<Class<?>> c, final ServletContext ctx) {
final Configuration builder = Configuration.class.cast(ctx.getAttribute("meecrowave.configuration"));
final MeecrowaveCXFCdiServlet delegate = new MeecrowaveCXFCdiServlet();
final FilterRegistration.Dynamic jaxrs = ctx.addFilter(NAME, new Filter() {
private final String servletPath = builder.getJaxrsMapping().endsWith("/*") ?
builder.getJaxrsMapping().substring(0, builder.getJaxrsMapping().length() - 2) : builder.getJaxrsMapping();
@Override
public void init(final FilterConfig filterConfig) throws ServletException {
delegate.init(new ServletConfig() {
@Override
public String getServletName() {
return NAME;
}
@Override
public ServletContext getServletContext() {
return filterConfig.getServletContext();
}
@Override
public String getInitParameter(final String name) {
return filterConfig.getInitParameter(name);
}
@Override
public Enumeration<String> getInitParameterNames() {
return filterConfig.getInitParameterNames();
}
});
}
@Override
public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {
if (!HttpServletRequest.class.isInstance(request)) {
chain.doFilter(request, response);
return;
}
final HttpServletRequest http = HttpServletRequest.class.cast(request);
final String path = http.getRequestURI().substring(http.getContextPath().length());
final Optional<String> app = Stream.of(delegate.prefixes).filter(path::startsWith).findAny();
if (app.isPresent()) {
delegate.service(new HttpServletRequestWrapper(http) { // fake servlet pathInfo and path
@Override
public String getPathInfo() {
return path;
}
@Override
public String getServletPath() {
return servletPath;
}
}, response);
} else {
chain.doFilter(request, response);
}
}
@Override
public void destroy() {
delegate.destroy();
}
});
jaxrs.setAsyncSupported(true);
jaxrs.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST, DispatcherType.ASYNC), true, builder.getJaxrsMapping());
ofNullable(builder.getCxfServletParams()).ifPresent(m -> m.forEach(jaxrs::setInitParameter));
}