[ https://issues.apache.org/jira/browse/ARIES-2111?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Amichai Rothman resolved ARIES-2111. ------------------------------------ Fix Version/s: rsa-2.0.0 Resolution: Fixed > ClassNotFoundException when loading transitive class > ---------------------------------------------------- > > Key: ARIES-2111 > URL: https://issues.apache.org/jira/browse/ARIES-2111 > Project: Aries > Issue Type: Bug > Components: Remote Service Admin > Affects Versions: rsa-1.16.1 > Environment: Aries RSA 1.16.1, bug discovered while running in Karaf > 4.4.3, OpenJDK 11 on Linux. > Reporter: Amichai Rothman > Priority: Major > Fix For: rsa-2.0.0 > > > The TCP provider uses BasicObjectInputStream to deserialize objects such as > method parameters passed to the remote service. This class overrides the > resolveClass method to use the service bundle's classloader to load classes. > However, it fails to account for transitive references: if a service method > parameter is an object of class A in package 'a' (imported by the service), > but contains a field of class B from package 'b' (imported by class A but not > directly by the service), then a ClassNotFoundException is thrown stating > that the service's classloader can't find class B (which it indeed does not > import). > I think the resolveClass method should not use only the service's top-level > classloader to load all classes, but should also save the bundle classloaders > of the loaded classes it encounters and try using them to load transitive > class references. Perhaps something likeĀ suggested in > [https://stackoverflow.com/a/13876075] (with added validation and error > handling). -- This message was sent by Atlassian Jira (v8.20.10#820010)