You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2011/08/16 14:25:31 UTC
svn commit: r1158230 - in /camel/trunk:
camel-core/src/main/java/org/apache/camel/management/mbean/
camel-core/src/main/java/org/apache/camel/util/
camel-core/src/test/java/org/apache/camel/management/
camel-core/src/test/java/org/apache/camel/util/ co...
Author: davsclaus
Date: Tue Aug 16 12:25:31 2011
New Revision: 1158230
URL: http://svn.apache.org/viewvc?rev=1158230&view=rev
Log:
CAMEL-4338: Improved browsable endpoint for JMX, to browse range/all messages as xml. As well to include/not include message body.
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedBrowsableEndpoint.java
camel/trunk/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java
camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedBrowseableEndpointAsXmlTest.java
camel/trunk/camel-core/src/test/java/org/apache/camel/util/MessageHelperTest.java
camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsQueueEndpoint.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedBrowsableEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedBrowsableEndpoint.java?rev=1158230&r1=1158229&r2=1158230&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedBrowsableEndpoint.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedBrowsableEndpoint.java Tue Aug 16 12:25:31 2011
@@ -16,6 +16,8 @@
*/
package org.apache.camel.management.mbean;
+import java.util.List;
+
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.management.ManagedOperation;
@@ -47,10 +49,12 @@ public class ManagedBrowsableEndpoint ex
@ManagedOperation(description = "Get Exchange from queue by index")
public String browseExchange(Integer index) {
- if (index >= endpoint.getExchanges().size()) {
+ List<Exchange> exchanges = endpoint.getExchanges();
+
+ if (index >= exchanges.size()) {
return null;
}
- Exchange exchange = endpoint.getExchanges().get(index);
+ Exchange exchange = exchanges.get(index);
if (exchange == null) {
return null;
}
@@ -60,39 +64,77 @@ public class ManagedBrowsableEndpoint ex
@ManagedOperation(description = "Get message body from queue by index")
public String browseMessageBody(Integer index) {
- if (index >= endpoint.getExchanges().size()) {
+ List<Exchange> exchanges = endpoint.getExchanges();
+
+ if (index >= exchanges.size()) {
return null;
}
- Exchange exchange = endpoint.getExchanges().get(index);
+ Exchange exchange = exchanges.get(index);
if (exchange == null) {
return null;
}
- Object body;
+ // must use java type with JMX such as java.lang.String
+ String body;
if (exchange.hasOut()) {
- body = exchange.getOut().getBody();
+ body = exchange.getOut().getBody(String.class);
} else {
- body = exchange.getIn().getBody();
+ body = exchange.getIn().getBody(String.class);
}
- // must use java type with JMX such as java.lang.String
- return body != null ? body.toString() : null;
+ return body;
}
@ManagedOperation(description = "Get message as XML from queue by index")
- public String browseMessageAsXml(Integer index) {
- if (index >= endpoint.getExchanges().size()) {
+ public String browseMessageAsXml(Integer index, Boolean includeBody) {
+ List<Exchange> exchanges = endpoint.getExchanges();
+
+ if (index >= exchanges.size()) {
return null;
}
- Exchange exchange = endpoint.getExchanges().get(index);
+ Exchange exchange = exchanges.get(index);
if (exchange == null) {
return null;
}
Message msg = exchange.hasOut() ? exchange.getOut() : exchange.getIn();
- String xml = MessageHelper.dumpAsXml(msg);
+ String xml = MessageHelper.dumpAsXml(msg, includeBody);
return xml;
}
+ @ManagedOperation(description = "Gets all the messages as XML from the queue")
+ public String browseAllMessagesAsXml(Boolean includeBody) {
+ return browseRangeMessagesAsXml(0, Integer.MAX_VALUE, includeBody);
+ }
+
+ @ManagedOperation(description = "Gets the range of messages as XML from the queue")
+ public String browseRangeMessagesAsXml(Integer fromIndex, Integer toIndex, Boolean includeBody) {
+ if (fromIndex == null) {
+ fromIndex = 0;
+ }
+ if (toIndex == null) {
+ toIndex = Integer.MAX_VALUE;
+ }
+ if (fromIndex > toIndex) {
+ throw new IllegalArgumentException("From index cannot be larger than to index, was: " + fromIndex + " > " + toIndex);
+ }
+
+ List<Exchange> exchanges = endpoint.getExchanges();
+ if (exchanges.size() == 0) {
+ return null;
+ }
+
+ StringBuilder sb = new StringBuilder();
+ sb.append("<messages>");
+ for (int i = fromIndex; i < exchanges.size() && i <= toIndex; i++) {
+ Exchange exchange = exchanges.get(i);
+ Message msg = exchange.hasOut() ? exchange.getOut() : exchange.getIn();
+ String xml = MessageHelper.dumpAsXml(msg, includeBody);
+ sb.append("\n").append(xml);
+ }
+ sb.append("\n</messages>");
+ return sb.toString();
+ }
+
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java?rev=1158230&r1=1158229&r2=1158230&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java Tue Aug 16 12:25:31 2011
@@ -251,6 +251,17 @@ public final class MessageHelper {
* @return the XML
*/
public static String dumpAsXml(Message message) {
+ return dumpAsXml(message, true);
+ }
+
+ /**
+ * Dumps the message as a generic XML structure.
+ *
+ * @param message the message
+ * @param includeBody whether or not to include the message body
+ * @return the XML
+ */
+ public static String dumpAsXml(Message message, boolean includeBody) {
StringBuilder sb = new StringBuilder();
sb.append("<message>\n");
@@ -282,22 +293,24 @@ public final class MessageHelper {
sb.append("</headers>\n");
}
- sb.append("<body");
- String type = ObjectHelper.classCanonicalName(message.getBody());
- if (type != null) {
- sb.append(" type=\"" + type + "\"");
- }
- sb.append(">");
+ if (includeBody) {
+ sb.append("<body");
+ String type = ObjectHelper.classCanonicalName(message.getBody());
+ if (type != null) {
+ sb.append(" type=\"" + type + "\"");
+ }
+ sb.append(">");
- // dump body value as XML, use Camel type converter to convert to String
- // do not allow streams, but allow files, and clip very big message bodies (128kb)
- String xml = extractBodyForLogging(message, "", false, true, 128 * 1024);
- if (xml != null) {
- // must always xml encode
- sb.append(StringHelper.xmlEncode(xml));
- }
+ // dump body value as XML, use Camel type converter to convert to String
+ // do not allow streams, but allow files, and clip very big message bodies (128kb)
+ String xml = extractBodyForLogging(message, "", false, true, 128 * 1024);
+ if (xml != null) {
+ // must always xml encode
+ sb.append(StringHelper.xmlEncode(xml));
+ }
- sb.append("</body>\n");
+ sb.append("</body>\n");
+ }
sb.append("</message>");
return sb.toString();
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedBrowseableEndpointAsXmlTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedBrowseableEndpointAsXmlTest.java?rev=1158230&r1=1158229&r2=1158230&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedBrowseableEndpointAsXmlTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedBrowseableEndpointAsXmlTest.java Tue Aug 16 12:25:31 2011
@@ -28,7 +28,7 @@ import org.apache.camel.builder.RouteBui
*/
public class ManagedBrowseableEndpointAsXmlTest extends ManagementTestSupport {
- public void testBrowseableEndpointAsXml() throws Exception {
+ public void testBrowseableEndpointAsXmlIncludeBody() throws Exception {
getMockEndpoint("mock:result").expectedMessageCount(7);
template.sendBody("direct:start", "<foo>Camel > Donkey</foo>");
@@ -49,42 +49,42 @@ public class ManagedBrowseableEndpointAs
ObjectName name = ObjectName.getInstance("org.apache.camel:context=localhost/camel-1,type=endpoints,name=\"mock://result\"");
- String out = (String) mbeanServer.invoke(name, "browseMessageAsXml", new Object[]{0}, new String[]{"java.lang.Integer"});
+ String out = (String) mbeanServer.invoke(name, "browseMessageAsXml", new Object[]{0, true}, new String[]{"java.lang.Integer", "java.lang.Boolean"});
assertNotNull(out);
log.info(out);
assertEquals("<message>\n<body type=\"java.lang.String\"><foo>Camel &gt; Donkey</foo></body>\n</message>", out);
- out = (String) mbeanServer.invoke(name, "browseMessageAsXml", new Object[]{1}, new String[]{"java.lang.Integer"});
+ out = (String) mbeanServer.invoke(name, "browseMessageAsXml", new Object[]{1, true}, new String[]{"java.lang.Integer", "java.lang.Boolean"});
assertNotNull(out);
log.info(out);
assertEquals("<message>\n<body type=\"java.lang.String\">Camel > Donkey</body>\n</message>", out);
- out = (String) mbeanServer.invoke(name, "browseMessageAsXml", new Object[]{2}, new String[]{"java.lang.Integer"});
+ out = (String) mbeanServer.invoke(name, "browseMessageAsXml", new Object[]{2, true}, new String[]{"java.lang.Integer", "java.lang.Boolean"});
assertNotNull(out);
log.info(out);
assertEquals("<message>\n<headers>\n<header key=\"name\" type=\"java.lang.String\">Me & You</header>\n</headers>\n"
+ "<body type=\"java.lang.String\"><foo>Camel &gt; Donkey</foo></body>\n</message>", out);
- out = (String) mbeanServer.invoke(name, "browseMessageAsXml", new Object[]{3}, new String[]{"java.lang.Integer"});
+ out = (String) mbeanServer.invoke(name, "browseMessageAsXml", new Object[]{3, true}, new String[]{"java.lang.Integer", "java.lang.Boolean"});
assertNotNull(out);
log.info(out);
assertEquals("<message>\n<headers>\n<header key=\"title\" type=\"java.lang.String\"><title>Me &amp; You</title></header>\n</headers>\n"
+ "<body type=\"java.lang.String\"><foo>Camel &gt; Donkey</foo></body>\n</message>", out);
- out = (String) mbeanServer.invoke(name, "browseMessageAsXml", new Object[]{4}, new String[]{"java.lang.Integer"});
+ out = (String) mbeanServer.invoke(name, "browseMessageAsXml", new Object[]{4, true}, new String[]{"java.lang.Integer", "java.lang.Boolean"});
assertNotNull(out);
log.info(out);
assertEquals("<message>\n<headers>\n<header key=\"name\" type=\"java.lang.String\">Me & You</header>\n</headers>\n"
+ "<body type=\"java.lang.String\">Camel > Donkey</body>\n</message>", out);
- out = (String) mbeanServer.invoke(name, "browseMessageAsXml", new Object[]{5}, new String[]{"java.lang.Integer"});
+ out = (String) mbeanServer.invoke(name, "browseMessageAsXml", new Object[]{5, true}, new String[]{"java.lang.Integer", "java.lang.Boolean"});
assertNotNull(out);
log.info(out);
assertEquals("<message>\n<headers>\n<header key=\"user\" type=\"java.lang.Boolean\">true</header>\n</headers>\n"
+ "<body type=\"java.lang.Integer\">123</body>\n</message>", out);
- out = (String) mbeanServer.invoke(name, "browseMessageAsXml", new Object[]{6}, new String[]{"java.lang.Integer"});
+ out = (String) mbeanServer.invoke(name, "browseMessageAsXml", new Object[]{6, true}, new String[]{"java.lang.Integer", "java.lang.Boolean"});
assertNotNull(out);
log.info(out);
assertEquals("<message>\n<headers>\n<header key=\"title\" type=\"java.lang.String\">Camel rocks</header>\n"
@@ -93,6 +93,128 @@ public class ManagedBrowseableEndpointAs
+ "<body type=\"java.lang.String\"><animal><name>Donkey</name><age>17</age></animal></body>\n</message>", out);
}
+ public void testBrowseableEndpointAsXml() throws Exception {
+ getMockEndpoint("mock:result").expectedMessageCount(2);
+
+ template.sendBodyAndHeader("direct:start", "Hello World", "foo", 123);
+ template.sendBodyAndHeader("direct:start", "Bye World", "foo", 456);
+
+ assertMockEndpointsSatisfied();
+
+ MBeanServer mbeanServer = getMBeanServer();
+
+ ObjectName name = ObjectName.getInstance("org.apache.camel:context=localhost/camel-1,type=endpoints,name=\"mock://result\"");
+
+ String out = (String) mbeanServer.invoke(name, "browseMessageAsXml", new Object[]{0, false}, new String[]{"java.lang.Integer", "java.lang.Boolean"});
+ assertNotNull(out);
+ log.info(out);
+
+ assertEquals("<message>\n<headers>\n<header key=\"foo\" type=\"java.lang.Integer\">123</header>\n</headers>\n</message>", out);
+
+ out = (String) mbeanServer.invoke(name, "browseMessageAsXml", new Object[]{1, false}, new String[]{"java.lang.Integer", "java.lang.Boolean"});
+ assertNotNull(out);
+ log.info(out);
+ assertEquals("<message>\n<headers>\n<header key=\"foo\" type=\"java.lang.Integer\">456</header>\n</headers>\n</message>", out);
+ }
+
+ public void testBrowseableEndpointAsXmlAllIncludeBody() throws Exception {
+ getMockEndpoint("mock:result").expectedMessageCount(2);
+
+ template.sendBody("direct:start", "Hello World");
+ template.sendBodyAndHeader("direct:start", "Bye World", "foo", 456);
+
+ assertMockEndpointsSatisfied();
+
+ MBeanServer mbeanServer = getMBeanServer();
+
+ ObjectName name = ObjectName.getInstance("org.apache.camel:context=localhost/camel-1,type=endpoints,name=\"mock://result\"");
+
+ String out = (String) mbeanServer.invoke(name, "browseAllMessagesAsXml", new Object[]{true}, new String[]{"java.lang.Boolean"});
+ assertNotNull(out);
+ log.info(out);
+
+ assertEquals("<messages>\n<message>\n<body type=\"java.lang.String\">Hello World</body>\n</message>\n"
+ + "<message>\n<headers>\n<header key=\"foo\" type=\"java.lang.Integer\">456</header>\n</headers>\n"
+ + "<body type=\"java.lang.String\">Bye World</body>\n</message>\n</messages>", out);
+ }
+
+ public void testBrowseableEndpointAsXmlAll() throws Exception {
+ getMockEndpoint("mock:result").expectedMessageCount(2);
+
+ template.sendBodyAndHeader("direct:start", "Hello World", "foo", 123);
+ template.sendBodyAndHeader("direct:start", "Bye World", "foo", 456);
+
+ assertMockEndpointsSatisfied();
+
+ MBeanServer mbeanServer = getMBeanServer();
+
+ ObjectName name = ObjectName.getInstance("org.apache.camel:context=localhost/camel-1,type=endpoints,name=\"mock://result\"");
+
+ String out = (String) mbeanServer.invoke(name, "browseAllMessagesAsXml", new Object[]{false}, new String[]{"java.lang.Boolean"});
+ assertNotNull(out);
+ log.info(out);
+
+ assertEquals("<messages>\n<message>\n<headers>\n<header key=\"foo\" type=\"java.lang.Integer\">123</header>\n</headers>\n</message>\n"
+ + "<message>\n<headers>\n<header key=\"foo\" type=\"java.lang.Integer\">456</header>\n</headers>\n</message>\n</messages>", out);
+ }
+
+ public void testBrowseableEndpointAsXmlRangeIncludeBody() throws Exception {
+ getMockEndpoint("mock:result").expectedMessageCount(3);
+
+ template.sendBody("direct:start", "Hello World");
+ template.sendBodyAndHeader("direct:start", "Bye World", "foo", 456);
+ template.sendBody("direct:start", "Hi Camel");
+
+ assertMockEndpointsSatisfied();
+
+ MBeanServer mbeanServer = getMBeanServer();
+
+ ObjectName name = ObjectName.getInstance("org.apache.camel:context=localhost/camel-1,type=endpoints,name=\"mock://result\"");
+
+ String out = (String) mbeanServer.invoke(name, "browseRangeMessagesAsXml", new Object[]{0, 1, true}, new String[]{"java.lang.Integer", "java.lang.Integer", "java.lang.Boolean"});
+ assertNotNull(out);
+ log.info(out);
+
+ assertEquals("<messages>\n<message>\n<body type=\"java.lang.String\">Hello World</body>\n</message>\n"
+ + "<message>\n<headers>\n<header key=\"foo\" type=\"java.lang.Integer\">456</header>\n</headers>\n"
+ + "<body type=\"java.lang.String\">Bye World</body>\n</message>\n</messages>", out);
+ }
+
+ public void testBrowseableEndpointAsXmlRange() throws Exception {
+ getMockEndpoint("mock:result").expectedMessageCount(3);
+
+ template.sendBodyAndHeader("direct:start", "Hello World", "foo", 123);
+ template.sendBodyAndHeader("direct:start", "Bye World", "foo", 456);
+ template.sendBody("direct:start", "Hi Camel");
+
+ assertMockEndpointsSatisfied();
+
+ MBeanServer mbeanServer = getMBeanServer();
+
+ ObjectName name = ObjectName.getInstance("org.apache.camel:context=localhost/camel-1,type=endpoints,name=\"mock://result\"");
+
+ String out = (String) mbeanServer.invoke(name, "browseRangeMessagesAsXml", new Object[]{0, 1, false}, new String[]{"java.lang.Integer", "java.lang.Integer", "java.lang.Boolean"});
+ assertNotNull(out);
+ log.info(out);
+
+ assertEquals("<messages>\n<message>\n<headers>\n<header key=\"foo\" type=\"java.lang.Integer\">123</header>\n</headers>\n</message>\n"
+ + "<message>\n<headers>\n<header key=\"foo\" type=\"java.lang.Integer\">456</header>\n</headers>\n</message>\n</messages>", out);
+ }
+
+ public void testBrowseableEndpointAsXmlRangeInvalidIndex() throws Exception {
+ MBeanServer mbeanServer = getMBeanServer();
+
+ ObjectName name = ObjectName.getInstance("org.apache.camel:context=localhost/camel-1,type=endpoints,name=\"mock://result\"");
+
+ try {
+ mbeanServer.invoke(name, "browseRangeMessagesAsXml", new Object[]{3, 1, false}, new String[]{"java.lang.Integer", "java.lang.Integer", "java.lang.Boolean"});
+ fail("Should have thrown exception");
+ } catch (Exception e) {
+ assertIsInstanceOf(IllegalArgumentException.class, e.getCause());
+ assertEquals("From index cannot be larger than to index, was: 3 > 1", e.getCause().getMessage());
+ }
+ }
+
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/util/MessageHelperTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/util/MessageHelperTest.java?rev=1158230&r1=1158229&r2=1158230&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/util/MessageHelperTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/util/MessageHelperTest.java Tue Aug 16 12:25:31 2011
@@ -118,7 +118,7 @@ public class MessageHelperTest extends T
context.stop();
}
- public void testDumpAsXmlXmlBody() throws Exception {
+ public void testDumpAsXmlBody() throws Exception {
CamelContext context = new DefaultCamelContext();
context.start();
@@ -134,4 +134,20 @@ public class MessageHelperTest extends T
context.stop();
}
+ public void testDumpAsXmlNoBody() throws Exception {
+ CamelContext context = new DefaultCamelContext();
+ context.start();
+
+ message = new DefaultExchange(context).getIn();
+
+ // xml message body
+ message.setBody("Hello World");
+ message.setHeader("foo", 123);
+
+ String out = MessageHelper.dumpAsXml(message, false);
+ assertEquals("<message>\n<headers>\n<header key=\"foo\" type=\"java.lang.Integer\">123</header>\n</headers>\n</message>", out);
+
+ context.stop();
+ }
+
}
Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsQueueEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsQueueEndpoint.java?rev=1158230&r1=1158229&r2=1158230&view=diff
==============================================================================
--- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsQueueEndpoint.java (original)
+++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsQueueEndpoint.java Tue Aug 16 12:25:31 2011
@@ -127,19 +127,19 @@ public class JmsQueueEndpoint extends Jm
return null;
}
- Object body;
+ // must use java type with JMX such as java.lang.String
+ String body;
if (exchange.hasOut()) {
- body = exchange.getOut().getBody();
+ body = exchange.getOut().getBody(String.class);
} else {
- body = exchange.getIn().getBody();
+ body = exchange.getIn().getBody(String.class);
}
- // must use java type with JMX such as java.lang.String
- return body != null ? body.toString() : null;
+ return body;
}
@ManagedOperation(description = "Get message as XML from queue by index")
- public String browseMessageAsXml(Integer index) {
+ public String browseMessageAsXml(Integer index, Boolean includeBody) {
List<Exchange> exchanges = getExchanges();
if (index >= exchanges.size()) {
return null;
@@ -150,11 +150,45 @@ public class JmsQueueEndpoint extends Jm
}
Message msg = exchange.hasOut() ? exchange.getOut() : exchange.getIn();
- String xml = MessageHelper.dumpAsXml(msg);
+ String xml = MessageHelper.dumpAsXml(msg, includeBody);
return xml;
}
+ @ManagedOperation(description = "Gets all the messages as XML from the queue")
+ public String browseAllMessagesAsXml(Boolean includeBody) {
+ return browseRangeMessagesAsXml(0, Integer.MAX_VALUE, includeBody);
+ }
+
+ @ManagedOperation(description = "Gets the range of messages as XML from the queue")
+ public String browseRangeMessagesAsXml(Integer fromIndex, Integer toIndex, Boolean includeBody) {
+ if (fromIndex == null) {
+ fromIndex = 0;
+ }
+ if (toIndex == null) {
+ toIndex = Integer.MAX_VALUE;
+ }
+ if (fromIndex > toIndex) {
+ throw new IllegalArgumentException("From index cannot be larger than to index, was: " + fromIndex + " > " + toIndex);
+ }
+
+ List<Exchange> exchanges = getExchanges();
+ if (exchanges.size() == 0) {
+ return null;
+ }
+
+ StringBuilder sb = new StringBuilder();
+ sb.append("<messages>");
+ for (int i = fromIndex; i < exchanges.size() && i <= toIndex; i++) {
+ Exchange exchange = exchanges.get(i);
+ Message msg = exchange.hasOut() ? exchange.getOut() : exchange.getIn();
+ String xml = MessageHelper.dumpAsXml(msg, includeBody);
+ sb.append("\n").append(xml);
+ }
+ sb.append("\n</messages>");
+ return sb.toString();
+ }
+
protected QueueBrowseStrategy createQueueBrowseStrategy() {
return new DefaultQueueBrowseStrategy();
}