You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2012/07/09 13:59:30 UTC
svn commit: r1359090 - in /cxf/branches/2.5.x-fixes: ./
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/servlet/CXFNonSpringJaxrsServlet.java
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);