Pessoal,
Estou com um problema para terminar uma aplicação jms aqui. Seguinte, tenho Broker conectado, tudo direitinho, só que quando a mensagem é enviada a aplicação captura mas não estou sabendo como tratar essa mensagem que chega da fila.Alguém pode me ajudar?
Cara eu tenho isso feito,só n ta nessa maquina q estou no momento.
Posta ai teu codigo pra eu ver se lembro como fiz.
oi raf4ever,
cara … vou postar o código mas acho que o meu problema é que não estou sabendo como enviar ou receber um arquivo xml, que é o que realmente eu preciso.
se puder me ajudar , agradeço…já n sei mais como resolver isso.
Esse é meu listerner:
public Listener() throws Exception {
BasicConfigurator.configure();
applicationContext = new ClassPathXmlApplicationContext(
"/applicationContext.xml");
configuracaoDao = (ConfiguracaoDao) applicationContext
.getBean("configuracaoDao");
configuracao = configuracaoDao.getConfiguracao();
// configuracao webShere MQ
MQConnectionFactory factory;
factory = new MQConnectionFactory();
factory.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP);
factory.setQueueManager(configuracao.getGerenciadorFila());
factory.setHostName(configuracao.getIp().toString());
factory.setPort(configuracao.getPorta());
factory.setChannel(configuracao.getCanal());
Connection connection;
connection = factory.createConnection();
Session session;
boolean transacted = false;
session = connection
.createSession(transacted, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue(configuracao.getFilaLocal());
MessageConsumer consumer = session.createConsumer(queue);
consumer.setMessageListener(this);
connection.start();
}
public void onMessage(Message msg) {
MessageController controller = (MessageController) this.applicationContext
.getBean("mensageController", MessageController.class);
controller.setMessage(msg);
controller.run();
}
public void inicarConexao() throws Exception {
new Listener();
while (true) {
Thread.sleep(10000);
}
}
E nessa classe eu tenho que receber a mensagem, desserializa-la e popular em um objeto, só que quando eu tento a desserialização, o objeto fica todo nulo.
public void run() {
super.run();
try {
this.mensagemRequisicao = this.convertMessage(originalMessage);
Service<MensagemRequisicao> service = ServiceFactory
.getService(this.mensagemRequisicao);
service.setApplicationContext(applicationContext);
mensagemResposta = service.execute(mensagemRequisicao);
dispatcher = (Dispatcher) applicationContext.getBean("dispatcher");
dispatcher.dispatch(mensagemResposta);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void setMessage(Message message) {
this.originalMessage = message;
}
@SuppressWarnings( { "restriction", "unchecked", "deprecation" })
protected MensagemRequisicao convertMessage(Message message)
throws Exception {
MensagemRequisicao mensagemRequisicao = new MensagemRequisicao();
try {
JAXBContext context = JAXBContext
.newInstance(MensagemRequisicao.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
ObjectMessage mensagem = (ObjectMessage) message;
Serializable serializable = mensagem.getObject();
String mensagemChegada = serializable.toString();
mensagemRequisicao = (MensagemRequisicao) unmarshaller.unmarshal(fr);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return mensagemRequisicao;
}
Bom,vc poderia fazer o seguinte:
Em vez de passar um arquivo xml,poderia usar uma API de parsing pra transformá-lo em objeto,passar esse objeto e usar a classe ObjectMessage da API do JMS pra receber.
Foi assim que eu fiz,e deu certo.
oi raf4ever,
desculpe perguntar, mas como assim api de parsing?
e como seria a transformaçao?
por um acaso seria algo como uma serializaçao?