Community
Participate
Working Groups
3.3M6 I'm using the Eclipse Preferences API in a server environment where I don't have the concept of a "product". When using the API I get the following NPE which indicates that the Preferences API is trying to load default product preferences which aren't available. java.lang.NullPointerException at org.eclipse.core.internal.preferences.DefaultPreferences.applyDefaults(DefaultPreferences.java:126) at org.eclipse.core.internal.preferences.DefaultPreferences.applyProductDefaults(DefaultPreferences.java:190) at org.eclipse.core.internal.preferences.DefaultPreferences.loadDefaults(DefaultPreferences.java:233) at org.eclipse.core.internal.preferences.DefaultPreferences.load(DefaultPreferences.java:227) at org.eclipse.core.internal.preferences.EclipsePreferences.create(EclipsePreferences.java:307) at org.eclipse.core.internal.preferences.EclipsePreferences.internalNode(EclipsePreferences.java:543) at org.eclipse.core.internal.preferences.EclipsePreferences.node(EclipsePreferences.java:662) at org.eclipse.core.internal.preferences.PreferencesService.getNodes(PreferencesService.java:588) at org.eclipse.core.internal.preferences.PreferencesService.getString(PreferencesService.java:635) at yada.yada.MyServlet.getSomethingFromIPreferencesService(MyServlet.java:78) at yada.yada.MyServlet.doGet(MyServlet.java:48) at javax.servlet.http.HttpServlet.service(HttpServlet.java:596) at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) at org.eclipse.equinox.http.servlet.internal.ServletRegistration.handleRequest(ServletRegistration.java:91) at org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:110) at org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:60) at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) at org.eclipse.equinox.http.jetty.internal.HttpServerManager$InternalHttpServiceServlet.service(HttpServerManager.java:275) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:428) at org.mortbay.jetty.servlet.ServletHandler.dispatch(ServletHandler.java:677) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:568) at org.mortbay.http.HttpContext.handle(HttpContext.java:1530) at org.mortbay.http.HttpContext.handle(HttpContext.java:1482) at org.mortbay.http.HttpServer.service(HttpServer.java:909) at org.mortbay.http.HttpConnection.service(HttpConnection.java:820) at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:986) at org.mortbay.http.HttpConnection.handle(HttpConnection.java:837) at org.mortbay.http.SocketListener.handleConnection(SocketListener.java:245) at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357) at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534)
Created attachment 62199 [details] Patch for org.eclipse.equinox.preferences The fix for the actual NPE might be as simple as in this patch. However, I wonder about the performance overhead of applyProductDefaults in an environment where no IProductPreferencesService is available. It's called by loadDefaults which is called by load. How often might load get called? If it's not very frequent then this might be ok, otherwise there might be room for performance optimizations here.
Its called once per bundle who accesses their default preferences. I have released a change that sets the field to an empty table if one doesn't exist, and the check is now table.isEmpty(). Thanks for the patch. Released to HEAD.