0
votes

I am creating bean class of JavaMailSender and autowired the javamailsender but i getting error

package com.websystique.springsecurity.service;

import java.util.List;

import javax.mail.MessagingException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.MailParseException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.websystique.springsecurity.dao.EmployeeDao;
import com.websystique.springsecurity.model.Employee;

@Service
@Transactional
public class EmployeeServiceImpl implements EmployeeService {

@Autowired
private EmployeeDao employeeDAOImpl;
Employee Employee;
@Autowired
private JavaMailSender mailSender;
@Autowired
private SimpleMailMessage simpleMailMessage;
public void setMailSender(JavaMailSender mailSender) {
    this.mailSender = mailSender;
}
@Transactional
public void addEmployee(Employee employee) {
    employeeDAOImpl.addEmployee(employee);
    StringBuilder subject = new StringBuilder();
    subject.append("User ");
    subject.append(employee.getFirstname());
    subject.append(" ");
    subject.append(employee.getLastname());
    subject.append(" has been added");
    String content = subject.toString()+" Successfully!";
    sendMail("", content,subject.toString(),employee.getEmail(),"D:\\log.pdf");
}

@Transactional
public List<Employee> getAllEmployees() {
    return employeeDAOImpl.getAllEmployees();
}

@Transactional
public void deleteEmployee(Integer employeeId) {
    employeeDAOImpl.deleteEmployee(employeeId);
}
@Transactional
public Employee getEmployee(int empid) {
    return employeeDAOImpl.getEmployee(empid);
}
@Transactional
public Employee updateEmployee(Employee employee) {

    Employee emp = employeeDAOImpl.updateEmployee(employee);
    StringBuilder subject = new StringBuilder();
    subject.append("User ");
    subject.append(emp.getFirstname());
    subject.append(" ");
    subject.append(emp.getLastname());
    subject.append(" has been updated");
    String content = subject.toString()+" Successfully!";
    sendMail("", content,subject.toString(),emp.getEmail(),"D:\\log.pdf");
    return emp;
}
@Transactional
public void setEmployeeDAO(EmployeeDao employeeDAO) {
    this.employeeDAOImpl = employeeDAO;
}
@Transactional
public void sendMail(String dear, String content,String subject,String 
toEmail,String filePath) {
MimeMessage message = mailSender.createMimeMessage();
    try{
        MimeMessageHelper helper = new MimeMessageHelper(message, true);

        helper.setFrom(new InternetAddress("[email protected]"));
        helper.setTo(new InternetAddress(toEmail));
        helper.setSubject(subject);
        helper.setText(content);
        if(filePath!=null){
        FileSystemResource file = new FileSystemResource(filePath);

        helper.addAttachment(file.getFilename(), file);
        }

    }catch (MessagingException e) {
        throw new MailParseException(e);
    }
    mailSender.send(message);


}

 }

I couldn't create the bean class for bean id="mailSender". i am working on it for past two days please get me out of it.

<context:component-scan base-
package="com.websystique.springsecurity.controller" />


<bean 
 class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" 
 value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix" value="/WEB-INF/views/" />
    <property name="suffix" value=".jsp" />
</bean>

<mvc:resources mapping="/static/**" location="/static/" />

<mvc:annotation-driven conversion-service="conversionService"/>

<bean id="conversionService" 
class="org.springframework.format.support.FormattingConversionService
FactoryBean">

    <property name="converters">
        <list>
            <bean id="roleToUserProfile" 
class="com.websystique.springsecurity.util.RoleToUserProfileConverter" />
        </list>
    </property>
</bean>
     <bean id="mailSender" 
class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="host" value="smtp.gmail.com" />
    <property name="port" value="587" />
    <property name="username" value="[email protected]" />
    <property name="password" value="Saran2595" />

    <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>
        </props>
    </property>

</bean>
<!--
<bean id="mailMail" class="com.mkyong.common.MailMail">
    <property name="mailSender" ref="mailSender" />
    <property name="simpleMailMessage" ref="customeMailMessage" />
</bean>

<bean id="customeMailMessage"
    class="org.springframework.mail.SimpleMailMessage">

    <property name="from" value="[email protected]" />
    <property name="subject" value="Customer Report" />
    <property name="text">
    <value>
        <![CDATA[
            Dear %s,
            Mail Content : %s
        ]]>
    </value>
</property>
</bean> -->

</beans>

And error page

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'employeeController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.websystique.springsecurity.service.EmployeeService com.websystique.springsecurity.controller.EmployeeController.employeeServiceImpl; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'employeeServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.mail.javamail.JavaMailSender com.websystique.springsecurity.service.EmployeeServiceImpl.mailSender; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.mail.javamail.JavaMailSender] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:305) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:834) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537) at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:446) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:328) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4853) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5314) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)

2
Your mail sender is created by the DispatcherServlet NOT the ContextLoaderListener. A DispatcherServlet can access beans from the ContextLoaderLIstener but not the other way around. Place it in the correct xml file.M. Deinum
Thanks for your help but i didn't know which xml file is correct. The project contains ApplicationContext.xml , spring-database.xml ,dispactherservlets.xml and spring-sercurity.xml. which xml is correct xml filesaravana
i'm new to spring so didn't know how to create marshaller xml so,please suggest some example for creating bean classsaravana
Do wrong comment for wrong question. You have 2 application contexts, the root context with ContextLoaderListener and child DispatcherServlet. Everything global available should go in the root context in one of the xml files that is loaded by the ContextLoaderLIstener.M. Deinum
where is the contextLoaderListener in my project?saravana

2 Answers

0
votes

your component scan includes only com.websystique.springsecurity.controller. So it will not be able to scan other packages to inject the dependencies. enable the component scan on top package(com.websystique.springsecurity) and override bean definations (if required) in xml file.

0
votes

Try this in your xml and if it works revert back