简体   繁体   English

Sendgrid 中的 NoClassDefFoundError

[英]NoClassDefFoundError in Sendgrid

I am using https://github.com/sendgrid/sendgrid-java in my app.我在我的应用程序中使用https://github.com/sendgrid/sendgrid-java This is my code这是我的代码

SendGrid sendgrid = new SendGrid("username", "password");
SendGrid.Email email = new SendGrid.Email();
email.addTo("user@domain.com");
email.setFrom("another@domain.com");
email.setSubject("Hello World");
email.setText("My first email with SendGrid Java!");

try {
  SendGrid.Response response = sendgrid.send(email);
  System.out.println(response.getMessage());
}
catch (SendGridException e) {
  System.err.println(e);
}

This is my maven code这是我的 Maven 代码

<dependency>
<groupId>com.sendgrid</groupId>
<artifactId>sendgrid-java</artifactId>
<version>2.2.0</version>
</dependency>

While running this code I get the following error.运行此代码时,我收到以下错误。

java.lang.reflect.InvocationTargetException
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:497)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:270)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:498)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:434)

Root cause根本原因

java.lang.NoClassDefFoundError: org/apache/http/impl/client/HttpClientBuilder
com.sendgrid.SendGrid.<init>(SendGrid.java:67)

I am new to java, I dont know what this means.我是java新手,我不知道这是什么意思。 Thanks in advance.提前致谢。

There is a problem in maven dependency for sendgrid. sendgrid 的 maven 依赖存在问题。 So I just copied the class from the https://github.com/sendgrid/sendgrid-java to my app.所以我只是将类从https://github.com/sendgrid/sendgrid-java复制到我的应用程序中。 There was only two class in it.里面只有两个班。 Also I copied the dependency from the sendgrid-java and added to my app.我还从 sendgrid-java 复制了依赖项并添加到我的应用程序中。 It worked.有效。

I recommend doing a mvn dependency:tree and scanning your tree for the following class: org.apache.http.impl.client.HttpClientBuilder我建议做一个 mvn dependency:tree 并扫描你的树以查找以下类:org.apache.http.impl.client.HttpClientBuilder

I am migrating from Mandrill to SendGrid and the reason is that my mandril dependency was 'higher' in the list than my sendgrid-java dependency, and Mandrill used a version 4.2 of the httpclient artifact.我正在从 Mandrill 迁移到 SendGrid,原因是我的 mandril 依赖项在列表中比我的 sendgrid-java 依赖项“更高”,并且 Mandrill 使用了 4.2 版的 httpclient 工件。

My fix was to add an exclusion to remove that artifact from Mandrill我的解决方法是添加一个排除项以从 Mandrill 中删除该工件

    <dependency>
        <groupId>com.mandrillapp.wrapper.lutung</groupId>
        <artifactId>lutung</artifactId>
        <version>0.0.4</version>
        <exclusions>
            <exclusion>
                <artifactId>httpclient</artifactId>
                <groupId>org.apache.httpcomponents</groupId>
            </exclusion>
        </exclusions>
    </dependency>

Obviously for you it might be different, but I'm willing to bet you're dependency is bringing in an older version f the http client.显然,对您来说可能会有所不同,但我敢打赌,您的依赖是为 http 客户端引入了旧版本。

    <dependency>
        <groupId>com.sendgrid</groupId>
        <artifactId>sendgrid-java</artifactId>
        <version>4.0.1</version>
    </dependency>

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

I have solved.我已经解决了。 I have moved the maven dependency from a service/pom.xml to the parent module pom.xml我已将 maven 依赖项从 service/pom.xml 移动到父模块 pom.xml

mvn dependency:tree to see the dependency in each module mvn dependency:tree 查看每个模块中的依赖关系

only using the followinng dependency仅使用以下依赖项

<dependency>
    <groupId>com.sendgrid</groupId>
    <artifactId>sendgrid-java</artifactId>
    <version>4.0.1</version>
</dependency>
    public async Task<bool> CreateMailItem(string email, string name, string subject, string body)
    {
        string SendGridEmail = _configuration.GetSection("EmailSendGrid:Email").Value;
        string APIKey = _configuration.GetSection("EmailSendGrid:Key").Value;
        
        SendGridClient client = new SendGridClient(APIKey);
        EmailAddress from = new EmailAddress(SendGridEmail, "Teste de Envio");            
        EmailAddress to = new EmailAddress(email, name);
        SendGridMessage msg = MailHelper.CreateSingleEmail(from, to, subject, "", body);
        var response = await client.SendEmailAsync(msg);

        return response.IsSuccessStatusCode;
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM