私は、約 5 年間の .NET 経験の後、Java に戻る開発者です。MVC フレームワークの知識はありますが、Spring MVC と Spring フレームワークについてはまったくの初心者です。
activemq JMS キューにエンティティを保存する予定の割り当てがあります。より複雑なオブジェクトを送信する前に、まず単純な TextMessage で試してみることにしました。ビューの入力ボタン コントロールにマップされたコントローラーから送信を試みるたびに、Tomcat で java.lang.NullPointerException が発生します。それ以外の情報はあまり表示されません。ソースが ApiMessageSender クラスのこのコード行からのものであることを示しているだけです。
jmsTemplate.send(new MessageCreator(){
@Override
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage(message);
}
});
Spring Web mvc Web アプリケーション内の実装は、3 つのクラスで構成されています。1) ApiMessageSender.java
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) Spring IoC 配管が行われる WebAppConfig.java。このクラスは、このプロジェクトではまったく使用されない ApplicationContext.xml ファイルの代わりになります。キュー名は、アプリケーションを実行する前に、ActiveMQ 管理 Web インターフェイスから手動で作成されました。
@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 が発生するのはなぜですか? どうすればこれを機能させることができますか? どうもありがとうございました。