Search code examples
jwtjersey-2.0jjwtglassfish-4.1.1

java.lang.ClassNotFoundException: io.jsonwebtoken.Jwts when using JJWT JSON Web Token


When I am trying to use JJWT from Stormpath, it is throwing a run time Exception java.lang.ClassNotFoundException: io.jsonwebtoken.Jwts. I am using Jersey2 embedded on GlassFish 4.1; here is the code that is throwing the exception:

private String issueToken(String login) {
    Key key = keyGenerator.generateKey();
    //Key key = MacProvider.generateKey();
        String jwtToken = Jwts.builder()
                .setIssuer(uriInfo.getAbsolutePath().toString())
                //.setIssuer("http://trustyapp.com/")
                .setSubject(login)
                .setIssuedAt(new Date())
                .setExpiration(toDate(LocalDateTime.now().plusMinutes(15L)))
                .signWith(SignatureAlgorithm.HS512, key)
                .compact();
        logger.info("#### generating token for a key : " + jwtToken + " - " + key);
        return jwtToken;
}

I have imported io.jsonwebtoken.Jwts and my pom.xml has :

<dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.8.2</version>
        <scope>compile</scope>
    </dependency>

i also tried it without the above dependency in case the below dependency which is on my pom.xml is enough:

<dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt</artifactId>
        <version>0.7.0</version>
        <scope>compile</scope>
    </dependency>

I tried the recommendations from this and this but it did not work, please help


Solution

  • The problem is solved after adding the following dependencies into my pom.xml:

    <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-common</artifactId>
            <version>${version.jersey}</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-jdk-http</artifactId>
            <version>${version.jersey}</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-client</artifactId>
            <version>${version.jersey}</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-server</artifactId>
            <version>${version.jersey}</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet</artifactId>
            <version>${version.jersey}</version>
        </dependency>
    

    I assumed that such dependencies are not required since i am using Jersey 2 which is embedded on the GlassFish4.1.1 Server.