Fix ClassCastException, add debug log statements and allow standalone xml to be used

git-svn-id: https://svn.apache.org/repos/asf/incubator/activemq/trunk@379429 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Guillaume Nodet 2006-02-21 11:34:58 +00:00
parent 6ce83ac909
commit aa2188c159
3 changed files with 46 additions and 16 deletions

View File

@ -100,15 +100,19 @@ public class MessageListenerServlet extends MessageServletSupport {
synchronized (client) { synchronized (client) {
// System.err.println("POST client="+client+" session="+request.getSession().getId()+" info="+request.getPathInfo()+" contentType="+request.getContentType()); if (log.isDebugEnabled()) {
log.debug("POST client="+client+" session="+request.getSession().getId()+" info="+request.getPathInfo()+" contentType="+request.getContentType());
// dump(request.getParameterMap()); // dump(request.getParameterMap());
}
String[] destinations = request.getParameterValues("destination"); String[] destinations = request.getParameterValues("destination");
String[] messages = request.getParameterValues("message"); String[] messages = request.getParameterValues("message");
String[] types = request.getParameterValues("type"); String[] types = request.getParameterValues("type");
if (destinations.length!=messages.length || messages.length!=types.length) if (destinations.length!=messages.length || messages.length!=types.length)
{ {
// System.err.println("ERROR destination="+destinations.length+" message="+messages.length+" type="+types.length); if (log.isDebugEnabled()) {
log.debug("ERROR destination="+destinations.length+" message="+messages.length+" type="+types.length);
}
response.sendError(HttpServletResponse.SC_BAD_REQUEST,"missmatched destination, message or type"); response.sendError(HttpServletResponse.SC_BAD_REQUEST,"missmatched destination, message or type");
return; return;
} }
@ -116,11 +120,14 @@ public class MessageListenerServlet extends MessageServletSupport {
for (int i=0;i<types.length;i++) for (int i=0;i<types.length;i++)
{ {
try { try {
// System.err.println(i+" destination="+destinations[i]+" message="+messages[i]+" type="+types[i]);
String type=types[i]; String type=types[i];
Destination destination=getDestination(client,request,destinations[i]); Destination destination=getDestination(client,request,destinations[i]);
if (log.isDebugEnabled()) {
log.debug(i+" destination="+destinations[i]+" message="+messages[i]+" type="+types[i]);
log.debug(destination+" is a "+destination.getClass().getName());
}
if ("listen".equals(type)) if ("listen".equals(type))
{ {
Listener listener = getListener(request); Listener listener = getListener(request);
@ -129,7 +136,9 @@ public class MessageListenerServlet extends MessageServletSupport {
consumer.setAvailableListener(listener); consumer.setAvailableListener(listener);
consumerIdMap.put(consumer, messages[i]); consumerIdMap.put(consumer, messages[i]);
// System.err.println("Subscribed: "+consumer+" to "+destination+" id="+messages[i]); if (log.isDebugEnabled()) {
log.debug("Subscribed: "+consumer+" to "+destination+" id="+messages[i]);
}
} }
else if ("unlisten".equals(type)) else if ("unlisten".equals(type))
{ {
@ -139,15 +148,18 @@ public class MessageListenerServlet extends MessageServletSupport {
// TODO should we destroy consumer on unsubscribe? // TODO should we destroy consumer on unsubscribe?
consumer.setAvailableListener(null); consumer.setAvailableListener(null);
consumerIdMap.remove(consumer); consumerIdMap.remove(consumer);
// System.err.println("Unsubscribed: "+consumer); if (log.isDebugEnabled()) {
log.debug("Unsubscribed: "+consumer);
}
} }
else if ("send".equals(type)) else if ("send".equals(type))
{ {
TextMessage message = client.getSession().createTextMessage(messages[i]); TextMessage message = client.getSession().createTextMessage(messages[i]);
// TODO sent message parameters // TODO sent message parameters
client.send(destination, message); client.send(destination, message);
// System.err.println("Sent "+messages[i]+" to "+destination); if (log.isDebugEnabled()) {
log.debug("Sent "+messages[i]+" to "+destination);
}
// TODO return message ID. // TODO return message ID.
} }
else else
@ -187,7 +199,9 @@ public class MessageListenerServlet extends MessageServletSupport {
try { try {
WebClient client = getWebClient(request); WebClient client = getWebClient(request);
// System.err.println("GET client="+client+" session="+request.getSession().getId()+" uri="+request.getRequestURI()+" query="+request.getQueryString()); if (log.isDebugEnabled()) {
log.debug("GET client="+client+" session="+request.getSession().getId()+" uri="+request.getRequestURI()+" query="+request.getQueryString());
}
doMessages(client, request, response); doMessages(client, request, response);
} }
@ -213,7 +227,9 @@ public class MessageListenerServlet extends MessageServletSupport {
// This is a poll for any messages // This is a poll for any messages
long timeout = getReadTimeout(request); long timeout = getReadTimeout(request);
// System.err.println("doMessage timeout="+timeout); if (log.isDebugEnabled()) {
log.debug("doMessage timeout="+timeout);
}
Continuation continuation = null; Continuation continuation = null;
Message message = null; Message message = null;
@ -233,7 +249,9 @@ public class MessageListenerServlet extends MessageServletSupport {
// Look for any available messages // Look for any available messages
message = consumer.receiveNoWait(); message = consumer.receiveNoWait();
// System.err.println("received "+message+" from "+consumer); if (log.isDebugEnabled()) {
log.debug("received "+message+" from "+consumer);
}
} }
// Get an existing Continuation or create a new one if there are no // Get an existing Continuation or create a new one if there are no
@ -307,7 +325,11 @@ public class MessageListenerServlet extends MessageServletSupport {
protected void writeMessageResponse(PrintWriter writer, Message message) throws JMSException, IOException { protected void writeMessageResponse(PrintWriter writer, Message message) throws JMSException, IOException {
if (message instanceof TextMessage) { if (message instanceof TextMessage) {
TextMessage textMsg = (TextMessage) message; TextMessage textMsg = (TextMessage) message;
writer.print(textMsg.getText()); String txt = textMsg.getText();
if (txt.startsWith("<?")) {
txt = txt.substring(txt.indexOf("?>") + 2);
}
writer.print(txt);
} else if (message instanceof ObjectMessage) { } else if (message instanceof ObjectMessage) {
ObjectMessage objectMsg = (ObjectMessage) message; ObjectMessage objectMsg = (ObjectMessage) message;
Object object = objectMsg.getObject(); Object object = objectMsg.getObject();
@ -379,8 +401,9 @@ public class MessageListenerServlet extends MessageServletSupport {
public void onMessageAvailable(MessageConsumer consumer) { public void onMessageAvailable(MessageConsumer consumer) {
synchronized (client) { synchronized (client) {
// System.err.println("message for "+consumer+" if (log.isDebugEnabled()) {
// continuation="+continuation); log.debug("message for "+consumer+"continuation="+continuation);
}
if (continuation != null) if (continuation != null)
continuation.resume(); continuation.resume();
continuation = null; continuation = null;

View File

@ -341,7 +341,11 @@ public class MessageServlet extends MessageServletSupport {
protected void writeMessageResponse(PrintWriter writer, Message message) throws JMSException, IOException { protected void writeMessageResponse(PrintWriter writer, Message message) throws JMSException, IOException {
if (message instanceof TextMessage) { if (message instanceof TextMessage) {
TextMessage textMsg = (TextMessage) message; TextMessage textMsg = (TextMessage) message;
writer.print(textMsg.getText()); String txt = textMsg.getText();
if (txt.startsWith("<?")) {
txt = txt.substring(txt.indexOf("?>") + 2);
}
writer.print(txt);
} }
else if (message instanceof ObjectMessage) { else if (message instanceof ObjectMessage) {
ObjectMessage objectMsg = (ObjectMessage) message; ObjectMessage objectMsg = (ObjectMessage) message;

View File

@ -238,7 +238,10 @@ public class WebClient implements HttpSessionActivationListener, Externalizable
// TODO check this double synchronization on queue but not on topics // TODO check this double synchronization on queue but not on topics
synchronized (queueConsumers) { synchronized (queueConsumers) {
list.addAll(queueConsumers.values()); for (Iterator it = queueConsumers.values().iterator(); it.hasNext();) {
SessionConsumerPair pair = (SessionConsumerPair) it.next();
list.add(pair.consumer);
}
} }
list.addAll(topicConsumers.values()); list.addAll(topicConsumers.values());
return list; return list;