commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dan Tran <dant...@gmail.com>
Subject Re: [VFS] ClassLoader pickle with OSGi (ClassCastException)
Date Thu, 21 Jun 2012 21:50:21 GMT
Is there a JIRA bug for this issue yet?

-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


Mime
View raw message