diff --git a/antchain-bridge-bcdns/pom.xml b/antchain-bridge-bcdns/pom.xml index a1ae4899..a147b311 100644 --- a/antchain-bridge-bcdns/pom.xml +++ b/antchain-bridge-bcdns/pom.xml @@ -6,7 +6,7 @@ com.alipay.antchain.bridge antchain-bridge-bcdns - 0.2.3 + 0.2.2 8 diff --git a/antchain-bridge-commons/pom.xml b/antchain-bridge-commons/pom.xml index aca9ebd1..32af3ccb 100644 --- a/antchain-bridge-commons/pom.xml +++ b/antchain-bridge-commons/pom.xml @@ -6,7 +6,7 @@ com.alipay.antchain.bridge antchain-bridge-commons - 0.2.3 + 0.2.2 8 diff --git a/antchain-bridge-plugin-lib/pom.xml b/antchain-bridge-plugin-lib/pom.xml index ded39613..a70d8873 100644 --- a/antchain-bridge-plugin-lib/pom.xml +++ b/antchain-bridge-plugin-lib/pom.xml @@ -6,7 +6,7 @@ com.alipay.antchain.bridge antchain-bridge-plugin-lib - 0.2.3 + 0.2.2 8 diff --git a/antchain-bridge-plugin-manager/pom.xml b/antchain-bridge-plugin-manager/pom.xml index 4c0f9b0a..aa502c5c 100644 --- a/antchain-bridge-plugin-manager/pom.xml +++ b/antchain-bridge-plugin-manager/pom.xml @@ -6,7 +6,7 @@ com.alipay.antchain.bridge antchain-bridge-plugin-manager - 0.2.3 + 0.2.2 8 diff --git a/antchain-bridge-plugin-manager/src/main/java/com/alipay/antchain/bridge/plugins/manager/pf4j/PrefixBannedPluginClassloader.java b/antchain-bridge-plugin-manager/src/main/java/com/alipay/antchain/bridge/plugins/manager/pf4j/PrefixBannedPluginClassloader.java index 6f72c953..a74c1818 100644 --- a/antchain-bridge-plugin-manager/src/main/java/com/alipay/antchain/bridge/plugins/manager/pf4j/PrefixBannedPluginClassloader.java +++ b/antchain-bridge-plugin-manager/src/main/java/com/alipay/antchain/bridge/plugins/manager/pf4j/PrefixBannedPluginClassloader.java @@ -25,13 +25,21 @@ import org.pf4j.PluginClassLoader; import org.pf4j.PluginDescriptor; import org.pf4j.PluginManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class PrefixBannedPluginClassloader extends PluginClassLoader { + private static final Logger log = LoggerFactory.getLogger(PrefixBannedPluginClassloader.class); + private static final String JAVA_PACKAGE_PREFIX = "java."; private static final String PLUGIN_PACKAGE_PREFIX = "org.pf4j."; + private static final String ACB_SPI_PACKAGE_PREFIX = "com.alipay.antchain.bridge.plugins.spi"; + + private static final String ACB_COMMONS_PACKAGE_PREFIX = "com.alipay.antchain.bridge.plugins.commons"; + /** * Banned the dependency with the prefix path to read the resource */ @@ -134,4 +142,61 @@ public Enumeration getResources(String name) throws IOException { return Collections.enumeration(resources); } + + @Override + public Class loadClass(String className) throws ClassNotFoundException { + synchronized (getClassLoadingLock(className)) { + // first check whether it's a system class, delegate to the system loader + if (className.startsWith(JAVA_PACKAGE_PREFIX)) { + return findSystemClass(className); + } + + // if the class is part of the plugin engine use parent class loader + if ( + (className.startsWith(PLUGIN_PACKAGE_PREFIX) && !className.startsWith("org.pf4j.demo") && !className.startsWith("org.pf4j.test")) || + className.startsWith(ACB_SPI_PACKAGE_PREFIX) || + className.startsWith(ACB_COMMONS_PACKAGE_PREFIX) || + className.startsWith("org.slf4j.") + ) { +// log.trace("Delegate the loading of PF4J class '{}' to parent", className); + return getParent().loadClass(className); + } + + log.trace("Received request to load class '{}'", className); + + // second check whether it's already been loaded + Class loadedClass = findLoadedClass(className); + if (loadedClass != null) { + log.trace("Found loaded class '{}'", className); + return loadedClass; + } + + for (ClassLoadingStrategy.Source classLoadingSource : classLoadingStrategy.getSources()) { + Class c = null; + try { + switch (classLoadingSource) { + case APPLICATION: + c = super.loadClass(className); + break; + case PLUGIN: + c = findClass(className); + break; + case DEPENDENCIES: + c = loadClassFromDependencies(className); + break; + } + } catch (ClassNotFoundException ignored) { + } + + if (c != null) { + log.trace("Found class '{}' in {} classpath", className, classLoadingSource); + return c; + } else { + log.trace("Couldn't find class '{}' in {} classpath", className, classLoadingSource); + } + } + + throw new ClassNotFoundException(className); + } + } } diff --git a/antchain-bridge-spi/pom.xml b/antchain-bridge-spi/pom.xml index 58902832..49e0cb01 100644 --- a/antchain-bridge-spi/pom.xml +++ b/antchain-bridge-spi/pom.xml @@ -6,7 +6,7 @@ com.alipay.antchain.bridge antchain-bridge-spi - 0.2.3 + 0.2.2 8 diff --git a/pom.xml b/pom.xml index 86a8a5c4..a0d998e8 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ pom com.alipay.antchain.bridge antchain-bridge-sdk - 0.2.3 + 0.2.2 antchain-bridge-commons