You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by re...@apache.org on 2018/05/11 00:11:15 UTC
[cxf] branch 3.1.x-fixes updated: [CXF-7640] Create a form to set the use of Spring in the classHelper … (#387)
This is an automated email from the ASF dual-hosted git repository.
reta pushed a commit to branch 3.1.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git
The following commit(s) were added to refs/heads/3.1.x-fixes by this push:
new efd9e91 [CXF-7640] Create a form to set the use of Spring in the classHelper … (#387)
efd9e91 is described below
commit efd9e916b3bf6b5efe537f07c15f78d41d65edf1
Author: Osvaldo Pina <os...@gmail.com>
AuthorDate: Sun Apr 29 17:09:17 2018 -0300
[CXF-7640] Create a form to set the use of Spring in the classHelper … (#387)
* [CXF-7640] Create a form to set the use of Spring in the classHelper on a per client way
* [CXF-7640] Create a form to set the use of Spring in the classHelper on a per client way
---
.../org/apache/cxf/common/util/ClassHelper.java | 61 +++++---
.../apache/cxf/common/util/ClassHelperTest.java | 168 +++++++++++++++++++++
2 files changed, 211 insertions(+), 18 deletions(-)
diff --git a/core/src/main/java/org/apache/cxf/common/util/ClassHelper.java b/core/src/main/java/org/apache/cxf/common/util/ClassHelper.java
index 6b50ef1..91be9e8 100644
--- a/core/src/main/java/org/apache/cxf/common/util/ClassHelper.java
+++ b/core/src/main/java/org/apache/cxf/common/util/ClassHelper.java
@@ -19,25 +19,31 @@
package org.apache.cxf.common.util;
+
import java.lang.reflect.Proxy;
import org.apache.cxf.Bus;
import org.apache.cxf.BusFactory;
/**
- *
+ *
*/
public class ClassHelper {
+
+ public static final String USE_DEFAULT_CLASS_HELPER = "org.apache.cxf.useDefaultClassHelpers";
+
static final ClassHelper HELPER;
+ static final ClassHelper DEFAULT_HELPER;
+
static {
- HELPER = getClassHelper();
+ DEFAULT_HELPER = new ClassHelper();
+ HELPER = getClassHelper(DEFAULT_HELPER);
}
-
-
+
protected ClassHelper() {
}
-
- private static ClassHelper getClassHelper() {
+
+ private static ClassHelper getClassHelper(ClassHelper defaultHelper) {
boolean useSpring = true;
String s = SystemPropertyAction.getPropertyOrNull("org.apache.cxf.useSpringClassHelpers");
if (!StringUtils.isEmpty(s)) {
@@ -50,39 +56,58 @@ public class ClassHelper {
// ignore
}
}
- return new ClassHelper();
+ return defaultHelper;
}
-
+
protected Class<?> getRealClassInternal(Object o) {
return getRealObjectInternal(o).getClass();
}
-
+
protected Class<?> getRealClassFromClassInternal(Class<?> cls) {
return cls;
}
+
protected Object getRealObjectInternal(Object o) {
return o instanceof Proxy ? Proxy.getInvocationHandler(o) : o;
}
-
+
public static Class<?> getRealClass(Object o) {
return getRealClass(null, o);
}
-
+
public static Class<?> getRealClassFromClass(Class<?> cls) {
- return HELPER.getRealClassFromClassInternal(cls);
+ return getRealClassFromClass(null, cls);
+ }
+
+ public static Class<?> getRealClassFromClass(Bus bus, Class<?> cls) {
+ bus = getBus(bus);
+ return getContextClassHelper(bus).getRealClassFromClassInternal(cls);
}
-
+
public static Object getRealObject(Object o) {
- return HELPER.getRealObjectInternal(o);
+ Bus bus = getBus(null);
+ return getContextClassHelper(bus).getRealObjectInternal(o);
}
public static Class<?> getRealClass(Bus bus, Object o) {
- bus = bus == null ? BusFactory.getThreadDefaultBus() : bus;
+ bus = getBus(bus);
if (bus != null && bus.getProperty(ClassUnwrapper.class.getName()) != null) {
- ClassUnwrapper unwrapper = (ClassUnwrapper)bus.getProperty(ClassUnwrapper.class.getName());
+ ClassUnwrapper unwrapper = (ClassUnwrapper) bus.getProperty(ClassUnwrapper.class.getName());
return unwrapper.getRealClass(o);
- } else {
- return HELPER.getRealClassInternal(o);
}
+ return getContextClassHelper(bus).getRealClassInternal(o);
+ }
+
+ private static ClassHelper getContextClassHelper(Bus bus) {
+ return (DEFAULT_HELPER == HELPER || checkUseDefaultClassHelper(bus)) ? DEFAULT_HELPER : HELPER;
}
+
+ private static Bus getBus(Bus bus) {
+ return bus == null ? BusFactory.getThreadDefaultBus() : bus;
+ }
+
+ private static boolean checkUseDefaultClassHelper(Bus bus) {
+ return bus != null && Boolean.TRUE.equals(bus.getProperty(USE_DEFAULT_CLASS_HELPER));
+ }
+
}
diff --git a/core/src/test/java/org/apache/cxf/common/util/ClassHelperTest.java b/core/src/test/java/org/apache/cxf/common/util/ClassHelperTest.java
new file mode 100644
index 0000000..6df5084
--- /dev/null
+++ b/core/src/test/java/org/apache/cxf/common/util/ClassHelperTest.java
@@ -0,0 +1,168 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cxf.common.util;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactory;
+import org.easymock.EasyMock;
+
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import org.springframework.aop.AfterReturningAdvice;
+import org.springframework.aop.framework.ProxyFactory;
+
+public class ClassHelperTest extends Assert {
+
+ private Object proxiedObject;
+
+ private Object springAopObject;
+
+ private InvocationHandler realObjectInternalProxy;
+
+ private Object realObjectInternalSpring;
+
+ private Bus bus;
+
+ private Bus currentThreadBus;
+
+ @Before
+ public void setUp() {
+ realObjectInternalProxy = new InvocationHandler() {
+ @Override
+ public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
+ return null;
+ }
+ };
+
+ proxiedObject = Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),
+ new Class[]{AnyInterface.class}, realObjectInternalProxy);
+
+ realObjectInternalSpring = new Object();
+
+ ProxyFactory proxyFactory = new ProxyFactory(realObjectInternalSpring);
+ proxyFactory.addAdvice(new AfterReturningAdvice() {
+
+ @Override
+ public void afterReturning(Object o, Method method, Object[] objects, Object o1) throws Throwable {
+
+ }
+ });
+
+ springAopObject = proxyFactory.getProxy();
+
+ currentThreadBus = BusFactory.getThreadDefaultBus();
+
+ bus = EasyMock.mock(Bus.class);
+
+ BusFactory.setThreadDefaultBus(bus);
+ }
+
+ @After
+ public void tearDown() {
+ BusFactory.setThreadDefaultBus(currentThreadBus);
+ }
+
+ @Test
+ public void getRealClassPropertyWasSetInBus() {
+
+ EasyMock.expect(bus.getProperty(ClassHelper.USE_DEFAULT_CLASS_HELPER)).andReturn(true);
+ EasyMock.expect(bus.getProperty(ClassUnwrapper.class.getName())).andReturn(null);
+ EasyMock.replay(bus);
+
+ assertSame(realObjectInternalProxy.getClass(), ClassHelper.getRealClass(proxiedObject));
+
+ EasyMock.verify(bus);
+
+ }
+
+ @Test
+ public void getRealClassPropertyWasNotSetInBus() {
+
+ EasyMock.expect(bus.getProperty(ClassHelper.USE_DEFAULT_CLASS_HELPER)).andReturn(false);
+ EasyMock.expect(bus.getProperty(ClassUnwrapper.class.getName())).andReturn(null);
+ EasyMock.replay(bus);
+
+ assertSame(realObjectInternalSpring.getClass(), ClassHelper.getRealClass(springAopObject));
+
+ EasyMock.verify(bus);
+
+ }
+
+ @Test
+ public void getRealClassFromClassPropertyWasSetInBus() {
+
+ EasyMock.expect(bus.getProperty(ClassHelper.USE_DEFAULT_CLASS_HELPER)).andReturn(true);
+ EasyMock.replay(bus);
+
+ assertSame(proxiedObject.getClass(), ClassHelper.getRealClassFromClass(proxiedObject.getClass()));
+
+ EasyMock.verify(bus);
+
+ }
+
+ @Test
+ public void getRealClassFromClassPropertyWasNotSetInBus() {
+
+ EasyMock.expect(bus.getProperty(ClassHelper.USE_DEFAULT_CLASS_HELPER)).andReturn(false);
+ EasyMock.replay(bus);
+
+ assertSame(realObjectInternalSpring.getClass(), ClassHelper.getRealClassFromClass(springAopObject.getClass()));
+
+ EasyMock.verify(bus);
+
+ }
+
+
+ @Test
+ public void getRealObjectPropertyWasSetInBus() {
+
+ EasyMock.expect(bus.getProperty(ClassHelper.USE_DEFAULT_CLASS_HELPER)).andReturn(true);
+ EasyMock.replay(bus);
+
+ assertSame(realObjectInternalProxy, ClassHelper.getRealObject(proxiedObject));
+
+ EasyMock.verify(bus);
+
+ }
+
+ @Test
+ public void getRealObjectPropertyWasNotSetInBus() {
+
+ EasyMock.expect(bus.getProperty(ClassHelper.USE_DEFAULT_CLASS_HELPER)).andReturn(false);
+ EasyMock.replay(bus);
+
+ assertSame(realObjectInternalSpring, ClassHelper.getRealObject(springAopObject));
+
+ EasyMock.verify(bus);
+
+ }
+
+ public interface AnyInterface {
+ void anyMethod();
+ }
+
+
+}
\ No newline at end of file
--
To stop receiving notification emails like this one, please contact
reta@apache.org.