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

java.lang.ClassNotFoundException: com.sendgrid.helpers.mail.objects.Email #652

Open
belezi opened this issue Oct 20, 2020 · 11 comments
Open
Labels
status: help wanted requesting help from the community type: bug bug in the library

Comments

@belezi
Copy link

belezi commented Oct 20, 2020

Issue Summary

On run time I always get classNotFoundException basically on every class from com.sendgrid package. Has anyone else run into this that could shed some light as to why this is happening? I am on the latest version 4.6.7

Any help is appreciated. TY

Code Snippet

import com...Notification;
import com...NotificationSendException;
import com...EmailNotificationClientInterface;
import com...NotificationResponse;
import com.sendgrid.Method;
import com.sendgrid.Request;
import com.sendgrid.Response;
import com.sendgrid.SendGrid;
import com.sendgrid.helpers.mail.Mail;
import com.sendgrid.helpers.mail.objects.Content;
import com.sendgrid.helpers.mail.objects.Email;

import java.io.IOException;

public class SendGridEmailNotificationService implements EmailNotificationClientInterface {

	@Override
	public NotificationResponse sendEmailNotification(Notification notification) throws NotificationSendException, IOException {
		Content content = new Content("text/plain", "and easy to do anywhere, even with Java");
		Email from = new Email("[email protected]");
		String subject = "Sending with SendGrid is Fun";
		Email to = new Email("[email protected]");
		Mail mail = new Mail(from, subject, to, content);
		SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY"));
		Request request = new Request();

		Response response = new Response();

		try {
			request.setMethod(Method.POST);
			request.setEndpoint("mail/send");
			request.setBody(mail.build());
			response = sg.api(request);
			if (response.getStatusCode() == 200) {

			}
			System.out.println(response.getStatusCode());
			System.out.println(response.getBody());
			System.out.println(response.getHeaders());
		} catch (IOException ex) {
			throw ex;
		}
		return this.processResponse(notification, response);
	}

	private NotificationResponse processResponse(Notification notification, Response response){
		NotificationResponse notificationResponse = new NotificationResponse();
		notificationResponse.setErred(notification.getErredNotification());
		notificationResponse.setSent(!notification.getErredNotification());
		return notificationResponse;
	}
}

pom.xml file

Code Snippet

<dependency>
			<groupId>com.sendgrid</groupId>
			<artifactId>java-http-client</artifactId>
			<version>4.3.6</version>
		</dependency>
		<dependency>
			<groupId>com.sendgrid</groupId>
			<artifactId>sendgrid-java</artifactId>
			<version>4.6.7</version>
		</dependency>

Exception/Log

ERROR [2020-10-20 20:35:24,287] io.dropwizard.jersey.errors.LoggingExceptionMapper: Error handling a request: 98ade0ddcde6ee9c
! java.lang.ClassNotFoundException: com.sendgrid.helpers.mail.objects.Content
! at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
! at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
! at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
! ... 64 common frames omitted
! Causing: java.lang.NoClassDefFoundError: com/sendgrid/helpers/mail/objects/Content

Technical details:

  • sendgrid-java version: 4.6.7
  • java version:
@thinkingserious
Copy link
Contributor

Thank you for reporting this @belezi!

I was able to recreate in the following manner:

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false

Added the dependencies to pom.xml:

    <dependency>
      <groupId>com.sendgrid</groupId>
      <artifactId>java-http-client</artifactId>
      <version>4.3.6</version>
    </dependency>
    <dependency>
      <groupId>com.sendgrid</groupId>
      <artifactId>sendgrid-java</artifactId>
      <version>4.6.7</version>
    </dependency>

Added the following code to App.java:

package com.mycompany.app;

import com.sendgrid.SendGrid;
import com.sendgrid.helpers.mail.Mail;
import com.sendgrid.helpers.mail.objects.Email;
import com.sendgrid.helpers.mail.objects.Content;
import com.sendgrid.Request;
import com.sendgrid.Response;
import com.sendgrid.Method;
import java.io.IOException;

/**
 * Hello world!
 *
 */
public class App
{
    public static void main( String[] args ) throws IOException {
        Email from = new Email("[email protected]");
        String subject = "Sending with Twilio SendGrid is Fun";
        Email to = new Email("[email protected]");
        Content content = new Content("text/plain", "and easy to do anywhere, even with Java");
        Mail mail = new Mail(from, subject, to, content);

        SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY"));
        Request request = new Request();
        try {
            request.setMethod(Method.POST);
            request.setEndpoint("mail/send");
            request.setBody(mail.build());
            Response response = sg.api(request);
            System.out.println(response.getStatusCode());
            System.out.println(response.getBody());
            System.out.println(response.getHeaders());
        } catch (IOException ex) {
            throw ex;
        }
    }
}
cd my-app
mvn package
java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App

