Skip to content

Commit

Permalink
Deployment path for war archives containing Application classes witho…
Browse files Browse the repository at this point in the history
…ut @ApplicationPath annotation
  • Loading branch information
asoldano committed Nov 20, 2017
1 parent 5bfbf9c commit 0e34873
Showing 1 changed file with 65 additions and 45 deletions.
Expand Up @@ -26,6 +26,7 @@
import java.util.ArrayList;
import java.util.List;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import javax.xml.ws.spi.Provider;

Expand Down Expand Up @@ -98,53 +99,11 @@ private void startDeploymentBus(final Deployment dep)
List<Class<?>> applications = md.getScannedApplicationClasses();
if (!applications.isEmpty()) {
for (Class<?> appClazz : applications) {
ApplicationInfo providerApp = (ApplicationInfo)createSingletonInstance(appClazz, bus);

JAXRSServerFactoryBean bean = ResourceUtils.createApplication(providerApp.getProvider(), false, false);
bean.setBus(bus);
bean.setApplicationInfo(providerApp);
setJSONProviders(bean);
bean.create();
createFromApplication(md, appClazz, bus, classLoader);
}
} else {
JAXRSServerFactoryBean bean = new JAXRSServerFactoryBean();
bean.setBus(bus);
bean.setAddress("/"); //TODO!!!
//resources...
if (!md.getScannedResourceClasses().isEmpty()) {
List<Class<?>> resources = new ArrayList<>();
try {
for (String cl : md.getScannedResourceClasses()) {
resources.add(classLoader.loadClass(cl));
}
} catch (ClassNotFoundException cnfe) {
throw new WSFException(cnfe);
}
bean.setResourceClasses(resources);
}
//resource providers (CXF)... ?

//jndi resource... ?

//providers...
if (!md.getScannedProviderClasses().isEmpty()) {
List<Object> providers = new ArrayList<>();
try {
for (String cl : md.getScannedProviderClasses()) {
Class<?> clazz = classLoader.loadClass(cl);
providers.add((ApplicationInfo)createSingletonInstance(clazz, bus));
}
} catch (ClassNotFoundException cnfe) {
throw new WSFException(cnfe);
}
bean.setProviders(providers);
}
setJSONProviders(bean);
bean.create();


create(md, bus, classLoader);
}

dep.addAttachment(Bus.class, bus);
}
finally
Expand All @@ -154,6 +113,67 @@ private void startDeploymentBus(final Deployment dep)
}
}

private static void createFromApplication(JAXRSDeploymentMetadata md, Class<?> appClazz, Bus bus, ClassLoader classLoader) {
ApplicationInfo providerApp = (ApplicationInfo)createSingletonInstance(appClazz, bus);
Application app = providerApp.getProvider();
JAXRSServerFactoryBean bean = ResourceUtils.createApplication(app, false, false);
bean.setBus(bus);
bean.setApplicationInfo(providerApp);
if (!appClazz.isAnnotationPresent(ApplicationPath.class)) {
if (app.getClasses().isEmpty() && app.getSingletons().isEmpty()) {
setResources(bean, md, bus, classLoader);
setProviders(bean, md, bus, classLoader);
}
}
setJSONProviders(bean);
bean.create();
}

private static void create(JAXRSDeploymentMetadata md, Bus bus, ClassLoader classLoader) {
JAXRSServerFactoryBean bean = new JAXRSServerFactoryBean();
bean.setBus(bus);
bean.setAddress("/"); //TODO!!!
//resources...
setResources(bean, md, bus, classLoader);
//resource providers (CXF)... ?

//jndi resource... ?

//providers...
setProviders(bean, md, bus, classLoader);
setJSONProviders(bean);
bean.create();
}

private static void setResources(JAXRSServerFactoryBean bean, JAXRSDeploymentMetadata md, Bus bus, ClassLoader classLoader) {
if (!md.getScannedResourceClasses().isEmpty()) {
List<Class<?>> resources = new ArrayList<>();
try {
for (String cl : md.getScannedResourceClasses()) {
resources.add(classLoader.loadClass(cl));
}
} catch (ClassNotFoundException cnfe) {
throw new WSFException(cnfe);
}
bean.setResourceClasses(resources);
}
}

private static void setProviders(JAXRSServerFactoryBean bean, JAXRSDeploymentMetadata md, Bus bus, ClassLoader classLoader) {
if (!md.getScannedProviderClasses().isEmpty()) {
List<Object> providers = new ArrayList<>();
try {
for (String cl : md.getScannedProviderClasses()) {
Class<?> clazz = classLoader.loadClass(cl);
providers.add((ApplicationInfo)createSingletonInstance(clazz, bus));
}
} catch (ClassNotFoundException cnfe) {
throw new WSFException(cnfe);
}
bean.setProviders(providers);
}
}

private static void setJSONProviders(JAXRSServerFactoryBean bean) {
//Add default Jettison provider
@SuppressWarnings("rawtypes")
Expand All @@ -163,7 +183,7 @@ private static void setJSONProviders(JAXRSServerFactoryBean bean) {
//TODO: Add jackson provider
}

private Object createSingletonInstance(Class<?> cls, Bus bus)
private static Object createSingletonInstance(Class<?> cls, Bus bus)
{
Constructor<?> c = ResourceUtils.findResourceConstructor(cls, false);
if (c == null)
Expand Down

0 comments on commit 0e34873

Please sign in to comment.