carbon-governance
carbon-governance copied to clipboard
user defined library: NoClassDefFoundError when using GovernanceUtils
Description:
I am trying to enrich this handler (which protects APIs with Basic
Authentication) with the ability to read credentials from the governance registry. I thus used retrieveGovernanceArtifactByPath
from GovernanceUtils
.
import org.wso2.carbon.governance.api.common.dataobjects.GovernanceArtifact;
import org.wso2.carbon.governance.api.util.GovernanceUtils;
import org.wso2.carbon.registry.core.Registry;
import org.wso2.carbon.registry.core.config.RegistryContext;
import org.wso2.carbon.registry.core.exceptions.RegistryException;
.....
public boolean processSecurity(String credentials) {
String decodedCredentials = new String(new Base64().decode(credentials.getBytes()));
String userName = decodedCredentials.split(":")[0];
String password = decodedCredentials.split(":")[1];
/*here: */
try {
Registry reg = RegistryContext.getBaseInstance().getEmbeddedRegistryService().getConfigSystemRegistry();
GovernanceArtifact userNameFromReg = GovernanceUtils.retrieveGovernanceArtifactByPath(reg, "/_system/governance/users/ei_user");
GovernanceArtifact userPassFromReg = GovernanceUtils.retrieveGovernanceArtifactByPath(reg, "/_system/governance/users/ei_password");
if (userNameFromReg.getAttribute(".").equals(userName) && userPassFromReg.getAttribute(".").equals(password)) {
return true;
} else {
return false;
}
} catch (RegistryException e) {
e.printStackTrace();
return false;
}
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>some_company</groupId>
<artifactId>REST-BasicAuth-Handler</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>REST-basic-auth-handler</name>
<url>http://maven.apache.org</url>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.synapse</groupId>
<artifactId>synapse-core</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.synapse</groupId>
<artifactId>synapse-extensions</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.wso2.carbon.governance</groupId>
<artifactId>org.wso2.carbon.governance.api</artifactId>
<version>4.8.19</version>
</dependency>
<dependency>
<groupId>org.wso2.carbon</groupId>
<artifactId>org.wso2.carbon.registry.core</artifactId>
<version>4.4.26</version>
</dependency>
</dependencies>
</project>
Compilation works OK, the .jar
is loaded from $EI_HOME/lib
but I get the following error:
[2020-10-19 15:56:49,592] [] ERROR - NativeWorkerPool Uncaught exception
java.lang.NoClassDefFoundError: org/wso2/carbon/governance/api/util/GovernanceUtils
at org.vicat.rest.BasicAuthHandler.processSecurity(BasicAuthHandler.java:78)
at org.vicat.rest.BasicAuthHandler.handleRequest(BasicAuthHandler.java:49)
at org.apache.synapse.rest.API.process(API.java:357)
at org.apache.synapse.rest.RESTRequestHandler.apiProcess(RESTRequestHandler.java:135)
at org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:113)
at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:71)
at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:325)
at org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:92)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:338)
at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:159)
at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: org.wso2.carbon.governance.api.util.GovernanceUtils cannot be found by REST_BasicAuth_Handler_1.0_SNAPSHOT_1.0.0
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
I also tried with to package all dependencies in a fat jar using maven-assembly-plugin, made sure that GovernanceUtils
was present in the .jar
: still the very same error.
Suggested Labels: udf,registry,library
Affected Product Version: WSO2-EI 6.5.0