dev@glassfish.java.net

Re: felix classloading problem for META-INF/services file

From: Richard S. Hall <heavy_at_ungoverned.org>
Date: Wed, 24 Sep 2008 17:48:28 -0400

It depends on how you are trying to access it. If you are using the
bundle entry-related methods, then you should be able to access it.
However, if you are trying to access it via ClassLoader.getResource(),
then the package containing it should be on the bundle's internal class
path (in most cases this means that you should have "." on the bundle's
class path or nothing at all since it defaults to ".").

But I do understand that there was some issue around this area where it
was claimed that resources/classes on the bundle's internal class path
were not accessible from the class loader...this should not be the case
though. Whatever is listed on the bundle's internal class path should be
accessible from its class loader. Did we ever get to the bottom of that
issue?

-> richard


Ken Paulsen wrote:
>
>
> Hi everyone,
>
> I am trying to use the "console-theme-plugin-10.0.0-SNAPSHOT.jar"
> bundle. When the code attempts to retrieve the file:
> "META-INF/services/com.sun.webui.theme.ThemeService" from the jar, it
> cannot find it (see trace below).
>
> I am completely lost on how to fix this. Ideas? File exists in the
> bundle, not sure if I need a special export for it -- do I? I am
> accessing this via Jerome's "Glassfish-require-services" feature from
> the webapp classloader. MANIFEST.MF is also attached.
>
> Thanks!
>
> Ken
>
>
> SEVERE: StandardWrapperValve[FacesServlet]: PWC1406: Servlet.service()
> for servlet FacesServlet threw exception
> java.lang.IllegalArgumentException: Failed to set property (height)
> with value (1), which is of type (java.lang.String). Expected type
> (int). This occured on the component named (sun_image5) of type
> (com.sun.webui.jsf.component.ImageComponent).
> at
> com.sun.jsftemplating.component.ComponentUtil.setOption(ComponentUtil.java:482)
>
> at
> com.sun.jsftemplating.component.factory.ComponentFactoryBase.setOption(ComponentFactoryBase.java:134)
>
> at
> com.sun.jsftemplating.component.factory.ComponentFactoryBase.setOptions(ComponentFactoryBase.java:106)
>
> at
> com.sun.jsftemplating.component.factory.sun.ImageComponentFactory.create(ImageComponentFactory.java:65)
>
> at
> com.sun.jsftemplating.component.ComponentUtil.createChildComponent(ComponentUtil.java:400)
>
> at
> com.sun.jsftemplating.layout.descriptors.LayoutComponent.getChild(LayoutComponent.java:290)
>
> at
> com.sun.jsftemplating.layout.LayoutViewHandler.buildUIComponentTree(LayoutViewHandler.java:552)
>
> at
> com.sun.jsftemplating.layout.LayoutViewHandler.buildUIComponentTree(LayoutViewHandler.java:581)
>
> at
> com.sun.jsftemplating.layout.LayoutViewHandler.buildUIComponentTree(LayoutViewHandler.java:581)
>
> at
> com.sun.jsftemplating.layout.LayoutViewHandler.createView(LayoutViewHandler.java:251)
>
> at
> com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:205)
>
> at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
> at
> com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:104)
>
> at
> com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
> at
> com.sun.faces.extensions.avatar.lifecycle.PartialTraversalLifecycle.execute(PartialTraversalLifecycle.java:80)
>
> at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
> at
> org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:431)
>
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:337)
>
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:218)
>
> at com.sun.webui.jsf.util.UploadFilter.doFilter(UploadFilter.java:267)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:250)
>
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:218)
>
> at
> org.apache.catalina.core.StandardWrapperValve.preInvoke(StandardWrapperValve.java:460)
>
> at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:139)
>
> at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:186)
>
> at
> org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:719)
>
> at
> org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:657)
>
> at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:96)
> at
> com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:98)
>
> at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:187)
>
> at
> org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:719)
>
> at
> org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:657)
>
> at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:651)
>
> at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1030)
> at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:142)
>
> at
> org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:719)
>
> at
> org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:657)
>
> at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:651)
>
> at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1030)
> at
> org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:307)
>
> at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
>
> at
> com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:180)
>
> at
> com.sun.grizzly.http.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:610)
>
> at
> com.sun.grizzly.http.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:547)
>
> at
> com.sun.grizzly.http.DefaultProcessorTask.process(DefaultProcessorTask.java:783)
>
> at
> com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:152)
>
> at
> com.sun.enterprise.v3.services.impl.GlassfishProtocolChain.executeProtocolFilter(GlassfishProtocolChain.java:71)
>
> at
> com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:103)
>
> at
> com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:89)
>
> at
> com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
> at
> com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:67)
>
> at
> com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:56)
>
> at
> com.sun.grizzly.util.WorkerThreadImpl.processTask(WorkerThreadImpl.java:325)
>
> at
> com.sun.grizzly.util.WorkerThreadImpl.run(WorkerThreadImpl.java:184)
> Caused by: javax.faces.FacesException: java.lang.NoClassDefFoundError:
> com/sun/webui/theme/ThemeService
> at
> javax.faces.component.UIComponentBase$AttributesMap.put(UIComponentBase.java:1651)
>
> at
> javax.faces.component.UIComponentBase$AttributesMap.put(UIComponentBase.java:1526)
>
> at
> com.sun.jsftemplating.component.ComponentUtil.setOption(ComponentUtil.java:480)
>
> ... 53 more
> Caused by: java.lang.NoClassDefFoundError:
> com/sun/webui/theme/ThemeService
> at java.lang.ClassLoader.defineClass1(Native Method)
> at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
> at
> org.apache.felix.framework.searchpolicy.ContentClassLoader.findClass(ContentClassLoader.java:214)
>
> at
> org.apache.felix.framework.searchpolicy.ContentClassLoader.loadClassFromModule(ContentClassLoader.java:85)
>
> at
> org.apache.felix.framework.searchpolicy.ContentLoaderImpl.getClass(ContentLoaderImpl.java:162)
>
> at
> org.apache.felix.framework.searchpolicy.R4Wire.getClass(R4Wire.java:101)
> at
> org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.searchImports(R4SearchPolicyCore.java:505)
>
> at
> org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.findClassOrResource(R4SearchPolicyCore.java:466)
>
> at
> org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.findClass(R4SearchPolicyCore.java:185)
>
> at
> org.apache.felix.framework.searchpolicy.R4SearchPolicy.findClass(R4SearchPolicy.java:45)
>
> at
> org.apache.felix.moduleloader.ModuleImpl.getClass(ModuleImpl.java:179)
> at org.apache.felix.framework.Felix.loadBundleClass(Felix.java:1503)
> at
> org.apache.felix.framework.BundleImpl.loadClass(BundleImpl.java:358)
> at
> org.jvnet.hk2.osgiadapter.OSGiModuleImpl$2.loadClass(OSGiModuleImpl.java:315)
>
> at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
> at
> org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1413)
>
> at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
> at java.lang.Class.forName0(Native Method)
> at java.lang.Class.forName(Class.java:247)
> at sun.misc.Service$LazyIterator.next(Service.java:271)
> at
> com.sun.webui.theme.SPIThemeFactory.findThemeServiceReferences(SPIThemeFactory.java:611)
>
> at
> com.sun.webui.theme.SPIThemeFactory.findThemeReferences(SPIThemeFactory.java:544)
>
> at
> com.sun.webui.theme.SPIThemeFactory.getThemeResources(SPIThemeFactory.java:464)
>
> at
> com.sun.webui.theme.SPIThemeFactory.getTheme(SPIThemeFactory.java:178)
> at
> com.sun.webui.jsf.util.ThemeUtilities.getTheme(ThemeUtilities.java:138)
> at
> com.sun.webui.jsf.component.ImageComponent.getTheme(ImageComponent.java:919)
>
> at
> com.sun.webui.jsf.component.ImageComponent.initThemeImage(ImageComponent.java:914)
>
> at
> com.sun.webui.jsf.component.ImageComponent.getHeight(ImageComponent.java:286)
>
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>
> at java.lang.reflect.Method.invoke(Method.java:597)
> at
> javax.faces.component.UIComponentBase$AttributesMap.put(UIComponentBase.java:1636)
>
> ... 55 more
> Caused by: java.lang.ClassNotFoundException:
> com.sun.webui.theme.ThemeService
> at
> org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.findClass(R4SearchPolicyCore.java:198)
>
> at
> org.apache.felix.framework.searchpolicy.R4SearchPolicy.findClass(R4SearchPolicy.java:45)
>
> at
> org.apache.felix.framework.searchpolicy.ContentClassLoader.loadClass(ContentClassLoader.java:109)
>
> at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
> at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
> ... 91 more
> Caused by: java.lang.ClassNotFoundException:
> com.sun.webui.theme.ThemeService
> at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
> at java.security.AccessController.doPrivileged(Native Method)
> at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
> at
> org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.searchDynamicImports(R4SearchPolicyCore.java:602)
>
> at
> org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.findClassOrResource(R4SearchPolicyCore.java:478)
>
> at
> org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.findClass(R4SearchPolicyCore.java:185)
>
> ... 95 more
>
>
>
> FYI.... I worked-around my previous problem, although I'm not happy
> with the work-a-round. I marked 2 packages that the bundle was
> importing & exporting as "optional" imports to get the bundle to load
> -- removing the version information from import in the Manifest also
> fixed the problem, but I couldn't figure out how to create a pom.xml
> that dropped the version information. If anyone knows what was wrong
> w/ previous pom.xml or MANIFEST that prevented it from finding classes
> in the same bundle which imported/exported them, let me know. - Ken
> ------------------------------------------------------------------------
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net