0
votes

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

1
Is the queue where you are putting your message being consumed by a mule endpoint?genjosanzo

1 Answers

1
votes

Made it :D

Had to add this:

MessageConsumer consumer = session.createConsumer(replyQueue);      
            TextMessage receivedMessage = (TextMessage) consumer.receive(); 
            text = receivedMessage.getText();

In order to get the Text from the consumer!