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);
}
Aggregations