Search in sources :

Example 1 with CxfRsHttpListener

use of org.apache.openejb.server.cxf.rs.CxfRsHttpListener in project tomee by apache.

the class TomcatRsRegistry method createRsHttpListener.

@Override
public AddressInfo createRsHttpListener(final String appId, final String webContext, final HttpListener listener, final ClassLoader classLoader, final String completePath, final String virtualHost, final String auth, final String realm) {
    String path = webContext;
    if (path == null) {
        throw new NullPointerException("contextRoot is null");
    }
    if (listener == null) {
        throw new NullPointerException("listener is null");
    }
    // find the existing host (we do not auto-create hosts)
    Container host;
    Context context = null;
    if (virtualHost == null) {
        host = hosts.getDefault();
    } else {
        host = hosts.get(virtualHost);
    }
    if (host == null) {
        for (final Host h : hosts) {
            context = findContext(h, webContext);
            if (context != null) {
                host = h;
                if (classLoader != null && classLoader.equals(context.getLoader().getClassLoader())) {
                    break;
                }
            // else try next to find something better
            }
        }
        if (host == null) {
            throw new IllegalArgumentException("Invalid virtual host '" + virtualHost + "'.  Do you have a matching Host entry in the server.xml?");
        }
    } else {
        context = findContext(host, webContext);
    }
    if (context == null) {
        throw new IllegalStateException("Invalid context '" + webContext + "'.  Cannot find context in host " + host.getName());
    }
    final CxfRsHttpListener cxfRsHttpListener = findCxfRsHttpListener(listener);
    final String description = "tomee-jaxrs-" + listener;
    String mapping = completePath;
    if (!completePath.endsWith("/*")) {
        // respect servlet spec (!= from our embedded listeners)
        if (completePath.endsWith("*")) {
            mapping = completePath.substring(0, completePath.length() - 1);
        }
        mapping = mapping + "/*";
    }
    final String urlPattern = removeWebContext(webContext, mapping);
    cxfRsHttpListener.setUrlPattern(urlPattern.substring(0, urlPattern.length() - 1));
    final FilterDef filterDef = new FilterDef();
    filterDef.setAsyncSupported("true");
    filterDef.setDescription(description);
    filterDef.setFilterName(description);
    filterDef.setDisplayName(description);
    filterDef.setFilter(new CXFJAXRSFilter(cxfRsHttpListener, context.findWelcomeFiles()));
    filterDef.setFilterClass(CXFJAXRSFilter.class.getName());
    // just keep base path
    filterDef.addInitParameter("mapping", urlPattern.substring(0, urlPattern.length() - "/*".length()));
    context.addFilterDef(filterDef);
    final FilterMap filterMap = new FilterMap();
    filterMap.addURLPattern(urlPattern);
    for (final DispatcherType type : DispatcherType.values()) {
        filterMap.setDispatcher(type.name());
    }
    filterMap.setFilterName(filterDef.getFilterName());
    context.addFilterMap(filterMap);
    Registrations.addFilterConfig(context, filterDef);
    path = address(connectors, host.getName(), webContext);
    final String key = address(connectors, host.getName(), completePath);
    listeners.put(new Key(appId, key), listener);
    return new AddressInfo(path, key);
}
Also used : Context(org.apache.catalina.Context) CxfRsHttpListener(org.apache.openejb.server.cxf.rs.CxfRsHttpListener) FilterDef(org.apache.tomcat.util.descriptor.web.FilterDef) Host(org.apache.catalina.Host) FilterMap(org.apache.tomcat.util.descriptor.web.FilterMap) Container(org.apache.catalina.Container) DispatcherType(javax.servlet.DispatcherType)

Aggregations

DispatcherType (javax.servlet.DispatcherType)1 Container (org.apache.catalina.Container)1 Context (org.apache.catalina.Context)1 Host (org.apache.catalina.Host)1 CxfRsHttpListener (org.apache.openejb.server.cxf.rs.CxfRsHttpListener)1 FilterDef (org.apache.tomcat.util.descriptor.web.FilterDef)1 FilterMap (org.apache.tomcat.util.descriptor.web.FilterMap)1