diff --git a/metrics-jetty9/src/main/java/io/dropwizard/metrics/jetty9/InstrumentedConnectionFactory.java b/metrics-jetty9/src/main/java/io/dropwizard/metrics/jetty9/InstrumentedConnectionFactory.java index 3ec5f55dea..30c423c5e5 100644 --- a/metrics-jetty9/src/main/java/io/dropwizard/metrics/jetty9/InstrumentedConnectionFactory.java +++ b/metrics-jetty9/src/main/java/io/dropwizard/metrics/jetty9/InstrumentedConnectionFactory.java @@ -8,14 +8,25 @@ import io.dropwizard.metrics.Timer; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Collections; +import java.util.List; + public class InstrumentedConnectionFactory extends ContainerLifeCycle implements ConnectionFactory { private final ConnectionFactory connectionFactory; private final Timer timer; + private Method getProtocols; public InstrumentedConnectionFactory(ConnectionFactory connectionFactory, Timer timer) { this.connectionFactory = connectionFactory; this.timer = timer; addBean(connectionFactory); + try { + getProtocols = connectionFactory.getClass().getMethod("getProtocols"); + } catch (NoSuchMethodException ignore) { + getProtocols = null; + } } @Override @@ -23,6 +34,17 @@ public String getProtocol() { return connectionFactory.getProtocol(); } + @SuppressWarnings("unchecked") + public List getProtocols() { + try { + return getProtocols != null ? + (List) getProtocols.invoke(connectionFactory) : + Collections.emptyList(); + } catch (IllegalAccessException | InvocationTargetException e) { + throw new IllegalStateException("Unable to invoke `connectionFactory#getProtocols`", e); + } + } + @Override public Connection newConnection(Connector connector, EndPoint endPoint) { final Connection connection = connectionFactory.newConnection(connector, endPoint);