This issue has been added to our internal backlog to be prioritized. Pull requests and +1s on the issue summary will help it move up the backlog.

@thinkingserious thinkingserious added status: help wanted requesting help from the community type: bug bug in the library labels Oct 21, 2020
@DianeBustamante
Copy link

I am having the exact same issue. This needs to be resolved ASAP in order to comply with SendGrid migrating away from username/password to API Keys.

@DianeBustamante
Copy link

NOTE: I was able to get this to work by updating the <build> section of my pom.xml file. I started with a pom file from a simple archetype. I updated it with the following <build> section:

   <build>
        <plugins>
            <plugin>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.4.1</version>
                <configuration>
                    <createDependencyReducedPom>true</createDependencyReducedPom>
                    <transformers>
                        <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                        <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                            <mainClass>com.sgtest.SendGridTest2.App</mainClass>
                        </transformer>
                    </transformers>
                    <!-- exclude signed Manifests -->
                    <filters>
                        <filter>
                            <artifact>*:*</artifact>
                            <excludes>
                                <exclude>META-INF/*.SF</exclude>
                                <exclude>META-INF/*.DSA</exclude>
                                <exclude>META-INF/*.RSA</exclude>
                            </excludes>
                        </filter>
                    </filters>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>com.sgtest.SendGridTest2.App</mainClass>
                        </manifest>
						<manifestEntries>
							<Class-Path>./public/</Class-Path>
						</manifestEntries>                       
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

@zionc44
Copy link

zionc44 commented Nov 20, 2020

I am having the exact same issue but I am not using maven, I was just downloading the JAR file and on run time I always get classNotFoundException basically on every class from com.sendgrid package.

Is there any solution for me?

@DianeBustamante
Copy link

I was able to get this example to work without maven by including two libraries: sendgrid-java-4.6.7.jar and java-http-client-latest.jar. I believe I downloaded the sendgrid-java-4.6.7.jar from the Maven repository. A link to java-http-client-latest.jar can be found at https://github.com/sendgrid/sendgrid-java. I believe you also need to include three jackson libraries: jackson-annotation-2.9.0.jar, jackson-core-2.9.2.jar and jackson-databind-2.9.2.jar. I hope this helps.

@zionc44
Copy link

zionc44 commented Nov 21, 2020

I was able to get this example to work without maven by including two libraries: sendgrid-java-4.6.7.jar and java-http-client-latest.jar. I believe I downloaded the sendgrid-java-4.6.7.jar from the Maven repository. A link to java-http-client-latest.jar can be found at https://github.com/sendgrid/sendgrid-java. I believe you also need to include three jackson libraries: jackson-annotation-2.9.0.jar, jackson-core-2.9.2.jar and jackson-databind-2.9.2.jar. I hope this helps.

Thanks, I have download sendgrid-java-4.6.7.jar and all the dependencies JAR base on the docs at maven repository at the https://mvnrepository.com/artifact/com.sendgrid/sendgrid-java/4.6.7 but still getting the same runtime classNotFoundException for any class from com.sendgrid.

any other idea?

@DianeBustamante
Copy link

I did not use the java-http-client library from the maven repository. As I stated above, I went to https://github.com/sendgrid/sendgrid-java and followed the java-http-client link on that page. It led me to the jar named java-http-client-latest.jar. Try that.

@zionc44
Copy link

zionc44 commented Nov 21, 2020

I did not use the java-http-client library from the maven repository. As I stated above, I went to https://github.com/sendgrid/sendgrid-java and followed the java-http-client link on that page. It led me to the jar named java-http-client-latest.jar. Try that.

thanks again, I have tried but still i am keeping getting the Class Not Found Exception.

@DianeBustamante
Copy link

I don't know what else to tell you. I am using java 1.8, specifically jre.1.8.0_271. Don't know if that could impact your build.

@priyav26
Copy link

Any solution for this?
I am facing the same problem. I tried to execute it through eclipse ide (Gradle). I get the below exception

Exception in thread "main" java.lang.NoClassDefFoundError: com/sendgrid/Email
at SendGridEmailer.main(SendGridEmailer.java:10)
Caused by: java.lang.ClassNotFoundException: com.sendgrid.Email
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:606)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
... 1 more

@kamalbahadur
Copy link

I had the same issue. For me, the problem was that maven was pulling older version of sendgrid-java even though 4.7.2 was the transitive dependency. So the fix was to add the dependency 4.7.2 directly in pom.xml and not depend on transitive dependency.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
status: help wanted requesting help from the community type: bug bug in the library
Projects
None yet
Development

No branches or pull requests

6 participants