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/05/22 18:58:24 UTC
svn commit: r1485284 - in /cxf/trunk:
rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/
systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/
systests/jaxrs/src/test/resources/jaxrs_non_spring/
systests/jaxrs/src/test/resources/ja...
Author: sergeyb
Date: Wed May 22 16:58:24 2013
New Revision: 1485284
URL: http://svn.apache.org/r1485284
Log:
[CXF-5021] Allowing to customize static media types, using ResourceManager to load the resources
Added:
cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_non_spring/WEB-INF/cxfServletStaticResourcesMap.txt (with props)
cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_non_spring/staticmodel.xml (with props)
Modified:
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/CXFNonSpringServlet.java
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/Messages.properties
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerNonSpringBookTest.java
cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_non_spring/WEB-INF/web.xml
Modified: cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java?rev=1485284&r1=1485283&r2=1485284&view=diff
==============================================================================
--- cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java (original)
+++ cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java Wed May 22 16:58:24 2013
@@ -27,6 +27,9 @@ import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.Properties;
+import java.util.ResourceBundle;
+import java.util.logging.Logger;
import java.util.regex.Pattern;
import javax.servlet.Filter;
@@ -43,15 +46,21 @@ import javax.servlet.http.HttpServletReq
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
+import org.apache.cxf.Bus;
+import org.apache.cxf.common.classloader.ClassLoaderUtils;
+import org.apache.cxf.common.i18n.BundleUtils;
+import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.common.util.StringUtils;
import org.apache.cxf.helpers.IOUtils;
+import org.apache.cxf.resource.ResourceManager;
import org.apache.cxf.transport.http.AbstractHTTPDestination;
public abstract class AbstractHTTPServlet extends HttpServlet implements Filter {
private static final long serialVersionUID = -8357252743467075117L;
-
+ private static final Logger LOG = LogUtils.getL7dLogger(AbstractHTTPServlet.class);
+ private static final ResourceBundle BUNDLE = BundleUtils.getBundle(AbstractHTTPServlet.class);
/**
* List of well-known HTTP 1.1 verbs, with POST and GET being the most used verbs at the top
*/
@@ -60,6 +69,7 @@ public abstract class AbstractHTTPServle
private static final String STATIC_RESOURCES_PARAMETER = "static-resources-list";
private static final String STATIC_WELCOME_FILE_PARAMETER = "static-welcome-file";
+ private static final String STATIC_RESOURCES_MAP_RESOURCE = "/WEB-INF/cxfServletStaticResourcesMap.txt";
private static final String REDIRECTS_PARAMETER = "redirects-list";
private static final String REDIRECT_SERVLET_NAME_PARAMETER = "redirect-servlet-name";
@@ -67,16 +77,16 @@ public abstract class AbstractHTTPServle
private static final String REDIRECT_ATTRIBUTES_PARAMETER = "redirect-attributes";
private static final String REDIRECT_QUERY_CHECK_PARAMETER = "redirect-query-check";
- private static final Map<String, String> STATIC_CONTENT_TYPES;
+ private static final Map<String, String> DEFAULT_STATIC_CONTENT_TYPES;
static {
- STATIC_CONTENT_TYPES = new HashMap<String, String>();
- STATIC_CONTENT_TYPES.put("html", "text/html");
- STATIC_CONTENT_TYPES.put("txt", "text/plain");
- STATIC_CONTENT_TYPES.put("css", "text/css");
- STATIC_CONTENT_TYPES.put("pdf", "application/pdf");
- STATIC_CONTENT_TYPES.put("xsd", "application/xml");
- // TODO : add more types if needed
+ DEFAULT_STATIC_CONTENT_TYPES = new HashMap<String, String>();
+ DEFAULT_STATIC_CONTENT_TYPES.put("html", "text/html");
+ DEFAULT_STATIC_CONTENT_TYPES.put("txt", "text/plain");
+ DEFAULT_STATIC_CONTENT_TYPES.put("css", "text/css");
+ DEFAULT_STATIC_CONTENT_TYPES.put("pdf", "application/pdf");
+ DEFAULT_STATIC_CONTENT_TYPES.put("xsd", "application/xml");
+ DEFAULT_STATIC_CONTENT_TYPES.put("js", "application/javascript");
}
private List<Pattern> staticResourcesList;
@@ -85,6 +95,8 @@ public abstract class AbstractHTTPServle
private String dispatcherServletPath;
private String dispatcherServletName;
private Map<String, String> redirectAttributes;
+ private Map<String, String> staticContentTypes =
+ new HashMap<String, String>(DEFAULT_STATIC_CONTENT_TYPES);
private boolean redirectQueryCheck;
public void init(ServletConfig servletConfig) throws ServletException {
@@ -99,9 +111,40 @@ public abstract class AbstractHTTPServle
dispatcherServletPath = servletConfig.getInitParameter(REDIRECT_SERVLET_PATH_PARAMETER);
redirectAttributes = parseMapSequence(servletConfig.getInitParameter(REDIRECT_ATTRIBUTES_PARAMETER));
-
+ }
+
+ protected void finalizeServletInit(ServletConfig servletConfig) {
+ InputStream is = getResourceAsStream("/WEB-INF" + STATIC_RESOURCES_MAP_RESOURCE);
+ if (is == null) {
+ is = getResourceAsStream(STATIC_RESOURCES_MAP_RESOURCE);
+ }
+ if (is != null) {
+ try {
+ Properties props = new Properties();
+ props.load(is);
+ for (String name : props.stringPropertyNames()) {
+ staticContentTypes.put(name, props.getProperty(name));
+ }
+ } catch (IOException ex) {
+ String message = new org.apache.cxf.common.i18n.Message("STATIC_RESOURCES_MAP_LOAD_FAILURE",
+ BUNDLE).toString();
+ LOG.warning(message);
+ }
+ }
+ }
+
+ protected InputStream getResourceAsStream(String path) {
+ InputStream is = ClassLoaderUtils.getResourceAsStream(path, AbstractHTTPServlet.class);
+ if (is == null && getBus() != null) {
+ ResourceManager rm = getBus().getExtension(ResourceManager.class);
+ if (rm != null) {
+ is = rm.resolveResource(path, InputStream.class);
+ }
+ }
+ return is;
}
+
public final void init(final FilterConfig filterConfig) throws ServletException {
init(new ServletConfig() {
public String getServletName() {
@@ -262,17 +305,19 @@ public abstract class AbstractHTTPServle
return false;
}
+ protected abstract Bus getBus();
+
protected void serveStaticContent(HttpServletRequest request,
HttpServletResponse response,
String pathInfo) throws ServletException {
- InputStream is = super.getServletContext().getResourceAsStream(pathInfo);
+ InputStream is = getResourceAsStream(pathInfo);
if (is == null) {
throw new ServletException("Static resource " + pathInfo + " is not available");
}
try {
int ind = pathInfo.lastIndexOf(".");
if (ind != -1 && ind < pathInfo.length()) {
- String type = STATIC_CONTENT_TYPES.get(pathInfo.substring(ind + 1));
+ String type = getStaticResourceContentType(pathInfo.substring(ind + 1));
if (type != null) {
response.setContentType(type);
}
@@ -288,6 +333,10 @@ public abstract class AbstractHTTPServle
}
+ protected String getStaticResourceContentType(String extension) {
+ return staticContentTypes.get(extension);
+ }
+
protected void redirect(HttpServletRequest request, HttpServletResponse response, String pathInfo)
throws ServletException {
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=1485284&r1=1485283&r2=1485284&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 Wed May 22 16:58:24 2013
@@ -80,6 +80,7 @@ public class CXFNonSpringServlet extends
}
this.controller = createServletController(sc);
+ finalizeServletInit(sc);
}
private static DestinationRegistry getDestinationRegistryFromBus(Bus bus) {
Modified: cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/Messages.properties
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/Messages.properties?rev=1485284&r1=1485283&r2=1485284&view=diff
==============================================================================
--- cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/Messages.properties (original)
+++ cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/Messages.properties Wed May 22 16:58:24 2013
@@ -22,6 +22,7 @@ LOAD_BUS_WITHOUT_APPLICATION_CONTEXT = L
LOAD_BUS_WITH_APPLICATION_CONTEXT = Load the bus with application context
REPLACED_HTTP_DESTIONFACTORY = Replaced the http destination factory with servlet transport factory
BUILD_ENDPOINTS_FROM_CONFIG_LOCATION = Build endpoints from config-location: {0}
+STATIC_RESOURCES_MAP_LOAD_FAILURE = Static resources map resource has been found but can not be loaded
DESTIONFACTORY_ALREADY_REGISTERED = Servlet transport factory already registered
UNEXPECTED_RESPONSE_TYPE_MSG = Unexpected response type {0}
DECOUPLED_RESPONSE_FAILED_MSG = Decouple response failed
Modified: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerNonSpringBookTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerNonSpringBookTest.java?rev=1485284&r1=1485283&r2=1485284&view=diff
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerNonSpringBookTest.java (original)
+++ cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerNonSpringBookTest.java Wed May 22 16:58:24 2013
@@ -61,6 +61,16 @@ public class JAXRSClientServerNonSpringB
}
@Test
+ public void testGetStaticResource() throws Exception {
+ String address = "http://localhost:" + PORT + "/singleton/staticmodel.xml";
+ WebClient wc = WebClient.create(address);
+ String response = wc.get(String.class);
+ assertTrue(response.startsWith("<model"));
+ assertEquals("application/xml+model", wc.getResponse().getMetadata().getFirst("Content-Type"));
+
+ }
+
+ @Test
public void testGetBook123UserModel() throws Exception {
getAndCompareAsStrings("http://localhost:" + PORT + "/usermodel/bookstore/books/123",
"resources/expected_get_book123.txt",
Added: cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_non_spring/WEB-INF/cxfServletStaticResourcesMap.txt
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_non_spring/WEB-INF/cxfServletStaticResourcesMap.txt?rev=1485284&view=auto
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_non_spring/WEB-INF/cxfServletStaticResourcesMap.txt (added)
+++ cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_non_spring/WEB-INF/cxfServletStaticResourcesMap.txt Wed May 22 16:58:24 2013
@@ -0,0 +1 @@
+xml=application/xml+model
\ No newline at end of file
Propchange: cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_non_spring/WEB-INF/cxfServletStaticResourcesMap.txt
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_non_spring/WEB-INF/cxfServletStaticResourcesMap.txt
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_non_spring/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_non_spring/WEB-INF/web.xml?rev=1485284&r1=1485283&r2=1485284&view=diff
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_non_spring/WEB-INF/web.xml (original)
+++ cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_non_spring/WEB-INF/web.xml Wed May 22 16:58:24 2013
@@ -52,7 +52,12 @@
org.apache.cxf.jaxrs.provider.JAXBElementProvider
</param-value>
</init-param>
-
+ <init-param>
+ <param-name>static-resources-list</param-name>
+ <param-value>
+ /staticmodel.xml
+ </param-value>
+ </init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Added: cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_non_spring/staticmodel.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_non_spring/staticmodel.xml?rev=1485284&view=auto
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_non_spring/staticmodel.xml (added)
+++ cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_non_spring/staticmodel.xml Wed May 22 16:58:24 2013
@@ -0,0 +1,18 @@
+<model xmlns="http://cxf.apache.org/jaxrs">
+ <resource name="org.apache.cxf.systest.jaxrs.BookStoreNoAnnotations"
+ path="bookstore" produces="application/xml" consumes="application/xml">
+ <operation name="getBook" verb="GET" path="/books/{id}">
+ <param name="id" type="PATH" encoded="false"/>
+ </operation>
+ <operation name="getBookChapter" path="/books/{id}/chapter">
+ <param name="id" type="PATH"/>
+ </operation>
+ <operation name="getBookWithAuthorization" verb="GET" path="/books/{id}/authorize">
+ <param name="id" type="PATH"/>
+ <param name="authorization" type="HEADER"/>
+ </operation>
+ </resource>
+ <resource name="org.apache.cxf.systest.jaxrs.ChapterNoAnnotations">
+ <operation name="getItself" verb="GET"/>
+ </resource>
+</model>
\ No newline at end of file
Propchange: cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_non_spring/staticmodel.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_non_spring/staticmodel.xml
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange: cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_non_spring/staticmodel.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml
Re: svn commit: r1485284
Posted by Sergey Beryozkin <sb...@gmail.com>.
I did some refactoring to AbstractHTTPServlet to get static resource
extensions configurable at 2 levels (custom resources or overriding) so
that the default extensions map is not modified in the CXF code any
longer, and I had to introduce getBus() abstract method into it.
I could've pushed all of CXFNonSpringServlet bus initialization into
AbstractHttpservlet but thought that the actual task (supporting the
more flexible extensions mapping) and given that CXFServlets loading
static resources themselves is not really part of CXFServlet
functionality, just a little utility (redirection to the default servlet
or other mechanisms can scale better), I thought that it all did not
warrant a big refactoring at this moment of time, comments are welcome
either way
Sergey
On 22/05/13 17:58, sergeyb@apache.org wrote:
> Author: sergeyb
> Date: Wed May 22 16:58:24 2013
> New Revision: 1485284
>
> URL: http://svn.apache.org/r1485284
> Log:
> [CXF-5021] Allowing to customize static media types, using ResourceManager to load the resources
>
> Added:
> cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_non_spring/WEB-INF/cxfServletStaticResourcesMap.txt (with props)
> cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_non_spring/staticmodel.xml (with props)
> Modified:
> cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java
> cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/CXFNonSpringServlet.java
> cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/Messages.properties
> cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerNonSpringBookTest.java
> cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_non_spring/WEB-INF/web.xml
>
> Modified: cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java
> URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java?rev=1485284&r1=1485283&r2=1485284&view=diff
> ==============================================================================
> --- cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java (original)
> +++ cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java Wed May 22 16:58:24 2013
> @@ -27,6 +27,9 @@ import java.util.HashMap;
> import java.util.LinkedList;
> import java.util.List;
> import java.util.Map;
> +import java.util.Properties;
> +import java.util.ResourceBundle;
> +import java.util.logging.Logger;
> import java.util.regex.Pattern;
>
> import javax.servlet.Filter;
> @@ -43,15 +46,21 @@ import javax.servlet.http.HttpServletReq
> import javax.servlet.http.HttpServletRequestWrapper;
> import javax.servlet.http.HttpServletResponse;
>
> +import org.apache.cxf.Bus;
> +import org.apache.cxf.common.classloader.ClassLoaderUtils;
> +import org.apache.cxf.common.i18n.BundleUtils;
> +import org.apache.cxf.common.logging.LogUtils;
> import org.apache.cxf.common.util.StringUtils;
> import org.apache.cxf.helpers.IOUtils;
> +import org.apache.cxf.resource.ResourceManager;
> import org.apache.cxf.transport.http.AbstractHTTPDestination;
>
>
> public abstract class AbstractHTTPServlet extends HttpServlet implements Filter {
>
> private static final long serialVersionUID = -8357252743467075117L;
> -
> + private static final Logger LOG = LogUtils.getL7dLogger(AbstractHTTPServlet.class);
> + private static final ResourceBundle BUNDLE = BundleUtils.getBundle(AbstractHTTPServlet.class);
> /**
> * List of well-known HTTP 1.1 verbs, with POST and GET being the most used verbs at the top
> */
> @@ -60,6 +69,7 @@ public abstract class AbstractHTTPServle
>
> private static final String STATIC_RESOURCES_PARAMETER = "static-resources-list";
> private static final String STATIC_WELCOME_FILE_PARAMETER = "static-welcome-file";
> + private static final String STATIC_RESOURCES_MAP_RESOURCE = "/WEB-INF/cxfServletStaticResourcesMap.txt";
>
> private static final String REDIRECTS_PARAMETER = "redirects-list";
> private static final String REDIRECT_SERVLET_NAME_PARAMETER = "redirect-servlet-name";
> @@ -67,16 +77,16 @@ public abstract class AbstractHTTPServle
> private static final String REDIRECT_ATTRIBUTES_PARAMETER = "redirect-attributes";
> private static final String REDIRECT_QUERY_CHECK_PARAMETER = "redirect-query-check";
>
> - private static final Map<String, String> STATIC_CONTENT_TYPES;
> + private static final Map<String, String> DEFAULT_STATIC_CONTENT_TYPES;
>
> static {
> - STATIC_CONTENT_TYPES = new HashMap<String, String>();
> - STATIC_CONTENT_TYPES.put("html", "text/html");
> - STATIC_CONTENT_TYPES.put("txt", "text/plain");
> - STATIC_CONTENT_TYPES.put("css", "text/css");
> - STATIC_CONTENT_TYPES.put("pdf", "application/pdf");
> - STATIC_CONTENT_TYPES.put("xsd", "application/xml");
> - // TODO : add more types if needed
> + DEFAULT_STATIC_CONTENT_TYPES = new HashMap<String, String>();
> + DEFAULT_STATIC_CONTENT_TYPES.put("html", "text/html");
> + DEFAULT_STATIC_CONTENT_TYPES.put("txt", "text/plain");
> + DEFAULT_STATIC_CONTENT_TYPES.put("css", "text/css");
> + DEFAULT_STATIC_CONTENT_TYPES.put("pdf", "application/pdf");
> + DEFAULT_STATIC_CONTENT_TYPES.put("xsd", "application/xml");
> + DEFAULT_STATIC_CONTENT_TYPES.put("js", "application/javascript");
> }
>
> private List<Pattern> staticResourcesList;
> @@ -85,6 +95,8 @@ public abstract class AbstractHTTPServle
> private String dispatcherServletPath;
> private String dispatcherServletName;
> private Map<String, String> redirectAttributes;
> + private Map<String, String> staticContentTypes =
> + new HashMap<String, String>(DEFAULT_STATIC_CONTENT_TYPES);
> private boolean redirectQueryCheck;
>
> public void init(ServletConfig servletConfig) throws ServletException {
> @@ -99,9 +111,40 @@ public abstract class AbstractHTTPServle
> dispatcherServletPath = servletConfig.getInitParameter(REDIRECT_SERVLET_PATH_PARAMETER);
>
> redirectAttributes = parseMapSequence(servletConfig.getInitParameter(REDIRECT_ATTRIBUTES_PARAMETER));
> -
> + }
> +
> + protected void finalizeServletInit(ServletConfig servletConfig) {
> + InputStream is = getResourceAsStream("/WEB-INF" + STATIC_RESOURCES_MAP_RESOURCE);
> + if (is == null) {
> + is = getResourceAsStream(STATIC_RESOURCES_MAP_RESOURCE);
> + }
> + if (is != null) {
> + try {
> + Properties props = new Properties();
> + props.load(is);
> + for (String name : props.stringPropertyNames()) {
> + staticContentTypes.put(name, props.getProperty(name));
> + }
> + } catch (IOException ex) {
> + String message = new org.apache.cxf.common.i18n.Message("STATIC_RESOURCES_MAP_LOAD_FAILURE",
> + BUNDLE).toString();
> + LOG.warning(message);
> + }
> + }
> + }
> +
> + protected InputStream getResourceAsStream(String path) {
>
> + InputStream is = ClassLoaderUtils.getResourceAsStream(path, AbstractHTTPServlet.class);
> + if (is == null && getBus() != null) {
> + ResourceManager rm = getBus().getExtension(ResourceManager.class);
> + if (rm != null) {
> + is = rm.resolveResource(path, InputStream.class);
> + }
> + }
> + return is;
> }
> +
> public final void init(final FilterConfig filterConfig) throws ServletException {
> init(new ServletConfig() {
> public String getServletName() {
> @@ -262,17 +305,19 @@ public abstract class AbstractHTTPServle
> return false;
> }
>
> + protected abstract Bus getBus();
> +
> protected void serveStaticContent(HttpServletRequest request,
> HttpServletResponse response,
> String pathInfo) throws ServletException {
> - InputStream is = super.getServletContext().getResourceAsStream(pathInfo);
> + InputStream is = getResourceAsStream(pathInfo);
> if (is == null) {
> throw new ServletException("Static resource " + pathInfo + " is not available");
> }
> try {
> int ind = pathInfo.lastIndexOf(".");
> if (ind != -1 && ind < pathInfo.length()) {
> - String type = STATIC_CONTENT_TYPES.get(pathInfo.substring(ind + 1));
> + String type = getStaticResourceContentType(pathInfo.substring(ind + 1));
> if (type != null) {
> response.setContentType(type);
> }
> @@ -288,6 +333,10 @@ public abstract class AbstractHTTPServle