commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gary Gregory <garydgreg...@gmail.com>
Subject Re: [VFS] ClassLoader pickle with OSGi (ClassCastException)
Date Fri, 22 Jun 2012 01:25:52 GMT
On Thu, Jun 21, 2012 at 5:50 PM, Dan Tran <dantran@gmail.com> wrote:

> Is there a JIRA bug for this issue yet?
>

Here you go: https://issues.apache.org/jira/browse/VFS-424

Gary


>
> -D
>
> On Thu, Jun 14, 2012 at 12:02 PM, Gary Gregory <garydgregory@gmail.com>
> wrote:
> > On Thu, Jun 14, 2012 at 3:01 PM, Gary Gregory <garydgregory@gmail.com
> >wrote:
> >
> >> On Thu, Jun 14, 2012 at 2:00 PM, James Carman <
> james@carmanconsulting.com>wrote:
> >>
> >>> Are you using dynamic imports?
> >>>
> >>
> >> No, VFS is on the Bundle-ClassPath.
> >>
> >
> > And VFS and other jars in is our app server jar.
> >
> > Gary
> >
> >
> >> Gary
> >>
> >>>
> >>> On Thu, Jun 14, 2012 at 1:58 PM, Gary Gregory <garydgregory@gmail.com
> >>> >wrote:
> >>>
> >>> > On Thu, Jun 14, 2012 at 1:03 PM, Dan Tran <dantran@gmail.com>
wrote:
> >>> >
> >>> > > Thanks for discover this issue. Look likes FileProvider get
> excluded
> >>> > > from export list?
> >>> > >
> >>> >
> >>> > I do not think so, the 2.0 MANIFEST.MF includes:
> >>> >
> >>> > Export-Package:
> org.apache.commons.vfs2.impl;version="2.0",org.apache.
> >>> >
>  commons.vfs2.provider.url;version="2.0",org.apache.commons.vfs2.provi
> >>> > ...
> >>> >
> >>> > The class is found and instantiated, but it cannot be cast because
it
> >>> comes
> >>> > from a different class loader.
> >>> >
> >>> > Gary
> >>> >
> >>> >
> >>> > >
> >>> > > -D
> >>> > >
> >>> > > On Thu, Jun 14, 2012 at 4:53 AM, Gary Gregory <
> garydgregory@gmail.com
> >>> >
> >>> > > wrote:
> >>> > > > The classLoader ivar is initialized differently in 1.0 than
in
> 2.0.
> >>> > > > That's why the CCE shows up. A different class loader is
used.
> I'm
> >>> not
> >>> > > > sure if there is a bug in 2.0 that was introduced when the
> >>> classLoader
> >>> > > > use was changed. I'm starting to think this was an unexpected
> side
> >>> > > > effect.
> >>> > > >
> >>> > > > Gary
> >>> > > >
> >>> > > > On Jun 14, 2012, at 2:08, Ralph Goers <
> ralph.goers@dslextreme.com>
> >>> > > wrote:
> >>> > > >
> >>> > > >> I have no idea why it worked in 1.0 and fails now. As
far as I
> can
> >>> > tell
> >>> > > the call to createManager has always been there. I have no idea
> why.
> >>> > > >>
> >>> > > >> But I also don't know why
> >>> > > >>
> >>> > > >>> Caused by: java.lang.ClassCastException:
> >>> > > >>> org.apache.commons.vfs2.provider.local.DefaultLocalFileProvider
> >>> > cannot
> >>> > > be
> >>> > > >>> cast to org.apache.commons.vfs2.provider.FileProvider
> >>> > > >>
> >>> > > >> is happening.  That should be valid.
> >>> > > >>
> >>> > > >>
> >>> > > >> Ralph
> >>> > > >>
> >>> > > >> On Jun 13, 2012, at 2:16 PM, Gary Gregory wrote:
> >>> > > >>
> >>> > > >>> Hi All:
> >>> > > >>>
> >>> > > >>> When I run under our OSGi (Eclipse Equinox) set up
with 2.0, I
> get
> >>> > this
> >>> > > >>> pickle:
> >>> > > >>>
> >>> > > >>> org.apache.commons.vfs2.FileSystemException: Could
not create a
> >>> file
> >>> > > system
> >>> > > >>> manager of class
> >>> > > "org.apache.commons.vfs2.impl.StandardFileSystemManager".
> >>> > > >>>   at org.apache.commons.vfs2.VFS.createManager(VFS.java:99)
> >>> > > >>>   at org.apache.commons.vfs2.VFS.getManager(VFS.java:50)
> >>> > > >>>   at
> >>> > > >>>
> >>> > >
> >>> >
> >>>
> com.seagullsw.toolbox.config.ConfigurationDirectory.resolveFileObject(ConfigurationDirectory.java:315)
> >>> > > >>>   at
> >>> > > >>>
> >>> > >
> >>> >
> >>>
> com.seagullsw.toolbox.config.Configuration.resolveFileObject(Configuration.java:135)
> >>> > > >>> <Snip: ...my app frames...>
> >>> > > >>>   at
> >>> > > >>>
> >>> > >
> >>> >
> >>>
> com.seagullsw.appinterface.server.osgi.JCicsOsgiTestCase.testJcicsOsgiRoundtrip(JCicsOsgiTestCase.java:226)
> >>> > > >>>   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> Method)
> >>> > > >>>   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown
> Source)
> >>> > > >>>   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown
> >>> Source)
> >>> > > >>>   at java.lang.reflect.Method.invoke(Unknown Source)
> >>> > > >>>   at
> >>> org.junit.internal.runners.TestMethod.invoke(TestMethod.java:66)
> >>> > > >>>   at
> >>> > > >>>
> >>> > >
> >>> >
> >>>
> org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:307)
> >>> > > >>>   at
> >>> > > org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:86)
> >>> > > >>>   at
> >>> > > >>>
> >>> > >
> >>> >
> >>>
> org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:94)
> >>> > > >>>   at
> >>> > > >>>
> >>> > >
> >>> >
> >>>
> org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:294)
> >>> > > >>>   at
> >>> > > >>>
> >>> > >
> >>> >
> >>>
> org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:112)
> >>> > > >>>   at
> >>> > > >>>
> >>> > >
> >>> >
> >>>
> org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:73)
> >>> > > >>>   at
> >>> > > >>>
> >>> > >
> >>> >
> >>>
> org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:282)
> >>> > > >>>   at
> >>> > >
> org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:84)
> >>> > > >>>   at
> >>> > org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49)
> >>> > > >>>   at
> >>> > > >>>
> >>> > >
> >>> >
> >>>
> org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:207)
> >>> > > >>>   at
> >>> > > >>>
> >>> > >
> >>> >
> >>>
> org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:146)
> >>> > > >>>   at
> >>> > > >>>
> >>> > >
> >>> >
> >>>
> org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:120)
> >>> > > >>>   at
> >>> > > >>>
> >>> > >
> >>> >
> >>>
> org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34)
> >>> > > >>>   at
> >>> > > >>>
> >>> > >
> >>>
> org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44)
> >>> > > >>>   at
> >>> > > >>>
> >>> > >
> >>> >
> >>>
> org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:118)
> >>> > > >>>   at
> >>> > > >>>
> >>> > >
> >>> >
> >>>
> org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:102)
> >>> > > >>>   at
> >>> > > >>>
> >>> > >
> >>> >
> >>>
> org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53)
> >>> > > >>>   at
> >>> > > >>>
> >>> > >
> >>> >
> >>>
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
> >>> > > >>>   at
> >>> > > >>>
> >>> > >
> >>> >
> >>>
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> >>> > > >>>   at
> >>> > > >>>
> >>> > >
> >>> >
> >>>
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
> >>> > > >>>   at
> >>> > > >>>
> >>> > >
> >>> >
> >>>
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
> >>> > > >>>   at
> >>> > > >>>
> >>> > >
> >>> >
> >>>
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
> >>> > > >>>   at
> >>> > > >>>
> >>> > >
> >>> >
> >>>
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
> >>> > > >>> Caused by: org.apache.commons.vfs2.FileSystemException:
Could
> not
> >>> > load
> >>> > > VFS
> >>> > > >>> configuration from
> >>> > > >>>
> >>> > >
> >>> >
> >>>
> "bundleresource://7.fwk545215872:34/org/apache/commons/vfs2/impl/providers.xml".
> >>> > > >>>   at
> >>> > > >>>
> >>> > >
> >>> >
> >>>
> org.apache.commons.vfs2.impl.StandardFileSystemManager.configure(StandardFileSystemManager.java:199)
> >>> > > >>>   at
> >>> > > >>>
> >>> > >
> >>> >
> >>>
> org.apache.commons.vfs2.impl.StandardFileSystemManager.init(StandardFileSystemManager.java:123)
> >>> > > >>>   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> Method)
> >>> > > >>>   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown
> Source)
> >>> > > >>>   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown
> >>> Source)
> >>> > > >>>   at java.lang.reflect.Method.invoke(Unknown Source)
> >>> > > >>>   at org.apache.commons.vfs2.VFS.createManager(VFS.java:88)
> >>> > > >>>   ... 49 more
> >>> > > >>> Caused by: java.lang.ClassCastException:
> >>> > > >>> org.apache.commons.vfs2.provider.local.DefaultLocalFileProvider
> >>> > cannot
> >>> > > be
> >>> > > >>> cast to org.apache.commons.vfs2.provider.FileProvider
> >>> > > >>>   at
> >>> > > >>>
> >>> > >
> >>> >
> >>>
> org.apache.commons.vfs2.impl.StandardFileSystemManager.addProvider(StandardFileSystemManager.java:371)
> >>> > > >>>   at
> >>> > > >>>
> >>> > >
> >>> >
> >>>
> org.apache.commons.vfs2.impl.StandardFileSystemManager.configure(StandardFileSystemManager.java:270)
> >>> > > >>>   at
> >>> > > >>>
> >>> > >
> >>> >
> >>>
> org.apache.commons.vfs2.impl.StandardFileSystemManager.configure(StandardFileSystemManager.java:195)
> >>> > > >>>   ... 55 more
> >>> > > >>>
> >>> > > >>> Which I work around with:
> >>> > > >>>
> >>> > > >>>   private void initVfs() {
> >>> > > >>>       StandardFileSystemManager fsm = new
> >>> > StandardFileSystemManager();
> >>> > > >>>       fsm.setClassLoader(fsm.getClass().getClassLoader());
> >>> > > >>>       try {
> >>> > > >>>           FieldUtils.writeDeclaredStaticField(VFS.class,
> >>> "instance",
> >>> > > fsm,
> >>> > > >>> true);
> >>> > > >>>           fsm.init();
> >>> > > >>>       } catch (FileSystemException e) {
> >>> > > >>>           ...
> >>> > > >>>       } catch (IllegalAccessException e) {
> >>> > > >>>           ...
> >>> > > >>>       }
> >>> > > >>>   }
> >>> > > >>>
> >>> > > >>> Two questions:
> >>> > > >>>
> >>> > > >>> (1) Why is org.apache.commons.vfs2.VFS.getManager()
coded with
> a
> >>> > class
> >>> > > name
> >>> > > >>> ref instead of the a real Class object or an actual
instance:
> >>> > > >>>
> >>> > > >>>   public static synchronized FileSystemManager getManager()
> >>> > > >>>       throws FileSystemException
> >>> > > >>>   {
> >>> > > >>>       if (instance == null)
> >>> > > >>>       {
> >>> > > >>>           instance =
> >>> > > >>>
> >>> > >
> >>>
> createManager("org.apache.commons.vfs2.impl.StandardFileSystemManager");
> >>> > > >>>       }
> >>> > > >>>       return instance;
> >>> > > >>>   }
> >>> > > >>>
> >>> > > >>> Why not:
> >>> > > >>>
> >>> > > >>>   public static synchronized FileSystemManager getManager()
> >>> > > >>>       throws FileSystemException
> >>> > > >>>   {
> >>> > > >>>       if (instance == null)
> >>> > > >>>       {
> >>> > > >>>           instance = new StandardFileSystemManager();
> >>> > > >>>           // where the StandardFileSystemManager
constructor
> calls
> >>> > > init();
> >>> > > >>>       }
> >>> > > >>>       return instance;
> >>> > > >>>   }
> >>> > > >>>
> >>> > > >>> If not, what about adding a setManager(FileSystemManager)?
> >>> > > >>>
> >>> > > >>> This did not happen in 1.0, it worked fine in OSGi.
> >>> > > >>>
> >>> > > >>> Thank you,
> >>> > > >>> Gary
> >>> > > >>>
> >>> > > >>> --
> >>> > > >>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
> >>> > > >>> JUnit in Action, 2nd Ed: <http://goog_1249600977>
> >>> http://bit.ly/ECvg0
> >>> > > >>> Spring Batch in Action: <http://s.apache.org/HOq>
> >>> > http://bit.ly/bqpbCK
> >>> > > >>> Blog: http://garygregory.wordpress.com
> >>> > > >>> Home: http://garygregory.com/
> >>> > > >>> Tweet! http://twitter.com/GaryGregory
> >>> > > >>
> >>> > > >>
> >>> > > >>
> >>> ---------------------------------------------------------------------
> >>> > > >> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> >>> > > >> For additional commands, e-mail: dev-help@commons.apache.org
> >>> > > >>
> >>> > > >
> >>> > > >
> >>> ---------------------------------------------------------------------
> >>> > > > To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> >>> > > > For additional commands, e-mail: dev-help@commons.apache.org
> >>> > > >
> >>> > >
> >>> > >
> ---------------------------------------------------------------------
> >>> > > To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> >>> > > For additional commands, e-mail: dev-help@commons.apache.org
> >>> > >
> >>> > >
> >>> >
> >>> >
> >>> > --
> >>> > E-Mail: garydgregory@gmail.com | ggregory@apache.org
> >>> > JUnit in Action, 2nd Ed: <http://goog_1249600977>http://bit.ly/ECvg0
> >>> > Spring Batch in Action: <http://s.apache.org/HOq>
> http://bit.ly/bqpbCK
> >>> > Blog: http://garygregory.wordpress.com
> >>> > Home: http://garygregory.com/
> >>> > Tweet! http://twitter.com/GaryGregory
> >>> >
> >>>
> >>
> >>
> >>
> >> --
> >> E-Mail: garydgregory@gmail.com | ggregory@apache.org
> >> JUnit in Action, 2nd Ed: <http://goog_1249600977>http://bit.ly/ECvg0
> >> Spring Batch in Action: <http://s.apache.org/HOq>http://bit.ly/bqpbCK
> >>
> >> Blog: http://garygregory.wordpress.com
> >> Home: http://garygregory.com/
> >> Tweet! http://twitter.com/GaryGregory
> >>
> >
> >
> >
> > --
> > E-Mail: garydgregory@gmail.com | ggregory@apache.org
> > JUnit in Action, 2nd Ed: <http://goog_1249600977>http://bit.ly/ECvg0
> > Spring Batch in Action: <http://s.apache.org/HOq>http://bit.ly/bqpbCK
> > Blog: http://garygregory.wordpress.com
> > Home: http://garygregory.com/
> > Tweet! http://twitter.com/GaryGregory
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> For additional commands, e-mail: dev-help@commons.apache.org
>
>


-- 
E-Mail: garydgregory@gmail.com | ggregory@apache.org
JUnit in Action, 2nd Ed: <http://goog_1249600977>http://bit.ly/ECvg0
Spring Batch in Action: <http://s.apache.org/HOq>http://bit.ly/bqpbCK
Blog: http://garygregory.wordpress.com
Home: http://garygregory.com/
Tweet! http://twitter.com/GaryGregory

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message