Use class' class loader when looking up CDP implementations. #10509
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Motivation and Context
Prior to this change,
CdpVersionFinder
was usingServiceLoader.load
without passing in a class loader explicitly to find CDP implementations. In this case,ServiceLoader
is using the current thread's default class loader to resolve the specified class name's service.In projects with a plugin system, this can lead to problems, when selenium dependencies are part of a jar file that is not on the class path the application was started with. For these projects, using selenium results in a
ClassNotFoundException
when connecting to a remote webdriver.To fix this, using the class loader of the class itself would be beneficial. In projects without a plugin architecture, it will mostly be
identical with the class loader of the current thread, in other cases there is a very high chance that the service which is to be loaded can be resolved through the class loader of
CdpVersionFinder
.Types of changes
Checklist