private Object getService()

in src/main/java/org/apache/sling/models/impl/injectors/OSGiServiceInjector.java [101:122]


    private <T> Object getService(Object adaptable, Class<T> type, String filter,
            DisposalCallbackRegistry callbackRegistry, BundleContext modelContext) {
        // cannot use SlingScriptHelper since it does not support ordering by service ranking due to https://issues.apache.org/jira/browse/SLING-5665
        try {
            ServiceReference<?>[] refs = modelContext.getServiceReferences(type.getName(), filter);
            if (refs != null && refs.length > 0) {
                // sort by reverse service ranking (highest first) (see ServiceReference.compareTo)
                List<ServiceReference<?>> references = Arrays.asList(refs);
                Collections.sort(references, Collections.reverseOrder());
                for(final ServiceReference<?> ref : references) {
                    final Object obj = modelContext.getService(ref);
                    if ( obj != null ) {
                        callbackRegistry.addDisposalCallback(new Callback(new ServiceReference[] {ref}, modelContext));
                        return obj;
                    }
                }
            }
        } catch (InvalidSyntaxException e) {
            log.error("invalid filter expression", e);
        }
        return null;
    }