Получение исключения нулевого указателя при отправке электронной почты с использованием Spring Mail - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь использовать функцию электронной почты (в целях обучения) с помощью Spring.Вот фрагменты кода:

@Autowired
static
ApplicationContext applicationContext;
/**
 * <p>
 * Utility classes, which are collections of static members, are not meant to be
 * instantiated. Even abstract utility classes, which can be extended, should
 * not have public constructors.
 * 
 * Java adds an implicit public constructor to every class which does not define
 * at least one explicitly. Hence, at least one non-public constructor should be
 * defined.
 * 
 * </p>
 */
private EmailUtility() {
}

//@Autowired
//private static JavaMailSender mailSender;

public static void sendSimpleMessage(String to, String subject, String text, boolean trainTicket,
        boolean flightTicket) throws MessagingException {



    JavaMailSender mailSender = applicationContext.getBean("mailSender",JavaMailSenderImpl.class);
    MimeMessage message = mailSender.createMimeMessage();
    String pathToAttachment = "";
    MimeMessageHelper helper = new MimeMessageHelper(message, true);

    helper.setTo(to);
    helper.setSubject(subject);
    helper.setText(text);

    if (trainTicket && !flightTicket) {
        pathToAttachment = AppConstants.TRAIN_TICKET_FILE;
    } else if (!trainTicket && flightTicket) {
        pathToAttachment = AppConstants.FLIGHT_TICKET_FILE;
    }

    if (Objects.nonNull(pathToAttachment) && !pathToAttachment.isEmpty()) {
        FileSystemResource file = new FileSystemResource(new File(pathToAttachment));
        helper.addAttachment("Ticket", file);
    }

    mailSender.send(message);
}

}

Контекст моего приложения:

<!-- Step 3: Add support for component scanning -->
<context:component-scan base-package="com.patcyy.vamonos" />

<!-- Step 4: Add support for conversion, formatting and validation support -->
<mvc:annotation-driven/>

 <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="host" value="abcd.abcd.com"/>
    <property name="port" value="2525"/>
    <property name="username" value="admin@abcd.com"/>
    <property name="password" value="test"/>
    <property name="javaMailProperties">
        <props>
            <prop key="mail.transport.protocol">smtp</prop>
            <prop key="mail.smtp.auth">true</prop>
            <prop key="mail.smtp.starttls.enable">true</prop>
            <prop key="mail.debug">true</prop>
        </props>
    </property>
</bean>

Я получаю исключение нулевого указателя при инициализации JavaMailSender.(В этой строке JavaMailSender mailSender = applicationContext.getBean ("mailSender", JavaMailSenderImpl.class);)

StackTrace:

java.lang.NullPointerException в com.patcyy.vamonos.utills.EmailUtilityсrefle.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) в sun.reflect.DelegatingMethodAccessorImpl.in.kej.hofMethod.java:498) в org.springframework.web.method.support.InvocableHandlerMethod.doInvoke (InvocableHandlerMethod.java:209) в org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest (InvocableHandlerMethod.java:136) в org.springframe.HandMableHhodholetHervHerWholetHervServHortJava: 102) в org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod (RequestMappingHandlerAdapter.java:891) в org.springframework.web.servlet.mv.andapHandleJava: 797) в org.springframework.web.servlet.mvc.method..web.servlet.DispatcherServlet..web.servlet.FrameworkServlet.doPost (FrameworkServlet.java:877) в javax.servlet.http.HttpServlet.service (HttpServlet.java:660) в org.springframework.web.servlet.FrameworkSerjletServservice.ApplicationFilterChain.java:166) в org.apache.tomcat.websocket.server.WsFilter.doFilter (WsFilter.java:53) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChaap.g): org.catalina.core.: 96) в org.apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:490) в org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:139) в org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:92) в org.apache.catValal.veve.invoke (AbstractAccessLogValve.java:668) в org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:74) в org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:34).apache.coyote.http11.Http11Processor.service (Http11Processor.java:408) в org.apache.coyote.AbstractProcessorLight.process (AbstractProcessorLight.java:66) в org.apache.coyote.AbstractProtocol $ ConnectionHandler.cess $:770)в org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun (NioEndpoint.java:1415) в org.apache.tomcat.util.net.SocketProcessorBase.run (SocketProcessorBase.java:49) в java.util.concurrent.ThreadPoolExecutor.: 61) at java.lang.Thread.run (Thread.java:748)

1 Ответ

0 голосов
/ 07 октября 2018

Я думаю, что основная проблема в том, что вы определяете как утилиту что-то, что является сервисом.В любом случае, если вы хотите использовать управляемый bean-компонент Spring в неуправляемом объекте, вы можете сделать что-то вроде этого

@Component public class ContextInitializer {

@Autowired
private JavaMailSender mailSender;

@PostConstruct
public void postConstruct() {
    EmailUtility.setMailSender(mailSender);
}

}

и добавить метод установки в классе EmailUtility.

...