Repository: cxf Updated Branches: refs/heads/3.1.x-fixes ab09ffcae -> 84b6266ae
[CXF-7309] Trying to prevent NPE when the providers are hot-redeployed, patch from Ezequiel Rosas Garcia applied Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/84b6266a Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/84b6266a Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/84b6266a Branch: refs/heads/3.1.x-fixes Commit: 84b6266ae8bf57067040120fb0336e0480546ec7 Parents: ab09ffc Author: Sergey Beryozkin <sberyoz...@gmail.com> Authored: Fri May 26 17:14:00 2017 +0100 Committer: Sergey Beryozkin <sberyoz...@gmail.com> Committed: Fri May 26 17:14:00 2017 +0100 ---------------------------------------------------------------------- .../apache/cxf/jaxrs/utils/InjectionUtils.java | 34 ++++++++++++-------- .../java/org/apache/cxf/jaxrs/Customer.java | 4 +-- .../apache/cxf/jaxrs/utils/JAXRSUtilsTest.java | 2 +- 3 files changed, 24 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/84b6266a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java ---------------------------------------------------------------------- diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java index 73b3e56..9101949 100644 --- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java +++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java @@ -1093,18 +1093,13 @@ public final class InjectionUtils { synchronized (instance) { for (Map.Entry<Class<?>, Method> entry : cri.getContextMethods().entrySet()) { Method method = entry.getValue(); + final Object proxy = extractFromSetter(instance, method); + if (proxy instanceof ThreadLocalProxy) { + continue; + } Object value = method.getParameterTypes()[0] == Application.class - ? app : cri.getContextSetterProxy(method); - try { - if (value == InjectionUtils.extractFromMethod(instance, - getGetterFromSetter(method), - false)) { - continue; - } + ? app : cri.getContextSetterProxy(method); - } catch (Throwable t) { - // continue - } InjectionUtils.injectThroughMethod(instance, method, value); } @@ -1167,10 +1162,12 @@ public final class InjectionUtils { if (!cri.isSingleton()) { InjectionUtils.injectThroughMethod(requestObject, method, o, message); } else { - ThreadLocalProxy<Object> proxy - = (ThreadLocalProxy<Object>)cri.getContextSetterProxy(method); + Object proxy = extractFromSetter(requestObject, method); + if (!(proxy instanceof ThreadLocalProxy)) { + proxy = cri.getContextSetterProxy(method); + } if (proxy != null) { - proxy.set(o); + ((ThreadLocalProxy<Object>) proxy).set(o); } } @@ -1475,4 +1472,15 @@ public final class InjectionUtils { public static Object getEntity(Object o) { return o instanceof GenericEntity ? ((GenericEntity<?>)o).getEntity() : o; } + public static Object extractFromSetter(Object provider, Method m) { + if (provider == null) { + return null; + } + try { + final Method getter = getGetterFromSetter(m); + return extractFromMethod(provider, getter, false); + } catch (Throwable t) { + return null; + } + } } http://git-wip-us.apache.org/repos/asf/cxf/blob/84b6266a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer.java ---------------------------------------------------------------------- diff --git a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer.java b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer.java index f55fc1d..53c7bab 100644 --- a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer.java +++ b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer.java @@ -273,11 +273,11 @@ public class Customer extends AbstractCustomer implements CustomerInfo { } @Context - public void setServletContext(ServletContext sc) { + public void setServletContext3(ServletContext sc) { servletContext3 = sc; } - public ServletContext getThreadLocalServletContext() { + public ServletContext getServletContext3() { return servletContext3; } http://git-wip-us.apache.org/repos/asf/cxf/blob/84b6266a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java ---------------------------------------------------------------------- diff --git a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java index 04d5455..a24fd64 100644 --- a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java +++ b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java @@ -1817,7 +1817,7 @@ public class JAXRSUtilsTest extends Assert { ((ThreadLocalProxy<Providers>)c.getBodyWorkers()).get().getClass()); assertSame(servletContextMock, - ((ThreadLocalProxy<ServletContext>)c.getThreadLocalServletContext()).get()); + ((ThreadLocalProxy<ServletContext>)c.getServletContext3()).get()); assertSame(servletContextMock, ((ThreadLocalProxy<ServletContext>)c.getServletContext()).get()); assertSame(servletContextMock,