I have a problem with iPojo not finding the JspPropertyGroupDescriptor
class. I have discussed this in the ops4j mailing list:
https://groups.google.com/g/ops4j/c/qMSZT4RNRqc

But, I'm not sure if this is a Pax-Web problem or an iPojo problem.

I am using Karaf 4.4.4 with Pax-Web 8.0.22.

I get the following error in the log:

2023-11-30T17:55:19,274 | ERROR | [iPOJO] pool-1-thread-1 | web-console
                 | 108 - se.digia.seco.web.web-console - 3.1.0.SNAPSHOT |
[ERROR]  : Cannot create the proxy object
java.lang.NoClassDefFoundError:
javax/servlet/descriptor/JspPropertyGroupDescriptor
at java.lang.Class.getDeclaredMethods0(Native Method) ~[?:?]
at java.lang.Class.privateGetDeclaredMethods(Class.java:3402) ~[?:?]
at java.lang.Class.privateGetPublicMethods(Class.java:3427) ~[?:?]
at java.lang.Class.getMethods(Class.java:2019) ~[?:?]
at
org.apache.felix.ipojo.handlers.dependency.ProxyGenerator.dumpProxy(ProxyGenerator.java:89)
~[!/:?]
at
org.apache.felix.ipojo.handlers.dependency.Dependency$SmartProxyFactory.getProxyClass(Dependency.java:1133)
~[!/:?]
at
org.apache.felix.ipojo.handlers.dependency.Dependency$SmartProxyFactory.getProxy(Dependency.java:1151)
[!/:?]
at
org.apache.felix.ipojo.handlers.dependency.Dependency.start(Dependency.java:516)
[!/:?]
at
org.apache.felix.ipojo.handlers.dependency.DependencyHandler.__M_start(DependencyHandler.java:496)
[!/:?]
at
org.apache.felix.ipojo.handlers.dependency.DependencyHandler.start(DependencyHandler.java)
[!/:?]
at org.apache.felix.ipojo.HandlerManager.start(HandlerManager.java:136)
[!/:?]
at org.apache.felix.ipojo.InstanceManager.start(InstanceManager.java:421)
[!/:?]
at
org.apache.felix.ipojo.ComponentFactory.createInstance(ComponentFactory.java:179)
[!/:?]
at
org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:319)
[!/:?]
at
org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:240)
[!/:?]
at
org.apache.felix.ipojo.extender.internal.linker.ManagedType$InstanceSupport$1.call(ManagedType.java:312)
[!/:?]
at
org.apache.felix.ipojo.extender.internal.linker.ManagedType$InstanceSupport$1.call(ManagedType.java:306)
[!/:?]
at
org.apache.felix.ipojo.extender.internal.queue.JobInfoCallable.call(JobInfoCallable.java:114)
[!/:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
[?:?]
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
[?:?]
at java.lang.Thread.run(Thread.java:833) [?:?]
Caused by: java.lang.ClassNotFoundException:
javax.servlet.descriptor.JspPropertyGroupDescriptor not found by
org.ops4j.pax.web.pax-web-api [94]
at
org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1591)
~[?:?]
at
org.apache.felix.framework.BundleWiringImpl.access$300(BundleWiringImpl.java:79)
~[?:?]
at
org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1976)
~[?:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[?:?]
... 22 more

In Pax-Web 7.3.23 (used in Karaf 4.3.3) the following bundle was included:

  javax.servlet-api/3.1.0

In Pax-Web 8.0.22 (used in Karaf 4.4.4) it has been replaced by the
following pair:

  jakarta.servlet-api/4.0.4
  pax-web-compatibility-servlet31/8.0.22

I am using Servlet 3.1 which was provided cleanly in Pax-Web 7.3.23. But in
8.0.22 it is instead provided by the Servlet 4.0 bundle in combination with
a fragment that (if I understand correctly) re-exports that code as version
3.1. Correct me if I am wrong.

This setup doesn't seem to work with iPojo. It's unclear to me why this is.

Looking at the bundle org.ops4j.pax.web/pax-web-api/8.0.22, it seems like
it only imports the following javax.servlet packages:

  javax.servlet; version="[3.1, 5)",
  javax.servlet.annotation; version="[3.1, 5)",
  javax.servlet.http; version="[3.1, 5)"

...but not

  javax.servlet.descriptor

If I add the following:

  javax.servlet.descriptor;version="[3.1,5)"

To the Import-Package section of the MANIFEST.MF of the pax-web-api jar,
then it works. It makes me wonder if this import is missing in pax-web-api.
On the other hand I wonder why iPojo is looking for this class in
pax-web-api and not in the bundle that actually exports it.

/Bengt

Reply via email to