Details
Description
It seems like the org.apache.wink.common.internal.utils.FileLoader is trying to locate the META-INF/wink-default.properties file using an OSGi class loader.
This is the exception that is being produced:
31 [HttpServer : 0] ERROR org.apache.wink.common.internal.utils.FileLoader - No bundle ID found: bundleresource:////300/META-INF/wink-default.properties
java.io.IOException: No bundle ID found: bundleresource:////300/META-INF/wink-default.properties
at org.eclipse.osgi.framework.internal.core.BundleResourceHandler.openConnection(BundleResourceHandler.java:137)
at java.net.URL.openConnection(URL.java:945)
at java.net.URL.openStream(URL.java:1009)
at org.apache.wink.common.internal.utils.FileLoader.loadFileAsStream(FileLoader.java:97)
at org.apache.wink.server.internal.utils.ServletFileLoader.loadFileAsStream(ServletFileLoader.java:50)
at org.apache.wink.server.internal.servlet.RestServlet.loadProperties(RestServlet.java:166)
at org.apache.wink.server.internal.servlet.RestServlet.getProperties(RestServlet.java:125)
at org.apache.wink.server.internal.servlet.RestServlet.getDeploymentConfiguration(RestServlet.java:119)
at org.apache.wink.server.internal.servlet.RestServlet.createRequestProcessor(RestServlet.java:108)
at org.apache.wink.server.internal.servlet.RestServlet.init(RestServlet.java:85)
at com.ibm.di.tp.server.servlet.EntryPointServlet.init(EntryPointServlet.java:110)
at javax.servlet.GenericServlet.init(GenericServlet.java:211)
at com.ibm.di.tp.server.servlet.EntryPointServlet.init(EntryPointServlet.java:99)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.init(ServletWrapper.java:185)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:341)
at com.ibm.pvc.internal.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:86)
at com.ibm.pvc.internal.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:102)
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3124)
at com.ibm.pvc.internal.webcontainer.webapp.BundleWebApp.handleRequest(BundleWebApp.java:451)
at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:235)
at com.ibm.pvc.internal.webcontainer.VirtualHost.handleRequest(VirtualHost.java:96)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:811)
at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:41)
at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:464)
at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:355)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1498)
46 [HttpServer : 0] ERROR org.apache.wink.server.internal.servlet.RestServlet - META-INF/wink-default.properties
java.io.FileNotFoundException: META-INF/wink-default.properties
at org.apache.wink.common.internal.utils.FileLoader.loadFileAsStream(FileLoader.java:100)
at org.apache.wink.server.internal.utils.ServletFileLoader.loadFileAsStream(ServletFileLoader.java:50)
at org.apache.wink.server.internal.servlet.RestServlet.loadProperties(RestServlet.java:166)
at org.apache.wink.server.internal.servlet.RestServlet.getProperties(RestServlet.java:125)
at org.apache.wink.server.internal.servlet.RestServlet.getDeploymentConfiguration(RestServlet.java:119)
at org.apache.wink.server.internal.servlet.RestServlet.createRequestProcessor(RestServlet.java:108)
at org.apache.wink.server.internal.servlet.RestServlet.init(RestServlet.java:85)
at com.ibm.di.tp.server.servlet.EntryPointServlet.init(EntryPointServlet.java:110)
at javax.servlet.GenericServlet.init(GenericServlet.java:211)
at com.ibm.di.tp.server.servlet.EntryPointServlet.init(EntryPointServlet.java:99)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.init(ServletWrapper.java:185)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:341)
at com.ibm.pvc.internal.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:86)
at com.ibm.pvc.internal.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:102)
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3124)
at com.ibm.pvc.internal.webcontainer.webapp.BundleWebApp.handleRequest(BundleWebApp.java:451)
at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:235)
at com.ibm.pvc.internal.webcontainer.VirtualHost.handleRequest(VirtualHost.java:96)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:811)
at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:41)
at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:464)
at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:355)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1498)
Exception occured in com.ibm.ws.webcontainer.servlet.ServletInstance.service
javax.servlet.UnavailableException: META-INF/wink-default.properties
at org.apache.wink.server.internal.servlet.RestServlet.init(RestServlet.java:95)
at com.ibm.di.tp.server.servlet.EntryPointServlet.init(EntryPointServlet.java:110)
at javax.servlet.GenericServlet.init(GenericServlet.java:211)
at com.ibm.di.tp.server.servlet.EntryPointServlet.init(EntryPointServlet.java:99)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.init(ServletWrapper.java:185)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:341)
at com.ibm.pvc.internal.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:86)
at com.ibm.pvc.internal.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:102)
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3124)
at com.ibm.pvc.internal.webcontainer.webapp.BundleWebApp.handleRequest(BundleWebApp.java:451)
at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:235)
at com.ibm.pvc.internal.webcontainer.VirtualHost.handleRequest(VirtualHost.java:96)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:811)
at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:41)
at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:464)
at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:355)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1498)
Exception occured in com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest()
javax.servlet.UnavailableException: META-INF/wink-default.properties
at org.apache.wink.server.internal.servlet.RestServlet.init(RestServlet.java:95)
at com.ibm.di.tp.server.servlet.EntryPointServlet.init(EntryPointServlet.java:110)
at javax.servlet.GenericServlet.init(GenericServlet.java:211)
at com.ibm.di.tp.server.servlet.EntryPointServlet.init(EntryPointServlet.java:99)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.init(ServletWrapper.java:185)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:341)
at com.ibm.pvc.internal.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:86)
at com.ibm.pvc.internal.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:102)
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3124)
at com.ibm.pvc.internal.webcontainer.webapp.BundleWebApp.handleRequest(BundleWebApp.java:451)
at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:235)
at com.ibm.pvc.internal.webcontainer.VirtualHost.handleRequest(VirtualHost.java:96)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:811)
at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:41)
at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:464)
at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:355)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1498)
Here is a possible fix you might want to consider for the org.apache.wink.common.internal.utils.FileLoader class:
/** * <p> * loads file * <p> * first searches for file in file system * <p> * if not found, searchs for file using classloaders * * @param fileName * @return * @throws FileNotFoundException * @throws URISyntaxException */ public static InputStream loadFileAsStream(String fileName) throws FileNotFoundException { if (fileName == null || fileName.trim().equals("")) { throw new NullPointerException("fileName"); } logger.debug("Searching for {} in file system.", fileName); File file = new File(fileName); if (file.isFile()) { // since file is a normal file, return it logger.debug("File {} found in file system.", fileName); return new FileInputStream(file); } // before using URLs try to open it as stream provided by the // classloaders first. InputStream result = openResourceUsingClassLoaders(fileName); if (result == null) { // file is not a normal file, try to find it using classloaders URL url = loadFileUsingClassLoaders(fileName); try { // decode any escaped sequences such as <space> which is %20 in // URL URI uri = url.toURI(); String path = uri.getSchemeSpecificPart(); url = new URL(url.getProtocol(), null, path); } catch (IOException e) { logger.error(e.getMessage(), e); throw new FileNotFoundException(fileName); } catch (URISyntaxException e) { // do nothing, but return the real (!) url } try { result = url.openStream(); } catch (IOException e) { logger.error(e.getMessage(), e); throw new FileNotFoundException(fileName); } } return result; } /** * open the specified resource using class loaders * * @param filename * the name of the resource * @return the resource as {@link InputStream} if found * @throws FileNotFoundException * if the resource was not found */ private static InputStream openResourceUsingClassLoaders(String filename) throws FileNotFoundException { logger.debug("Searching for {} using thread context classloader.", filename); ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); InputStream is = openResourceUsingClassLoader(classLoader, filename); if (is == null) { logger.debug("Searching for {} using current classloader.", filename); classLoader = FileLoader.class.getClassLoader(); is = openResourceUsingClassLoader(classLoader, filename); if (is == null) { logger.debug("Searching for {} using system classloader.", filename); is = ClassLoader.getSystemResourceAsStream(filename); if (is == null) { // well, the last attempt has failed! throw // FileNotFoundException logger.error("Failed to open resource using classloaders"); throw new FileNotFoundException(filename); } } } return is; } private static InputStream openResourceUsingClassLoader(ClassLoader classLoader, String filename) { InputStream is = null; if (classLoader != null) { is = classLoader.getResourceAsStream(filename); } return is; }