FELIX-4078 Search a method known to be implemented as part of a service in the class hierarchy instead of just the implementation class. This affects the ConfigurationPrinter.getTitle method.
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1486804 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/inventory/src/main/java/org/apache/felix/inventory/impl/webconsole/ConfigurationPrinterAdapter.java b/inventory/src/main/java/org/apache/felix/inventory/impl/webconsole/ConfigurationPrinterAdapter.java
index 2148f32..1ada58e 100644
--- a/inventory/src/main/java/org/apache/felix/inventory/impl/webconsole/ConfigurationPrinterAdapter.java
+++ b/inventory/src/main/java/org/apache/felix/inventory/impl/webconsole/ConfigurationPrinterAdapter.java
@@ -86,7 +86,7 @@
{
modes = ref.getProperty(ConsoleConstants.PROPERTY_MODES);
}
- final Method titleMethod = getMethod(service.getClass(), "getTitle", null);
+ final Method titleMethod = getMethod(service.getClass(), "getTitle", null, false);
if (titleMethod == null)
{
return null;
@@ -104,7 +104,7 @@
// first: printConfiguration(PrintWriter, String)
final Method method2Params = getMethod(service.getClass(), "printConfiguration", new Class[]
- { PrintWriter.class, String.class });
+ { PrintWriter.class, String.class }, true);
if (method2Params != null)
{
cfgPrinter = service;
@@ -115,7 +115,7 @@
{
// second: printConfiguration(PrintWriter)
final Method method1Params = getMethod(service.getClass(), "printConfiguration", new Class[]
- { PrintWriter.class });
+ { PrintWriter.class }, true);
if (method1Params != null)
{
cfgPrinter = service;
@@ -187,7 +187,7 @@
return new ConfigurationPrinterAdapter(cfgPrinter, printMethod, getMethod(cfgPrinter.getClass(),
"getAttachments", new Class[]
- { String.class }), title, (label instanceof String ? (String) label : null), modesArray,
+ { String.class }, true), title, (label instanceof String ? (String) label : null), modesArray,
!webUnescaped);
}
return null;
@@ -279,16 +279,21 @@
return title + " (" + printer.getClass() + ")";
}
- private static Method getMethod(final Class clazz, final String mName, final Class[] params)
+ private static Method getMethod(final Class clazz, final String mName, final Class[] params, final boolean declaredByClass)
{
try
{
- final Method m = clazz.getDeclaredMethod(mName, params);
- if (Modifier.isPublic(m.getModifiers()))
+ if (declaredByClass)
{
- return m;
+ final Method m = clazz.getDeclaredMethod(mName, params);
+ if (Modifier.isPublic(m.getModifiers()))
+ {
+ return m;
+ }
}
- }
+
+ return clazz.getMethod(mName, params);
+ }
catch (Throwable nsme)
{
// ignore, we catch Throwable above to not only catch