You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@wink.apache.org by "Michael Elman (JIRA)" <ji...@apache.org> on 2009/09/16 15:21:58 UTC
[jira] Updated: (WINK-187)
org.apache.wink.common.internal.utils.FileLoader is not able to open a
stream to existing File.
[ https://issues.apache.org/jira/browse/WINK-187?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Michael Elman updated WINK-187:
-------------------------------
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:
{code}
/**
* <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;
}
{code}
was:
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;
}
added \{code\} tag surrounding the proposed patch.
> org.apache.wink.common.internal.utils.FileLoader is not able to open a stream to existing File.
> -----------------------------------------------------------------------------------------------
>
> Key: WINK-187
> URL: https://issues.apache.org/jira/browse/WINK-187
> Project: Wink
> Issue Type: Bug
> Components: Common
> Affects Versions: 0.2
> Environment: IBM Lotus Expeditor's Web Container - LWI. It is loaded in Equinox OSGi framework.
> Reporter: Kaloyan Kolev
> Priority: Minor
> Fix For: 0.2
>
>
> 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:
> {code}
> /**
> * <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;
> }
> {code}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.