저는 약 5 년의 .NET 경험 후에 Java로 돌아가는 개발자입니다. MVC 프레임 워크에 대한 지식을 가지고 있지만 Spring MVC와 스프링 프레임 워크에 전혀 익숙하지 않습니다.Spring의 JmsTemplate을 사용하여 JMS 메시지를 activemq 큐로 보낼 수 없습니다.
activemq JMS 대기열에 엔티티를 저장하려고하는 할당이 있습니다. 좀 더 복잡한 객체를 보내기 전에 간단한 TextMessage로 먼저 사용하기로 결정했습니다. 보기에서 입력 단추 컨트롤에 매핑 된 컨트롤러에서 보내기를 시도 할 때마다 Tomcat에서 java.lang.NullPointerException이 발생합니다. 그게 나보다 많은 정보를 보여주지는 않아. 소스가 ApiMessageSender 클래스의이 코드 줄에 있다는 것을 보여줍니다.
jmsTemplate.send(new MessageCreator(){
@Override
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage(message);
}
});
스프링 웹 MVC 웹 응용 프로그램에서의 구현은 세 가지 클래스로 구성됩니다. 봄 IOC의 배관 공사가 완료 1)
import javax.jms.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Component;
@Component("messageSender")
public class ApiMessageSender {
@Autowired
private JmsTemplate jmsTemplate;
public void sendMessage(final String message){
jmsTemplate.send(new MessageCreator(){
@Override
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage(message);
}
});
}
}
2 ApiMessageSender.java
) WebAppConfig.java. 이 클래스는이 프로젝트에서 전혀 사용되지 않는 ApplicationContext.xml 파일 대신 사용됩니다. 대기열 이름은 응용 프로그램을 실행하기 전에 ActiveMQ 관리 웹 인터페이스에서 수동으로 작성되었습니다.@Bean
public org.apache.activemq.ActiveMQConnectionFactory connectionFactory() {
org.apache.activemq.ActiveMQConnectionFactory connectionFactory = new org.apache.activemq.ActiveMQConnectionFactory();
connectionFactory.setBrokerURL("tcp://localhost:61616");
return connectionFactory;
}
@Bean
public org.springframework.jms.core.JmsTemplate jmsTemplate() {
org.springframework.jms.core.JmsTemplate jmsTemplate = new org.springframework.jms.core.JmsTemplate(connectionFactory());
jmsTemplate.setDefaultDestinationName("apiqueue");
return jmsTemplate;
}
3)
버튼이보기에 클릭 할 때 호출되는 컨트롤러에서이 작업 방법 ApiController.java. 특정 코드 스 니펫을 주석 처리 했으므로 다른 요구 사항을 처리 할 수 있습니다.
@RequestMapping(value="/create", method=RequestMethod.POST)
public ModelAndView createNewApi(@ModelAttribute @Valid Api api,
BindingResult result,
final RedirectAttributes redirectAttributes) {
if (result.hasErrors())
return new ModelAndView("api-new");
ModelAndView mav = new ModelAndView();
String message = "New api "+api.getApiKey()+" was successfully created.";
apiService.create(api);
//Send object to Queue.
/*GenericXmlApplicationContext ctx=new GenericXmlApplicationContext();
ctx.load("classpath:applicationContext.xml");
ctx.refresh();*/
/* ApiMessageSender sender = new ApiMessageSender();
sender.sendMessage("hello jms3");*/
//ctx.close();
//End of messaging task. The message should be successfully in the JMS Queue.
mav.setViewName("redirect:/api/list.html");
redirectAttributes.addFlashAttribute("message", message);
return mav;
}
여기에는 어떤 문제가있을 수 있습니까? 왜 java.lang.NullPointerException이 발생합니까? 이 기능을 어떻게 작동시킬 수 있습니까? 대단히 감사합니다.
예외 스택 추적을 게시하고 해당 줄을 표시하십시오. – Ralph