diff --git a/slice-core-api/pom.xml b/slice-core-api/pom.xml index b692b292..433fe26e 100644 --- a/slice-core-api/pom.xml +++ b/slice-core-api/pom.xml @@ -72,11 +72,6 @@ org.osgi.core - - org.apache.sling - org.apache.sling.commons.classloader - - javax.servlet diff --git a/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceTagUtils.java b/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceTagUtils.java index 54ea9cd6..36712b8b 100644 --- a/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceTagUtils.java +++ b/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceTagUtils.java @@ -35,7 +35,6 @@ import com.cognifide.slice.api.injector.InjectorWithContext; import com.cognifide.slice.api.injector.InjectorsRepository; import com.cognifide.slice.api.provider.ModelProvider; -import org.apache.sling.commons.classloader.DynamicClassLoaderManager; public final class SliceTagUtils { @@ -83,11 +82,24 @@ public static T getFromCurrentPath(final PageContext pageContext, final Clas * @throws ClassNotFoundException if the class was not found */ public static Class getClassFromType(final PageContext pageContext, final String type) throws ClassNotFoundException { - final SlingScriptHelper scriptHelper = getSlingScriptHelper(pageContext); - final DynamicClassLoaderManager dynamicClassLoaderManager = scriptHelper - .getService(DynamicClassLoaderManager.class); - final ClassLoader classLoader = dynamicClassLoaderManager.getDynamicClassLoader(); - return classLoader.loadClass(type); + final SlingHttpServletRequest request = SliceTagUtils.slingRequestFrom(pageContext); + final InjectorsRepository injectorsRepository = SliceTagUtils.injectorsRepositoryFrom(pageContext); + + final String injectorName = getInjectorName(request, null, injectorsRepository); + + final InjectorWithContext injector = injectorsRepository.getInjector(injectorName); + if (injector == null) { + throw new IllegalStateException("Guice injector not found: " + injectorName); + } + injector.pushContextProvider(contextProviderFrom(pageContext)); + + final ModelProvider modelProvider = injector.getInstance(ModelProvider.class); + + try { + return modelProvider.get(type, request.getResource()).getClass(); + } finally { + injector.popContextProvider(); + } } /**