2013-04-29 3 views
0

Я пытаюсь реализовать свое приложение, так что, когда пользователь нажимает кнопку отправки, электронное письмо генерируется автоматически и отправляется другому получателю. Я исследую это в документах Spring и нашел способ попробовать. Но до сих пор исключение продолжает придумывать:Spring Java Email exception

ERROR: org.springframework.web.context.ContextLoader - Context initialization failed 
    java.lang.NoClassDefFoundError: org/springframework/mail/MailException 
at java.lang.Class.getDeclaredConstructors0(Native Method) 
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2404) 
at java.lang.Class.getDeclaredConstructors(Class.java:1853) 
at 
    org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor. 

determine CandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:230) 
at 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory. 
determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:976) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:949) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:490) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:607) 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) 
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:383) 
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283)at 
                         org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112) 
at 
    org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4797) 
at 
    org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5291) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) 
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) 
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633) 
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:657) 
at 

    org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1637) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 
at java.util.concurrent.FutureTask.run(FutureTask.java:166) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
at java.lang.Thread.run(Thread.java:722) 


    Caused by: java.lang.ClassNotFoundException: org.springframework.mail.MailException 
at 

    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714) 
at 

    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559) 
... 32 more 

Для реализации я изменил пример на пружинном сайте и добавить его в мой метод конструктора для отправки формы:

public class ModuleController { 

private MailSender mailSender; 
    private SimpleMailMessage templateMessage; 

    public void setMailSender(MailSender mailSender) { 
    this.mailSender = mailSender; 
    } 

    public void setTemplateMessage(SimpleMailMessage templateMessage) { 
    this.templateMessage = templateMessage; 
    } 

    @RequestMapping(value = "/module", method = RequestMethod.POST, params = "send") 
public String sendModule(@ModelAttribute("module") Module module,BindingResult 
    result, ModelMap map) { 
SimpleMailMessage msg = new SimpleMailMessage(this.templateMessage); 

    msg.setTo(module.getSta().getEmail()); 

    msg.setText(
    "Dear " + module.getSta().getName() 
     + "a coursework has been submitted for checking" 
     + module.getModuleCode() 
     +module.getModuleName()); 
    try{ 
    this.mailSender.send(msg); 
    } 
    catch(MailException ex) { 
    // simply log it and go on... 
    System.err.println(ex.getMessage()); 

} 
return "/staff/checker/view_submission"; 
} 

В сервлета проекта Я добавил это:

 <beans:bean id="mailSender" 
    class="org.springframework.mail.javamail.JavaMailSenderImpl"> 
    <beans:property name="host" value="mail.mycompany.com"/> 
</beans:bean> 

<!-- this is a template message that we can pre-load with default state --> 
<beans:bean id="templateMessage" 
    class="org.springframework.mail.SimpleMailMessage"> 
    <beans:property name="from" value="[email protected]"/> 
    <beans:property name="subject" value="Your order"/> 
</beans:bean> 

<beans:bean id="moduleController" 
    class="com.**.**.controller.ModuleController"> 
    <beans:property name="mailSender" ref="mailSender"/> 
    <beans:property name="templateMessage" ref="templateMessage"/> 
</beans:bean> 

Я также добавил две банки, JavaMail mail.jar и JAF activation.jar к классам. Если эта реализация неверна и причина исключения, пожалуйста, дайте мне знать.

+1

Похоже, что вам не хватает зависимости JAR. Выясните, какой JAR org.springframework.mail.MailException включен, и убедитесь, что он либо находится в папке lib вашей WAR, либо каким-либо образом предоставлен вашим сервером приложений. – CodeChimp

+0

Спасибо. Я добавил два баночки в мою папку проекта lib и обновил проект, после чего перезапустил сервер, и исключение исчезло. – user2259555

ответ

3

Вам необходимо убедиться, что в вашем пути к классам имеется панель поддержки Spring-context-support.

+0

Да, спасибо, я также добавил, что банку. – user2259555