Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

user defined library: NoClassDefFoundError when using GovernanceUtils #344

Open
zar3bski opened this issue Oct 19, 2020 · 0 comments
Open

Comments

@zar3bski
Copy link

zar3bski commented Oct 19, 2020

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant