Author: rmannibucau Date: Thu Feb 7 17:59:53 2013 New Revision: 1443632 URL: http://svn.apache.org/r1443632 Log: propagating the contextRoot for all rest deployment
Modified: tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java tomee/tomee/trunk/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java tomee/tomee/trunk/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsHttpListener.java Modified: tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java?rev=1443632&r1=1443631&r2=1443632&view=diff ============================================================================== --- tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java (original) +++ tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java Thu Feb 7 17:59:53 2013 @@ -116,7 +116,14 @@ public class CxfRsHttpListener implement if (httpRequest instanceof HttpRequestImpl) { ((HttpRequestImpl) httpRequest).initPathFromContext(context); } - httpRequest.setAttribute("org.apache.cxf.transport.endpoint.address", BaseUrlHelper.getBaseURL(httpRequest) + "/"); + + + String baseURL = BaseUrlHelper.getBaseURL(httpRequest); + if (!baseURL.endsWith("/")) { + baseURL += "/"; + } + + httpRequest.setAttribute("org.apache.cxf.transport.endpoint.address", baseURL); // delegate invocation destination.invoke(null, httpRequest.getServletContext(), new HttpServletRequestWrapper(httpRequest) { @@ -184,31 +191,38 @@ public class CxfRsHttpListener implement } @Override - public void deploySingleton(String fullContext, Object o, Application appInstance, + public void deploySingleton(String contextRoot, String fullContext, Object o, Application appInstance, Collection<Object> additionalProviders, ServiceConfiguration configuration) { - deploy(o.getClass(), fullContext, new SingletonResourceProvider(o), o, appInstance, null, additionalProviders, configuration); + deploy(contextRoot, o.getClass(), fullContext, new SingletonResourceProvider(o), o, appInstance, null, additionalProviders, configuration); } @Override - public void deployPojo(String fullContext, Class<?> loadedClazz, Application app, Collection<Injection> injections, + public void deployPojo(String contextRoot, String fullContext, Class<?> loadedClazz, Application app, Collection<Injection> injections, Context context, WebBeansContext owbCtx, Collection<Object> additionalProviders, ServiceConfiguration configuration) { - deploy(loadedClazz, fullContext, new OpenEJBPerRequestPojoResourceProvider(loadedClazz, injections, context, owbCtx), + deploy(contextRoot, loadedClazz, fullContext, new OpenEJBPerRequestPojoResourceProvider(loadedClazz, injections, context, owbCtx), null, app, null, additionalProviders, configuration); } @Override - public void deployEJB(String fullContext, BeanContext beanContext, Collection<Object> additionalProviders, ServiceConfiguration configuration) { + public void deployEJB(String contextRoot, String fullContext, BeanContext beanContext, Collection<Object> additionalProviders, ServiceConfiguration configuration) { final Object proxy = ProxyEJB.subclassProxy(beanContext); - deploy(beanContext.getBeanClass(), fullContext, new NoopResourceProvider(beanContext.getBeanClass(), proxy), + deploy(contextRoot, beanContext.getBeanClass(), fullContext, new NoopResourceProvider(beanContext.getBeanClass(), proxy), proxy, null, new OpenEJBEJBInvoker(Collections.singleton(beanContext)), additionalProviders, configuration); } - private void deploy(Class<?> clazz, String address, ResourceProvider rp, Object serviceBean, Application app, Invoker invoker, - Collection<Object> additionalProviders, ServiceConfiguration configuration) { + private void deploy(String contextRoot, Class<?> clazz, String address, ResourceProvider rp, Object serviceBean, + Application app, Invoker invoker, Collection<Object> additionalProviders, ServiceConfiguration configuration) { final JAXRSServerFactoryBean factory = newFactory(address); configureFactory(additionalProviders, configuration, factory); factory.setResourceClasses(clazz); + context = contextRoot; + if (context == null) { + context = ""; + } + if (!context.startsWith("/")) { + context = "/" + context; + } if (rp != null) { factory.setResourceProvider(rp); Modified: tomee/tomee/trunk/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java?rev=1443632&r1=1443631&r2=1443632&view=diff ============================================================================== --- tomee/tomee/trunk/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java (original) +++ tomee/tomee/trunk/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java Thu Feb 7 17:59:53 2013 @@ -629,7 +629,7 @@ public abstract class RESTService implem final RsRegistry.AddressInfo address = rsRegistry.createRsHttpListener(web, listener, classLoader, nopath.substring(NOPATH_PREFIX.length() - 1), virtualHost); services.add(new DeployedService(address.complete, web, o.getClass().getName())); - listener.deploySingleton(getFullContext(address.base, contextRoot), o, appInstance, additionalProviders, configuration); + listener.deploySingleton(contextRoot, getFullContext(address.base, contextRoot), o, appInstance, additionalProviders, configuration); LOGGER.info("deployed REST singleton: " + o); } @@ -645,7 +645,7 @@ public abstract class RESTService implem final RsRegistry.AddressInfo address = rsRegistry.createRsHttpListener(web, listener, classLoader, nopath.substring(NOPATH_PREFIX.length() - 1), virtualHost); services.add(new DeployedService(address.complete, contextRoot, loadedClazz.getName())); - listener.deployPojo(getFullContext(address.base, contextRoot), loadedClazz, app, injections, context, owbCtx, + listener.deployPojo(contextRoot, getFullContext(address.base, contextRoot), loadedClazz, app, injections, context, owbCtx, additionalProviders, config); LOGGER.info("REST Service: " + address.complete + " -> Pojo " + loadedClazz.getName()); @@ -657,7 +657,7 @@ public abstract class RESTService implem final RsRegistry.AddressInfo address = rsRegistry.createRsHttpListener(web, listener, beanContext.getClassLoader(), nopath.substring(NOPATH_PREFIX.length() - 1), virtualHost); services.add(new DeployedService(address.complete, context, beanContext.getBeanClass().getName())); - listener.deployEJB(getFullContext(address.base, context), beanContext, + listener.deployEJB(context, getFullContext(address.base, context), beanContext, additionalProviders, new ServiceConfiguration(beanContext.getProperties(), serviceInfos)); LOGGER.info("REST Service: " + address.complete + " -> EJB " + beanContext.getEjbName()); Modified: tomee/tomee/trunk/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsHttpListener.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsHttpListener.java?rev=1443632&r1=1443631&r2=1443632&view=diff ============================================================================== --- tomee/tomee/trunk/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsHttpListener.java (original) +++ tomee/tomee/trunk/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsHttpListener.java Thu Feb 7 17:59:53 2013 @@ -29,13 +29,13 @@ import java.util.Collection; import java.util.Map; public interface RsHttpListener extends HttpListener { - void deploySingleton(String fullContext, Object o, Application appInstance, + void deploySingleton(String webContext, String fullContext, Object o, Application appInstance, Collection<Object> additionalProviders, ServiceConfiguration serviceInfos); - void deployPojo(String fullContext, Class<?> loadedClazz, Application app, Collection<Injection> injections, + void deployPojo(String webContext, String fullContext, Class<?> loadedClazz, Application app, Collection<Injection> injections, Context context, WebBeansContext owbCtx, Collection<Object> additionalProviders, ServiceConfiguration serviceInfos); - void deployEJB(String fullContext, BeanContext beanContext, Collection<Object> additionalProviders, ServiceConfiguration serviceInfos); + void deployEJB(String webContext, String fullContext, BeanContext beanContext, Collection<Object> additionalProviders, ServiceConfiguration serviceInfos); void undeploy();