package infrastructure; import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.*; public class MockJMSBasedSystemUnderTest implements MessageListener { private String cannedResponse = ""; private String lastRequest = "No requests received yet."; private Destination requestQueue; private Destination responseQueue; private Session session; private Connection conn; public MockJMSBasedSystemUnderTest(String cannedResponse) { this.cannedResponse = cannedResponse; } public void startServer() throws Exception { ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost?broker.persistent=false"); conn = connectionFactory.createConnection(); conn.start(); session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); requestQueue = session.createQueue("requestQueue"); responseQueue = session.createQueue("responseQueue"); MessageConsumer consumer = session.createConsumer(requestQueue); consumer.setMessageListener(this); } public void stopServer() throws JMSException { conn.close(); } @Override public void onMessage(Message message) { BytesMessage requestMessage = (BytesMessage) message; try { byte[] bytes = new byte[(int) requestMessage.getBodyLength()]; requestMessage.readBytes(bytes); lastRequest = new String(bytes, "UTF-8"); MessageProducer producer = session.createProducer(responseQueue); BytesMessage responseMessage = session.createBytesMessage(); responseMessage.setJMSCorrelationID(requestMessage.getJMSMessageID()); responseMessage.writeBytes(cannedResponse.getBytes("UTF-8")); producer.send(responseMessage); } catch (Exception e) { e.printStackTrace(); } } }