001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.apache.camel.management.mbean;
018
019 import java.util.List;
020
021 import org.apache.camel.Exchange;
022 import org.apache.camel.Message;
023 import org.apache.camel.api.management.ManagedResource;
024 import org.apache.camel.api.management.mbean.ManagedBrowsableEndpointMBean;
025 import org.apache.camel.spi.BrowsableEndpoint;
026 import org.apache.camel.util.MessageHelper;
027
028 /**
029 * @version
030 */
031 @ManagedResource(description = "Managed BrowsableEndpoint")
032 public class ManagedBrowsableEndpoint extends ManagedEndpoint implements ManagedBrowsableEndpointMBean {
033
034 public ManagedBrowsableEndpoint(BrowsableEndpoint endpoint) {
035 super(endpoint);
036 }
037
038 @Override
039 public BrowsableEndpoint getEndpoint() {
040 return (BrowsableEndpoint) super.getEndpoint();
041 }
042
043 @Override
044 public BrowsableEndpoint getInstance() {
045 return getEndpoint();
046 }
047
048 @Override
049 public long queueSize() {
050 return getEndpoint().getExchanges().size();
051 }
052
053 @Override
054 public String browseExchange(Integer index) {
055 List<Exchange> exchanges = getEndpoint().getExchanges();
056
057 if (index >= exchanges.size()) {
058 return null;
059 }
060 Exchange exchange = exchanges.get(index);
061 if (exchange == null) {
062 return null;
063 }
064 // must use java type with JMX such as java.lang.String
065 return exchange.toString();
066 }
067
068 @Override
069 public String browseMessageBody(Integer index) {
070 List<Exchange> exchanges = getEndpoint().getExchanges();
071
072 if (index >= exchanges.size()) {
073 return null;
074 }
075 Exchange exchange = exchanges.get(index);
076 if (exchange == null) {
077 return null;
078 }
079
080 // must use java type with JMX such as java.lang.String
081 String body;
082 if (exchange.hasOut()) {
083 body = exchange.getOut().getBody(String.class);
084 } else {
085 body = exchange.getIn().getBody(String.class);
086 }
087
088 return body;
089 }
090
091 @Override
092 public String browseMessageAsXml(Integer index) {
093 return browseMessageAsXml(index, true);
094 }
095
096 @Override
097 public String browseMessageAsXml(Integer index, Boolean includeBody) {
098 List<Exchange> exchanges = getEndpoint().getExchanges();
099
100 if (index >= exchanges.size()) {
101 return null;
102 }
103 Exchange exchange = exchanges.get(index);
104 if (exchange == null) {
105 return null;
106 }
107
108 Message msg = exchange.hasOut() ? exchange.getOut() : exchange.getIn();
109 String xml = MessageHelper.dumpAsXml(msg, includeBody);
110
111 return xml;
112 }
113
114 @Override
115 public String browseAllMessagesAsXml(Boolean includeBody) {
116 return browseRangeMessagesAsXml(0, Integer.MAX_VALUE, includeBody);
117 }
118
119 @Override
120 public String browseRangeMessagesAsXml(Integer fromIndex, Integer toIndex, Boolean includeBody) {
121 if (fromIndex == null) {
122 fromIndex = 0;
123 }
124 if (toIndex == null) {
125 toIndex = Integer.MAX_VALUE;
126 }
127 if (fromIndex > toIndex) {
128 throw new IllegalArgumentException("From index cannot be larger than to index, was: " + fromIndex + " > " + toIndex);
129 }
130
131 List<Exchange> exchanges = getEndpoint().getExchanges();
132 if (exchanges.size() == 0) {
133 return null;
134 }
135
136 StringBuilder sb = new StringBuilder();
137 sb.append("<messages>");
138 for (int i = fromIndex; i < exchanges.size() && i <= toIndex; i++) {
139 Exchange exchange = exchanges.get(i);
140 Message msg = exchange.hasOut() ? exchange.getOut() : exchange.getIn();
141 String xml = MessageHelper.dumpAsXml(msg, includeBody);
142 sb.append("\n").append(xml);
143 }
144 sb.append("\n</messages>");
145 return sb.toString();
146 }
147
148 }