private Map<String, List<ManagedProcessorMBean>> findProcessorsForEachRoute(MBeanServer server)
throws MalformedObjectNameException, MBeanException, AttributeNotFoundException, InstanceNotFoundException, ReflectionException {
String domain = context.getManagementStrategy().getManagementAgent().getMBeanServerDefaultDomain();
Map<String, List<ManagedProcessorMBean>> processorsForRoute = new HashMap<>();
ObjectName processorsObjectName = new ObjectName(domain + ":context=" + context.getManagementName() + ",type=processors,name=*");
Set<ObjectName> objectNames = server.queryNames(processorsObjectName, null);
for (ObjectName objectName : objectNames) {
String routeId = server.getAttribute(objectName, "RouteId").toString();
String name = objectName.getKeyProperty("name");
name = ObjectName.unquote(name);
ManagedProcessorMBean managedProcessor = context.getManagedProcessor(name, ManagedProcessorMBean.class);
if (managedProcessor != null) {
if (processorsForRoute.get(routeId) == null) {
List<ManagedProcessorMBean> processorsList = new ArrayList<>();
processorsList.add(managedProcessor);
processorsForRoute.put(routeId, processorsList);
} else {
processorsForRoute.get(routeId).add(managedProcessor);
}
}
}
for (Map.Entry<String, List<ManagedProcessorMBean>> entry : processorsForRoute.entrySet()) {
Collections.sort(entry.getValue(), Comparator.comparing(ManagedProcessorMBean::getIndex));
}
return processorsForRoute;
}