@VisibleForTesting
    @Nullable
    ServiceInfo newServiceInfo(Entry entry, DocServiceFilter filter) {
        final Class<?> serviceClass = entry.serviceType;
        requireNonNull(serviceClass, "serviceClass");

        final String name = serviceClass.getName();
        final ClassLoader serviceClassLoader = serviceClass.getClassLoader();
        final String interfaceClassName = name + "$Iface";
        final Class<?> interfaceClass;
        try {
            interfaceClass = Class.forName(interfaceClassName, false, serviceClassLoader);
        } catch (ClassNotFoundException e) {
            throw new IllegalStateException("failed to find a class: " + interfaceClassName, e);
        }
        final Method[] methods = interfaceClass.getDeclaredMethods();

        final List<MethodInfo> methodInfos = Arrays.stream(methods)
                                                   .map(m -> newMethodInfo(m, entry, filter))
                                                   .filter(Objects::nonNull)
                                                   .collect(toImmutableList());
        if (methodInfos.isEmpty()) {
            return null;
        }
        return new ServiceInfo(name, methodInfos);
    }
{@link DocServicePlugin} implementation that supports {@link THttpService}s.
thrift/thrift0.13/src/main/java/com/linecorp/armeria/internal/server/thrift/ThriftDocServicePlugin.java