Uploaded image for project: 'MINA'
  1. MINA
  2. DIRMINA-1053

Osgi error when disposing NioSocketAccessor

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Not A Problem
    • 2.0.16
    • None
    • Core
    • 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>
      ...
      

      Attachments

        Activity

          People

            Unassigned Unassigned
            antoniomaria Antonio Maria
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: