package org.kisst.gft.admin; import org.kisst.gft.GftWrapper; import org.kisst.jms.JmsUtil; import org.kisst.jms.MultiListener; import org.kisst.props4j.Props; import org.kisst.servlet4j.AbstractServlet; import javax.jms.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; public class JmsMessageServlet extends AbstractServlet { private final GftWrapper wrapper; public JmsMessageServlet(GftWrapper wrapper, Props props) { super(props); this.wrapper=wrapper; } @SuppressWarnings("unchecked") public void handle(HttpServletRequest request, HttpServletResponse response) throws IOException { if (getUser(request, response)==null) return; response.setContentType("text/html;charset=utf-8"); //response.setStatus(HttpServletResponse.SC_OK); PrintWriter out = response.getWriter(); String url=request.getRequestURI(); url =url.substring("/message/".length()); int pos=url.indexOf("/"); int pos2=url.indexOf("/", pos+1); String listenername=url.substring(0,pos); String queuename=url.substring(pos+1,pos2); String msgid=url.substring(pos2+1); //SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); out.println("<h1>Queue "+queuename+", msg"+msgid+"</h1>"); MultiListener lstnr = wrapper.listeners.get(listenername); Session session=null; try { session = lstnr.getQueueSystem().getConnection().createSession(true, Session.AUTO_ACKNOWLEDGE); String q=lstnr.getQueue(queuename); Queue destination = session.createQueue(q); QueueBrowser browser = session.createBrowser(destination, "JMSMessageID = '"+msgid+"'"); Enumeration<?> e = browser.getEnumeration(); while (e.hasMoreElements()) { Object o = e.nextElement(); if (o instanceof Message) { Message msg=(Message) o; out.println("<table><tr><td><b>Property</b></td><td><b>Value</b></td><tr>"); ArrayList<String> keys = Collections.list(msg.getPropertyNames()); Collections.sort(keys); for (String key: keys) { if( key.startsWith( "state_" ) ) { Object value = msg.getObjectProperty(key); if (key.contains("ERROR") && value instanceof String) { String errorText = ((String) value).replace("++++++++++++++++++++++++++ IE filler+++++++++++++++++++++++++++++++++++++++", ""); errorText = errorText.replace("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", ""); errorText = errorText.replace("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", ""); value=errorText; } out.println("<tr><td>"+key+"</td><td>"+value+"</td></tr>"); } } out.println("</table>"); } if ( o instanceof TextMessage) { out.println("<pre>"); TextMessage msg = (TextMessage) o; out.println(quoteXml(msg.getText())); out.println("</pre>"); } } } catch (JMSException e) { throw JmsUtil.wrapJMSException(e); } finally { try { if (session!=null) session.close(); } catch (JMSException e) { throw JmsUtil.wrapJMSException(e); } } } }