복붙노트

[SPRING] 속도 널 포인트 예외

SPRING

속도 널 포인트 예외

속도 템플릿을 사용하여 메일을 보내고 싶습니다.

내 설정은 Spring 3.1 문서를 기반으로한다.

구성이있는 xml 파일이 있습니다.

<?xml version="1.0" encoding="UTF-8"?>

http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">

<bean id="sendMail" class="com.myclass.app.SendMail">
    <property name="mailSender" ref="mailSender"/>
    <property name="velocityEngine" ref="velocityEngine"/>
</bean>

<bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
    <property name="velocityProperties">
        <value>
            resource.loader=class
            class.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
        </value>
    </property>
</bean>

그런 다음 수업이 있습니다.

@Controller
public class SendMail{


    private static final Logger logger = Logger.getLogger(SendMail.class);

    private JavaMailSender mailSender;
    private VelocityEngine velocityEngine;

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

    public void setVelocityEngine(VelocityEngine velocityEngine) {
        this.velocityEngine = velocityEngine;
    }


    @RequestMapping(value = "/sendEmail", method = RequestMethod.GET)
    public @ResponseBody void send(){

        sentEmail();

    }

    private void sentEmail(){

        try {


//            SimpleMailMessage msg = new SimpleMailMessage(mailMessage);

            MimeMessage message = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message,
                    true, "UTF-8");
            helper.setFrom("from@from.com");
            helper.setTo("myEmail");

            helper.setSubject("title");

            Map map = new HashMap();
            map.put("user", "Piotr");
            map.put("test", "TEST");

            String text1 = VelocityEngineUtils.mergeTemplateIntoString(
                    velocityEngine, "velocity.vm", map );

            logger.info(text1);

            String text = "test";

                helper.setText(text, true);


            mailSender.send(message);

        } catch (Exception ex) {
            System.out.println(ex.getStackTrace());
            System.out.println(ex.getMessage());
        }


    }

}

내 VM 파일은 "resources"폴더에 있습니다.

그리고 나는 모두 ID "Null Point Exception"을 받는다;

응답은 아무것도 더주지 않는다.

어떤 아이디어가 있고, 무엇을해야합니까?

해결법

  1. ==============================

    1.템플릿은 리소스에있을 수 없으며 velocityEngine에서 구성 할 수있는 클래스 경로에 있어야합니다. applicationContext.xml에서

    템플릿은 리소스에있을 수 없으며 velocityEngine에서 구성 할 수있는 클래스 경로에 있어야합니다. applicationContext.xml에서

    <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
      <property name="host" value="ADDRESS_OF_YOUR_SMTP_SERVER"/>
      <property name="defaultEncoding" value="UTF-8"/>
      <property name="port" value="XX_PORT_SERVER"/>
      <property name="javaMailProperties">  
          <props>
            <prop key="mail.smtps.auth">false</prop> <!-- depending on your smtp server -->
            <prop key="mail.smtp.starttls.enable">false</prop>
          </props>
      </property>
    </bean>
    
    <bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean" p:resourceLoaderPath="classpath:META-INF/velocity" />
    

    위 예제의 속성을 사용하려면 네임 스페이스 xmlns : p = "http://www.springframework.org/schema/p"를 잊지 마십시오.

    Java 클래스 SendMail에서 @Autowired 주석을 추가하는 것을 잊지 마십시오.

    @Autowired
    public void setMailSender(JavaMailSender mailSender) {
        this.mailSender = mailSender;
    }
    
    @Autowired
    public void setVelocityEngine(VelocityEngine velocityEngine) {
        this.velocityEngine = velocityEngine;
    }
    

    마지막으로 이메일을 보내려면 MimeMessagePreparator를 사용하십시오.

                MimeMessagePreparator preparator = new MimeMessagePreparator() {
                @Override
                public void prepare(MimeMessage mimeMessage) throws Exception {
                   MimeMessageHelper message = new MimeMessageHelper(mimeMessage);
                   message.setTo("blabla@test.com");
                   message.setSubject("Email test");
    
                   String text = VelocityEngineUtils.mergeTemplateIntoString(
                       velocityEngine, template, keywords);
                   message.setText(text, true);
    
                 }
              };
    
              //Send email using the autowired mailSender
              this.mailSender.send(preparator);
    
  2. from https://stackoverflow.com/questions/14522321/velocity-null-point-exception by cc-by-sa and MIT license