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 Thu, 21 Jun 2012 21:58:47 GMT
Not yet.

Gary

On Jun 21, 2012, at 17:50, Dan Tran <dantran@gmail.com> wrote:

> 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
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Mime
View raw message