I made a Java component in a Mule Flow that sends a message to a Queue, i want to do it programatically instead of using the Mule JMS component.
From the Producer i got this code:
@Override
public Object onCall(MuleEventContext eventContext) throws Exception {
String payload = eventContext.getMessage().getPayloadAsString();
JmsConnector amqConnector = (JmsConnector) eventContext.getMuleContext().getRegistry().lookupConnector("Active_MQ");
ConnectionFactory factory = amqConnector.getConnectionFactory();
Connection connection;
connection = factory.createConnection();
try {
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue("ExampleQueue");
MessageProducer producer = session.createProducer(queue);
TemporaryQueue replyQueue = session.createTemporaryQueue();
TextMessage message = session.createTextMessage(payload);
message.setJMSReplyTo(replyQueue);
message.setJMSDestination(queue);
message.setJMSCorrelationID("TestID");
producer.send(message, DeliveryMode.NON_PERSISTENT, 0, 5000);
MessageConsumer consumer = session.createConsumer(replyQueue);
MessageListener listener = consumer.getMessageListener();
listener.onMessage(message);
}finally {
connection.close();
}
return eventContext;
}
Now, from the Consumer i got a normal Mule JMS Component listening to that very same Queue (ExampleQueue).
Now, i want this to be request-response. But when i run it now, i'm getting a NullPointerException at line MessageListener listener = consumer.getMessageListener();
How can i make the Client Producer to be listening to the TemporaryQueue until it gets the response message?
Thanks