Author: sergeyb Date: Mon Jul 9 11:59:30 2012 New Revision: 1359090 URL: http://svn.apache.org/viewvc?rev=1359090&view=rev Log: Merged revisions 1359081 via svnmerge from https://svn.apache.org/repos/asf/cxf/branches/2.6.x-fixes
................ r1359081 | sergeyb | 2012-07-09 12:50:29 +0100 (Mon, 09 Jul 2012) | 9 lines Merged revisions 1359078 via svnmerge from https://svn.apache.org/repos/asf/cxf/trunk ........ r1359078 | sergeyb | 2012-07-09 12:44:36 +0100 (Mon, 09 Jul 2012) | 1 line CXF-4413,CXF-3949:Getting CXFNonSpringJAXRSServlet to support out fault interceptors and invokers, as well as load early RuntimeDelegate implementation as suggested by Stephan Klevenz ........ ................ Modified: cxf/branches/2.5.x-fixes/ (props changed) cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/servlet/CXFNonSpringJaxrsServlet.java Propchange: cxf/branches/2.5.x-fixes/ ------------------------------------------------------------------------------ Merged /cxf/trunk:r1359078 Merged /cxf/branches/2.6.x-fixes:r1359081 Propchange: cxf/branches/2.5.x-fixes/ ------------------------------------------------------------------------------ Binary property 'svnmerge-integrated' - no diff available. Modified: cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/servlet/CXFNonSpringJaxrsServlet.java URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/servlet/CXFNonSpringJaxrsServlet.java?rev=1359090&r1=1359089&r2=1359090&view=diff ============================================================================== --- cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/servlet/CXFNonSpringJaxrsServlet.java (original) +++ cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/servlet/CXFNonSpringJaxrsServlet.java Mon Jul 9 11:59:30 2012 @@ -32,6 +32,7 @@ import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.ws.rs.core.Application; +import javax.ws.rs.ext.RuntimeDelegate; import org.apache.cxf.common.classloader.ClassLoaderUtils; import org.apache.cxf.common.logging.LogUtils; @@ -46,10 +47,15 @@ import org.apache.cxf.jaxrs.utils.Inject import org.apache.cxf.jaxrs.utils.ResourceUtils; import org.apache.cxf.message.Message; import org.apache.cxf.message.MessageUtils; +import org.apache.cxf.service.invoker.Invoker; import org.apache.cxf.transport.servlet.CXFNonSpringServlet; public class CXFNonSpringJaxrsServlet extends CXFNonSpringServlet { - + static { + // Ensure that the correct JAX-RS implementation is loaded + RuntimeDelegate runtimeDelegate = new org.apache.cxf.jaxrs.impl.RuntimeDelegateImpl(); + RuntimeDelegate.setInstance(runtimeDelegate); + } private static final Logger LOG = LogUtils.getL7dLogger(CXFNonSpringJaxrsServlet.class); private static final String USER_MODEL_PARAM = "user.model"; @@ -58,7 +64,9 @@ public class CXFNonSpringJaxrsServlet ex private static final String SERVICE_CLASSES_PARAM = "jaxrs.serviceClasses"; private static final String PROVIDERS_PARAM = "jaxrs.providers"; private static final String OUT_INTERCEPTORS_PARAM = "jaxrs.outInterceptors"; + private static final String OUT_FAULT_INTERCEPTORS_PARAM = "jaxrs.outFaultInterceptors"; private static final String IN_INTERCEPTORS_PARAM = "jaxrs.inInterceptors"; + private static final String INVOKER_PARAM = "jaxrs.invoker"; private static final String SERVICE_SCOPE_PARAM = "jaxrs.scope"; private static final String EXTENSIONS_PARAM = "jaxrs.extensions"; private static final String LANGUAGES_PARAM = "jaxrs.languages"; @@ -99,6 +107,7 @@ public class CXFNonSpringJaxrsServlet ex setDocLocation(bean, servletConfig); setSchemasLocations(bean, servletConfig); setAllInterceptors(bean, servletConfig); + setInvoker(bean, servletConfig); Map<Class, Map<String, String>> resourceClasses = getServiceClasses(servletConfig, modelRef != null); @@ -136,8 +145,10 @@ public class CXFNonSpringJaxrsServlet ex String.class, Object.class)); } - protected void setAllInterceptors(JAXRSServerFactoryBean bean, ServletConfig servletConfig) { + protected void setAllInterceptors(JAXRSServerFactoryBean bean, ServletConfig servletConfig) + throws ServletException { setInterceptors(bean, servletConfig, OUT_INTERCEPTORS_PARAM); + setInterceptors(bean, servletConfig, OUT_FAULT_INTERCEPTORS_PARAM); setInterceptors(bean, servletConfig, IN_INTERCEPTORS_PARAM); } @@ -168,7 +179,7 @@ public class CXFNonSpringJaxrsServlet ex @SuppressWarnings("unchecked") protected void setInterceptors(JAXRSServerFactoryBean bean, ServletConfig servletConfig, - String paramName) { + String paramName) throws ServletException { String value = servletConfig.getInitParameter(paramName); if (value == null) { return; @@ -180,32 +191,54 @@ public class CXFNonSpringJaxrsServlet ex String theValue = getClassNameAndProperties(interceptorVal, props); if (theValue.length() != 0) { try { - Class<?> intClass = ClassLoaderUtils.loadClass(theValue, - CXFNonSpringJaxrsServlet.class); + Class<?> intClass = loadClass(theValue, "Interceptor"); Object object = intClass.newInstance(); injectProperties(object, props); list.add((Interceptor<? extends Message>)object); - } catch (ClassNotFoundException ex) { - LOG.warning("Interceptor class " + theValue + " can not be found"); - } catch (InstantiationException ex) { - LOG.warning(theValue + " class can not be instantiated"); - ex.printStackTrace(); - } catch (IllegalAccessException ex) { - LOG.warning("CXF Interceptor can not be instantiated due to IllegalAccessException"); - } catch (ClassCastException ex) { - LOG.warning(theValue + " class does not implement " + Interceptor.class.getName()); + } catch (ServletException ex) { + throw ex; + } catch (Exception ex) { + LOG.warning("Interceptor class " + theValue + " can not be created"); + throw new ServletException(ex); } } } if (list.size() > 0) { if (OUT_INTERCEPTORS_PARAM.equals(paramName)) { bean.setOutInterceptors(list); + } else if (OUT_FAULT_INTERCEPTORS_PARAM.equals(paramName)) { + bean.setOutFaultInterceptors(list); } else { bean.setInInterceptors(list); } } } + protected void setInvoker(JAXRSServerFactoryBean bean, ServletConfig servletConfig) + throws ServletException { + String value = servletConfig.getInitParameter(INVOKER_PARAM); + if (value == null) { + return; + } + Map<String, String> props = new HashMap<String, String>(); + String theValue = getClassNameAndProperties(value, props); + if (theValue.length() != 0) { + try { + Class<?> intClass = loadClass(theValue, "Invoker"); + Object object = intClass.newInstance(); + injectProperties(object, props); + bean.setInvoker((Invoker)object); + } catch (ServletException ex) { + throw ex; + } catch (Exception ex) { + LOG.warning("Invoker class " + theValue + " can not be created"); + throw new ServletException(ex); + } + } + + + } + protected Map<Class, Map<String, String>> getServiceClasses(ServletConfig servletConfig, boolean modelAvailable) throws ServletException { String serviceBeans = servletConfig.getInitParameter(SERVICE_CLASSES_PARAM); @@ -355,6 +388,7 @@ public class CXFNonSpringJaxrsServlet ex MessageUtils.isTrue(ignoreParam), getStaticSubResolutionValue(servletConfig)); setAllInterceptors(bean, servletConfig); + setInvoker(bean, servletConfig); setExtensions(bean, servletConfig); setDocLocation(bean, servletConfig); setSchemasLocations(bean, servletConfig);
