package org.jboss.resteasy.utils; import javax.ws.rs.ApplicationPath; import javax.ws.rs.core.Application; import javax.ws.rs.ext.Provider; import java.io.InputStream; import java.util.HashSet; import java.util.Set; /** * Base class used from deployment. */ @Provider @ApplicationPath("/") public class TestApplication extends Application { public static Set<Class<?>> classes = new HashSet<Class<?>>(); public static Set<Object> singletons = new HashSet<Object>(); /** * Load resources from classes.txt file from deployment * * @return Array of class names. */ public static String[] getClassesFromDeployment(String name) { String resource = name + ".txt"; String stripped = resource.startsWith("/") ? resource.substring(1) : resource; InputStream stream = null; ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); if (classLoader != null) { stream = classLoader.getResourceAsStream(stripped); } if (stream == null) { stream = TestApplication.class.getResourceAsStream(resource); } if (stream == null) { stream = TestApplication.class.getClassLoader().getResourceAsStream(stripped); } if (stream == null) { return new String[0]; } return convertStreamToString(stream).split(","); } /** * Convert input stream to String * * @param is Input stream * @return string */ private static String convertStreamToString(final java.io.InputStream is) { java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A"); return s.hasNext() ? s.next() : ""; } /** * @see javax.ws.rs.core.Application#getClasses() */ @Override public Set<Class<?>> getClasses() { if (classes.isEmpty()) { for (String clazz : getClassesFromDeployment("classes")) { if (!clazz.isEmpty()) { try { classes.add(Class.forName(clazz)); } catch (ClassNotFoundException e) { throw new RuntimeException("Class " + clazz + " not found.", e); } } } } return classes; } /** * @see javax.ws.rs.core.Application#getSingletons() */ @Override public Set<Object> getSingletons() { if (singletons.isEmpty()) { for (String clazz : getClassesFromDeployment("singletons")) { if (!clazz.isEmpty()) { try { singletons.add(Class.forName(clazz).newInstance()); } catch (Exception e) { throw new RuntimeException("Class " + clazz + " not found.", e); } } } } return singletons; } }