Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Not A Problem
-
2.0.16
-
None
-
None
Description
This exception is raised when disposing a NioProcessor in osgy environments.
2016-11-07 08:50:21,767 | WARN | NioSocketAcceptor-1 | org.apache.mina.core.service.SimpleIoProcessorPool | 100 - org.apache.mina.core - 2.0.13.1 | Failed to dispose the NioProcessor IoProcessor. java.lang.IllegalStateException: Unknown protocol: mvn at org.apache.felix.framework.URLHandlersStreamHandlerProxy.toExternalForm(URLHandlersStreamHandlerProxy.java:482) at org.apache.felix.framework.URLHandlersStreamHandlerProxy.toExternalForm(URLHandlersStreamHandlerProxy.java:474) at java.net.URL.toExternalForm(URL.java:929) at java.net.URL.toString(URL.java:915) at java.lang.ClassLoader.defineClassSourceLocation(ClassLoader.java:678) at java.lang.ClassLoader.defineClass(ClassLoader.java:762) at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.defineClass(BundleWiringImpl.java:2370) at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.findClass(BundleWiringImpl.java:2154) at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1542) at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:79) at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2018) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at org.apache.mina.core.polling.AbstractPollingIoProcessor.startupProcessor(AbstractPollingIoProcessor.java:438) at org.apache.mina.core.polling.AbstractPollingIoProcessor.dispose(AbstractPollingIoProcessor.java:182) at org.apache.mina.core.service.SimpleIoProcessorPool.dispose(SimpleIoProcessorPool.java:329) at org.apache.mina.core.polling.AbstractPollingIoAcceptor$Acceptor.run(AbstractPollingIoAcceptor.java:508) at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)
The root causes resides how the osgi manifest descriptor is created.
In mina-core/pom.xml Maven-bundle-plugin definition
<Export-Package>
org.apache.mina.core.polling;version=${project.version};-noimport:=true,
</Export-Package>
Therefore: org.apache.mina.core.polling.AbstractPollingIoProcessor is exported, but this class has a private internal class AbstractPollingIoProcessor.Processor that should be exported as well. But It's kind of contraction to export a private class, so the osgi classpath mechanism fails with IllegalState.
One way to approach this problem is changing the pom.xml so:
... <Private-Package> org.apache.mina.core.polling </Private-Package> ...