rmannibucau commented on pull request #721:
URL: https://github.com/apache/cxf/pull/721#issuecomment-727572118
@dufoli congrats ;)
Wonder if the static weak maps can't be dropped with something like:
diff --git
a/core/src/main/java/org/apache/cxf/common/spi/ClassGeneratorClassLoader.java
b/core/src/main/java/org/apache/cxf/common/spi/ClassGeneratorClassLoader.java
index 72654c0d73..d1ac513e90 100644
---
a/core/src/main/java/org/apache/cxf/common/spi/ClassGeneratorClassLoader.java
+++
b/core/src/main/java/org/apache/cxf/common/spi/ClassGeneratorClassLoader.java
@@ -24,27 +24,28 @@ import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.ref.WeakReference;
+import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactory;
import org.apache.cxf.common.util.WeakIdentityHashMap;
public class ClassGeneratorClassLoader {
- protected static final Map<ClassLoader,
WeakReference<TypeHelperClassLoader>> LOADER_MAP
- = new WeakIdentityHashMap<>();
- protected static final Map<Class<?>,
WeakReference<TypeHelperClassLoader>> CLASS_MAP
- = new WeakIdentityHashMap<>();
private static final boolean DEBUG = true;
+ protected final Bus bus;
- public ClassGeneratorClassLoader() {
+ public ClassGeneratorClassLoader(final Bus bus) {
+ this.bus = bus == null ? BusFactory.getDefaultBus() : bus;
}
- protected Class<?> loadClass(String className, Class<?> clz, byte[]
bytes) {
+ protected Class<?> loadClass(Bus bus, String className, Class<?>
clz, byte[] bytes) {
if (DEBUG) {
saveClass(className, bytes);
}
- TypeHelperClassLoader loader =
ClassGeneratorClassLoader.getTypeHelperClassLoader(clz);
+ TypeHelperClassLoader loader =
bus.getExtension(TypeHelperClassLoader.class);
synchronized (loader) {
Class<?> cls = loader.lookupDefinedClass(className);
if (cls == null) {
@@ -63,7 +64,7 @@ public class ClassGeneratorClassLoader {
File file;
try {
- String classFileName = getFilePath(className);
+ String classFileName = "/tmp/" + getFilePath(className);
String finalFileName = classFileName;
file = new File(finalFileName);
int i = 1;
@@ -84,8 +85,8 @@ public class ClassGeneratorClassLoader {
e.printStackTrace();
}
}
- protected Class<?> loadClass(String className, ClassLoader l,
byte[] bytes) {
- TypeHelperClassLoader loader =
ClassGeneratorClassLoader.getTypeHelperClassLoader(l);
+ protected Class<?> loadClass(String className, byte[] bytes) {
+ TypeHelperClassLoader loader = getOrCreateLoader();
synchronized (loader) {
Class<?> cls = loader.lookupDefinedClass(className);
if (cls == null) {
@@ -94,39 +95,28 @@ public class ClassGeneratorClassLoader {
return cls;
}
}
- protected Class<?> findClass(String className, Class<?> clz) {
- TypeHelperClassLoader loader =
ClassGeneratorClassLoader.getTypeHelperClassLoader(clz);
- return loader.lookupDefinedClass(className);
- }
- protected Class<?> findClass(String className, ClassLoader l) {
- TypeHelperClassLoader loader =
ClassGeneratorClassLoader.getTypeHelperClassLoader(l);
- return loader.lookupDefinedClass(className);
+ protected Class<?> findClass(String className) {
+ return getOrCreateLoader().lookupDefinedClass(className);
}
- public static synchronized TypeHelperClassLoader
getTypeHelperClassLoader(ClassLoader l) {
- WeakReference<TypeHelperClassLoader> ref = LOADER_MAP.get(l);
- TypeHelperClassLoader ret;
- if (ref == null || ref.get() == null) {
- ret = new TypeHelperClassLoader(l);
- LOADER_MAP.put(l, new
WeakReference<TypeHelperClassLoader>(ret));
- } else {
- ret = ref.get();
- }
- return ret;
- }
- public static synchronized TypeHelperClassLoader
getTypeHelperClassLoader(Class<?> cls) {
- WeakReference<TypeHelperClassLoader> ref = CLASS_MAP.get(cls);
- TypeHelperClassLoader ret;
- if (ref == null || ref.get() == null) {
- ret = new TypeHelperClassLoader(cls.getClassLoader());
- CLASS_MAP.put(cls, new
WeakReference<TypeHelperClassLoader>(ret));
- } else {
- ret = ref.get();
+ private TypeHelperClassLoader getOrCreateLoader() {
+ TypeHelperClassLoader loader =
bus.getExtension(TypeHelperClassLoader.class);
+ if (loader == null) {
+ synchronized (bus) {
+ loader = bus.getExtension(TypeHelperClassLoader.class);
+ if (loader == null) {
+ ClassLoader parent =
bus.getExtension(ClassLoader.class);
+ if (parent == null) {
+ parent =
Thread.currentThread().getContextClassLoader();
+ }
+ loader = new TypeHelperClassLoader(parent);
+ bus.setExtension(loader,
TypeHelperClassLoader.class);
+ }
+ }
}
- return ret;
+ return loader;
}
-
public static class TypeHelperClassLoader extends ClassLoader {
ConcurrentHashMap<String, Class<?>> defined = new
ConcurrentHashMap<>();
diff --git
a/core/src/main/java/org/apache/cxf/common/spi/NamespaceClassGenerator.java
b/core/src/main/java/org/apache/cxf/common/spi/NamespaceClassGenerator.java
index a58199e05a..067ef3e2fe 100644
---
a/core/src/main/java/org/apache/cxf/common/spi/NamespaceClassGenerator.java
+++
b/core/src/main/java/org/apache/cxf/common/spi/NamespaceClassGenerator.java
@@ -35,6 +35,7 @@ public class NamespaceClassGenerator extends
ClassGeneratorClassLoader implement
ASMHelper helper;
public NamespaceClassGenerator(Bus bus) {
+ super(bus);
helper = bus.getExtension(ASMHelper.class);
}
@@ -52,16 +53,16 @@ public class NamespaceClassGenerator extends
ClassGeneratorClassLoader implement
String className = "org.apache.cxf.jaxb.NamespaceMapper";
className += postFix;
- Class<?> cls = findClass(className,
NamespaceClassGenerator.class);
+ Class<?> cls = findClass(className);
if (cls == null) {
- cls = findClass(className, mcls);
+ cls = findClass(className);
}
Throwable t = null;
if (cls == null) {
try {
byte[] bts = createNamespaceWrapperInternal(postFix);
className = "org.apache.cxf.jaxb.NamespaceMapper" +
postFix;
- return loadClass(className, mcls, bts);
+ return loadClass(className, bts);
} catch (RuntimeException ex) {
// continue
t = ex;
@@ -83,12 +84,12 @@ public class NamespaceClassGenerator extends
ClassGeneratorClassLoader implement
private Class<?> createEclipseNamespaceMapper(Class<?> mcls,
Map<String, String> map) {
String className = "org.apache.cxf.jaxb.EclipseNamespaceMapper";
- Class<?> cls = findClass(className,
NamespaceClassGenerator.class);
+ Class<?> cls = findClass(className);
if (cls != null) {
return cls;
}
byte[] bts = createEclipseNamespaceMapper();
- return loadClass(className, mcls, bts);
+ return loadClass(className, bts);
}
/*
@@ -157,7 +158,7 @@ public class NamespaceClassGenerator extends
ClassGeneratorClassLoader implement
mv.visitInsn(Opcodes.RETURN);
ASMHelper.Label l2 = helper.createLabel();
mv.visitLabel(l2);
- mv.visitMaxs(2, 2);
+ mv.visitMaxs(0, 0);
mv.visitEnd();
@@ -178,7 +179,7 @@ public class NamespaceClassGenerator extends
ClassGeneratorClassLoader implement
mv.visitLabel(l2);
mv.visitLocalVariable("this", "L" + slashedName + ";", null,
l0, l2, 0);
mv.visitLocalVariable("contextualNamespaceDecls",
"[Ljava/lang/String;", null, l0, l2, 1);
- mv.visitMaxs(2, 2);
+ mv.visitMaxs(0, 0);
mv.visitEnd();
mv = cw.visitMethod(Opcodes.ACC_PUBLIC,
"getContextualNamespaceDecls", "()[Ljava/lang/String;", null, null);
@@ -194,7 +195,7 @@ public class NamespaceClassGenerator extends
ClassGeneratorClassLoader implement
mv.visitLabel(l1);
mv.visitLocalVariable("this", "L" + slashedName + ";", null,
l0, l1, 0);
- mv.visitMaxs(1, 1);
+ mv.visitMaxs(0, 0);
mv.visitEnd();
@@ -282,7 +283,7 @@ public class NamespaceClassGenerator extends
ClassGeneratorClassLoader implement
mv.visitLocalVariable("sup", "[Ljava/lang/String;", null, l1,
l10, 1);
mv.visitLocalVariable("s", "Ljava/util/List;",
"Ljava/util/List<Ljava/lang/String;>;", l4, l10, 2);
mv.visitLocalVariable("x", "I", null, l5, l9, 3);
- mv.visitMaxs(3, 4);
+ mv.visitMaxs(0, 0);
mv.visitEnd();
cw.visitEnd();
@@ -332,7 +333,7 @@ public class NamespaceClassGenerator extends
ClassGeneratorClassLoader implement
mv.visitTypeInsn(Opcodes.ANEWARRAY, "java/lang/String");
mv.visitFieldInsn(Opcodes.PUTSTATIC, postFixedName,
"EMPTY_STRING", "[Ljava/lang/String;");
mv.visitInsn(Opcodes.RETURN);
- mv.visitMaxs(1, 0);
+ mv.visitMaxs(0, 0);
mv.visitEnd();
mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>",
@@ -366,7 +367,7 @@ public class NamespaceClassGenerator extends
ClassGeneratorClassLoader implement
mv.visitLocalVariable("nspref",
"Ljava/util/Map;",
"Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;",
l0, l4, 1);
- mv.visitMaxs(2, 2);
+ mv.visitMaxs(0, 0);
mv.visitEnd();
mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "getPreferredPrefix",
@@ -406,7 +407,7 @@ public class NamespaceClassGenerator extends
ClassGeneratorClassLoader implement
mv.visitLocalVariable("suggestion", "Ljava/lang/String;", null,
l0, l4, 2);
mv.visitLocalVariable("requirePrefix", "Z", null, l0, l4, 3);
mv.visitLocalVariable("prefix", "Ljava/lang/String;", null, l1,
l4, 4);
- mv.visitMaxs(2, 5);
+ mv.visitMaxs(0, 0);
mv.visitEnd();
mv = cw.visitMethod(Opcodes.ACC_PUBLIC,
"setContextualNamespaceDecls", "([Ljava/lang/String;)V", null, null);
@@ -425,7 +426,7 @@ public class NamespaceClassGenerator extends
ClassGeneratorClassLoader implement
mv.visitLabel(l2);
mv.visitLocalVariable("this", "L" + postFixedName + ";", null,
l0, l2, 0);
mv.visitLocalVariable("contextualNamespaceDecls",
"[Ljava/lang/String;", null, l0, l2, 1);
- mv.visitMaxs(2, 2);
+ mv.visitMaxs(0, 0);
mv.visitEnd();
mv = cw.visitMethod(Opcodes.ACC_PUBLIC,
"getContextualNamespaceDecls", "()[Ljava/lang/String;", null, null);
@@ -441,7 +442,7 @@ public class NamespaceClassGenerator extends
ClassGeneratorClassLoader implement
mv.visitLabel(l1);
mv.visitLocalVariable("this", "L" + postFixedName + ";", null,
l0, l1, 0);
- mv.visitMaxs(1, 1);
+ mv.visitMaxs(0, 0);
mv.visitEnd();
cw.visitEnd();
diff --git
a/core/src/main/java/org/apache/cxf/common/util/ASMHelperImpl.java
b/core/src/main/java/org/apache/cxf/common/util/ASMHelperImpl.java
index d33bf83c25..5ee0315eb1 100644
--- a/core/src/main/java/org/apache/cxf/common/util/ASMHelperImpl.java
+++ b/core/src/main/java/org/apache/cxf/common/util/ASMHelperImpl.java
@@ -213,34 +213,15 @@ public class ASMHelperImpl implements ASMHelper {
throw new RuntimeException("No ASM
ClassWriterFound", error);
}
}
+ // ASM >= 3.x (since cxf is java 8 min we don't care of asm
1/2)
try {
- // ASM 1.5.x/2.x
Constructor<?> cons
- = cwClass.getConstructor(new Class<?>[]
{Boolean.TYPE});
-
- try {
- // got constructor, now check if it's 1.x which is
very
- // different from 2.x and 3.x
- cwClass.getMethod("newConstInt", new Class<?>[]
{Integer.TYPE});
- // newConstInt was removed in 2.x, if we get this
far, we're
- // using 1.5.x,
- // set to null so we don't attempt to use it.
- badASM = true;
- } catch (Throwable t) {
- newCw = cons.newInstance(new Object[]
{Boolean.TRUE});
- }
-
- } catch (Throwable e) {
- // ASM 3.x/4.x
- try {
- Constructor<?> cons
- = cwClass.getConstructor(new Class<?>[]
{Integer.TYPE});
- int i =
cwClass.getField("COMPUTE_MAXS").getInt(null);
- i |=
cwClass.getField("COMPUTE_FRAMES").getInt(null);
- newCw = cons.newInstance(new Object[]
{Integer.valueOf(i)});
- } catch (Throwable e1) {
- // ignore
- }
+ = cwClass.getConstructor(new Class<?>[]
{Integer.TYPE});
+ int i = cwClass.getField("COMPUTE_MAXS").getInt(null);
+ i |= cwClass.getField("COMPUTE_FRAMES").getInt(null);
+ newCw = cons.newInstance(new Object[]
{Integer.valueOf(i)});
+ } catch (Throwable e1) {
+ // ignore
}
}
if (newCw != null) {
diff --git
a/core/src/main/java/org/apache/cxf/common/util/ReflectionInvokationHandler.java
b/core/src/main/java/org/apache/cxf/common/util/ReflectionInvokationHandler.java
index a7524b68ed..2fc51b09d0 100644
---
a/core/src/main/java/org/apache/cxf/common/util/ReflectionInvokationHandler.java
+++
b/core/src/main/java/org/apache/cxf/common/util/ReflectionInvokationHandler.java
@@ -53,6 +53,12 @@ public class ReflectionInvokationHandler implements
InvocationHandler {
Method m;
try {
m = targetClass.getMethod(method.getName(),
parameterTypes);
+ if ("visitMaxs".equalsIgnoreCase(method.getName()) && 2
== method.getParameterCount()) { // force to compute frames and stack
+ if (!m.isAccessible()) {
+ ReflectionUtil.setAccessible(m);
+ }
+ return m.invoke(target, 0, 0);
+ }
} catch (NoSuchMethodException nsme) {
boolean[] optionals = new
boolean[method.getParameterTypes().length];
diff --git
a/core/src/test/java/org/apache/cxf/common/util/ASMHelperTest.java
b/core/src/test/java/org/apache/cxf/common/util/ASMHelperTest.java
index b2c5ce70ce..c6e335b1c2 100644
--- a/core/src/test/java/org/apache/cxf/common/util/ASMHelperTest.java
+++ b/core/src/test/java/org/apache/cxf/common/util/ASMHelperTest.java
@@ -21,6 +21,8 @@ package org.apache.cxf.common.util;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
+import org.apache.cxf.Bus;
+import org.apache.cxf.bus.extension.ExtensionManagerBus;
import org.apache.cxf.common.spi.ClassGeneratorClassLoader;
import org.junit.Test;
@@ -43,12 +45,16 @@ public class ASMHelperTest {
@Test
public void testLoader() throws Exception {
- CustomLoader cl = new CustomLoader();
+ CustomLoader cl = new CustomLoader(new ExtensionManagerBus());
Class<?> clz = cl.createCustom();
assertNotNull(clz);
assertTrue(cl.isFound());
}
public class CustomLoader extends ClassGeneratorClassLoader {
+ public CustomLoader(Bus bus) {
+ super(bus);
+ }
+
public Class<?> createCustom() {
ASMHelper helper = new ASMHelperImpl();
ASMHelper.ClassWriter cw = helper.createClassWriter();
@@ -57,10 +63,10 @@ public class ASMHelperTest {
"java/lang/Object", null);
cw.visitEnd();
- return loadClass("test.testClass", CustomLoader.class,
cw.toByteArray());
+ return loadClass("test.testClass", cw.toByteArray());
}
public boolean isFound() {
- Class<?> cls = findClass("test.testClass",
CustomLoader.class);
+ Class<?> cls = findClass("test.testClass");
return cls != null;
}
}
diff --git a/parent/pom.xml b/parent/pom.xml
index 066bc67588..32217d54f7 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -54,8 +54,8 @@
<!-- stuff related to ASM -->
<cxf.asm.groupId>org.ow2.asm</cxf.asm.groupId>
<cxf.asm.artifactId>asm</cxf.asm.artifactId>
- <cxf.asm.version>8.0.1</cxf.asm.version>
- <cxf.osgi.asm.version>[3.0,9)</cxf.osgi.asm.version>
+ <cxf.asm.version>9.0</cxf.asm.version>
+ <cxf.osgi.asm.version>[3.0,10)</cxf.osgi.asm.version>
<cxf.easymock.version>4.2</cxf.easymock.version>
<!-- OSGi related properties -->
<cxf.fragment.host />
diff --git
a/rt/bindings/corba/src/main/java/org/apache/cxf/binding/corba/utils/CorbaFixedAnyImplGenerator.java
b/rt/bindings/corba/src/main/java/org/apache/cxf/binding/corba/utils/CorbaFixedAnyImplGenerator.java
index 7dd4de2da2..94c5e3e2cf 100644
---
a/rt/bindings/corba/src/main/java/org/apache/cxf/binding/corba/utils/CorbaFixedAnyImplGenerator.java
+++
b/rt/bindings/corba/src/main/java/org/apache/cxf/binding/corba/utils/CorbaFixedAnyImplGenerator.java
@@ -21,6 +21,7 @@ package org.apache.cxf.binding.corba.utils;
import java.lang.reflect.Constructor;
+import org.apache.cxf.Bus;
import org.apache.cxf.common.spi.ClassGeneratorClassLoader;
import org.apache.cxf.common.util.ASMHelper;
import org.apache.cxf.common.util.ASMHelperImpl;
@@ -29,6 +30,10 @@ import org.apache.cxf.common.util.OpcodesProxy;
public class CorbaFixedAnyImplGenerator extends
ClassGeneratorClassLoader {
private Constructor<?> fixedAnyConstructor;
+ public CorbaFixedAnyImplGenerator(Bus bus) {
+ super(bus);
+ }
+
public Class<?> createFixedAnyClass() {
//TODO move to bus.getExtension(ASMHelper.class)
ASMHelper helper = new ASMHelperImpl();
@@ -53,7 +58,7 @@ public class CorbaFixedAnyImplGenerator extends
ClassGeneratorClassLoader {
cw.visitEnd();
byte[] b = cw.toByteArray();
- Class<?> c =
loadClass("org.apache.cxf.binding.corba.utils.FixedAnyImpl",
CorbaAnyHelper.class, b);
+ Class<?> c =
loadClass("org.apache.cxf.binding.corba.utils.FixedAnyImpl", b);
return c;
}
@@ -99,7 +104,7 @@ public class CorbaFixedAnyImplGenerator extends
ClassGeneratorClassLoader {
null, l0, l4, 0);
mv.visitLocalVariable("is",
"Lorg/omg/CORBA/portable/InputStream;", null, l0, l4, 1);
mv.visitLocalVariable("t", "Lorg/omg/CORBA/TypeCode;", null,
l0, l4, 2);
- mv.visitMaxs(3, 3);
+ mv.visitMaxs(0, 0);
mv.visitEnd();
}
@@ -142,7 +147,7 @@ public class CorbaFixedAnyImplGenerator extends
ClassGeneratorClassLoader {
mv.visitLocalVariable("this",
"Lorg/apache/cxf/binding/corba/utils/FixedAnyImpl;",
null, l0, l4, 0);
mv.visitLocalVariable("os",
"Lorg/omg/CORBA/portable/OutputStream;", null, l0, l4, 1);
- mv.visitMaxs(2, 2);
+ mv.visitMaxs(0, 0);
mv.visitEnd();
}
@@ -176,7 +181,7 @@ public class CorbaFixedAnyImplGenerator extends
ClassGeneratorClassLoader {
ASMHelper.Label l3 = helper.createLabel();
mv.visitLabel(l3);
mv.visitLocalVariable("this",
"Lorg/apache/cxf/binding/corba/utils/FixedAnyImpl;", null, l0, l3, 0);
- mv.visitMaxs(1, 1);
+ mv.visitMaxs(0, 0);
mv.visitEnd();
}
@@ -213,7 +218,7 @@ public class CorbaFixedAnyImplGenerator extends
ClassGeneratorClassLoader {
mv.visitLocalVariable("this",
"Lorg/apache/cxf/binding/corba/utils/FixedAnyImpl;",
null, l0, l3, 0);
mv.visitLocalVariable("s",
"Lorg/omg/CORBA/portable/Streamable;", null, l0, l3, 1);
- mv.visitMaxs(2, 2);
+ mv.visitMaxs(0, 0);
mv.visitEnd();
}
@@ -240,7 +245,7 @@ public class CorbaFixedAnyImplGenerator extends
ClassGeneratorClassLoader {
"Lorg/apache/cxf/binding/corba/utils/FixedAnyImpl;",
null, l0, l2, 0);
mv.visitLocalVariable("orb", "Lorg/omg/CORBA/ORB;", null, l0,
l2, 1);
- mv.visitMaxs(2, 2);
+ mv.visitMaxs(0, 0);
mv.visitEnd();
@@ -269,7 +274,7 @@ public class CorbaFixedAnyImplGenerator extends
ClassGeneratorClassLoader {
null, l0, l2, 0);
mv.visitLocalVariable("orb", "Lorg/omg/CORBA/ORB;", null, l0,
l2, 1);
mv.visitLocalVariable("any", "Lorg/omg/CORBA/Any;", null, l0,
l2, 2);
- mv.visitMaxs(3, 3);
+ mv.visitMaxs(0, 0);
mv.visitEnd();
}
diff --git
a/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/FactoryClassGenerator.java
b/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/FactoryClassGenerator.java
index 721788868f..46666f4d1f 100644
---
a/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/FactoryClassGenerator.java
+++
b/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/FactoryClassGenerator.java
@@ -31,12 +31,13 @@ import org.apache.cxf.common.util.ReflectionUtil;
public class FactoryClassGenerator extends ClassGeneratorClassLoader
implements FactoryClassCreator {
private ASMHelper helper;
FactoryClassGenerator(Bus bus) {
+ super(bus);
helper = bus.getExtension(ASMHelper.class);
}
@SuppressWarnings("unused")
public Class<?> createFactory(Class<?> cls) {
String newClassName = cls.getName() + "Factory";
- Class<?> factoryClass = findClass(newClassName, cls);
+ Class<?> factoryClass = findClass(newClassName);
if (factoryClass != null) {
return factoryClass;
}
@@ -55,7 +56,7 @@ public class FactoryClassGenerator extends
ClassGeneratorClassLoader implements
mv.visitVarInsn(opcodes.ALOAD, 0);
mv.visitMethodInsn(opcodes.INVOKESPECIAL, "java/lang/Object",
"<init>", "()V", false);
mv.visitInsn(opcodes.RETURN);
- mv.visitMaxs(1, 1);
+ mv.visitMaxs(0, 0);
mv.visitEnd();
mv = cw.visitMethod(opcodes.ACC_PUBLIC, "create" +
cls.getSimpleName(),
@@ -75,10 +76,10 @@ public class FactoryClassGenerator extends
ClassGeneratorClassLoader implements
mv.visitMethodInsn(opcodes.INVOKESPECIAL, name, "<init>",
paraString.toString(), false);
mv.visitInsn(opcodes.ARETURN);
- mv.visitMaxs(1, 1);
+ mv.visitMaxs(0, 0);
mv.visitEnd();
cw.visitEnd();
- return loadClass(newClassName, cls, cw.toByteArray());
+ return loadClass(newClassName, cw.toByteArray());
}
}
diff --git
a/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/WrapperHelperCompiler.java
b/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/WrapperHelperCompiler.java
index 8d33e4dcd4..6549a88505 100644
---
a/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/WrapperHelperCompiler.java
+++
b/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/WrapperHelperCompiler.java
@@ -42,6 +42,7 @@ public final class WrapperHelperCompiler extends
ClassGeneratorClassLoader imple
private ASMHelper asmhelper;
WrapperHelperCompiler(Bus bus) {
+ super(bus);
}
public WrapperHelper compile(Bus bus, Class<?> wt, Method[] setters,
@@ -64,16 +65,16 @@ public final class WrapperHelperCompiler extends
ClassGeneratorClassLoader imple
newClassName = newClassName.replaceAll("\\$", ".");
newClassName = asmhelper.periodToSlashes(newClassName);
- Class<?> cls = findClass(newClassName.replace('/', '.'),
wrapperType);
+ Class<?> cls = findClass(newClassName.replace('/', '.'));
while (cls != null) {
try {
- WrapperHelper helper =
WrapperHelper.class.cast(cls.newInstance());
+ WrapperHelper helper =
WrapperHelper.class.cast(cls.getConstructor().newInstance());
if
(!helper.getSignature().equals(computeSignature(setMethods, getMethods))) {
count++;
newClassName = wrapperType.getName() +
"_WrapperTypeHelper" + count;
newClassName = newClassName.replaceAll("\\$", ".");
newClassName =
asmhelper.periodToSlashes(newClassName);
- cls = findClass(newClassName.replace('/', '.'),
wrapperType);
+ cls = findClass(newClassName.replace('/', '.'));
} else {
return helper;
}
@@ -105,8 +106,8 @@ public final class WrapperHelperCompiler extends
ClassGeneratorClassLoader imple
if (b) {
cw.visitEnd();
byte[] bt = cw.toByteArray();
- Class<?> cl = loadClass(newClassName.replace('/', '.'),
wrapperType, bt);
- Object o = cl.newInstance();
+ Class<?> cl = loadClass(newClassName.replace('/', '.'),
bt);
+ Object o = cl.getConstructor().newInstance();
return WrapperHelper.class.cast(o);
}
} catch (Throwable e) {
@@ -278,7 +279,7 @@ public final class WrapperHelperCompiler extends
ClassGeneratorClassLoader imple
ASMHelper.Label lEnd = asmhelper.createLabel();
mv.visitLabel(lEnd);
- mv.visitLocalVariable("this", "L" + newClassName + ";", null,
lBegin, lEnd, 0);
+ mv.visitLocalVariable("_this", "L" + newClassName + ";", null,
lBegin, lEnd, 0);
mv.visitLocalVariable("lst", "Ljava/util/List;",
"Ljava/util/List<*>;", lBegin, lEnd, 1);
mv.visitLocalVariable("ok", "L" +
asmhelper.periodToSlashes(wrapperType.getName()) + ";",
null, lBegin, lEnd, 2);
diff --git
a/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/WrapperClassGenerator.java
b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/WrapperClassGenerator.java
index bf551521d4..e7b16d9b1b 100644
---
a/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/WrapperClassGenerator.java
+++
b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/WrapperClassGenerator.java
@@ -69,7 +69,8 @@ public final class WrapperClassGenerator extends
ClassGeneratorClassLoader imple
private InterfaceInfo interfaceInfo;
private ASMHelper helper;
- public WrapperClassGenerator() {
+ public WrapperClassGenerator(final Bus bus) {
+ super(bus);
}
private String getPackageName(Method method) {
@@ -153,7 +154,6 @@ public final class WrapperClassGenerator extends
ClassGeneratorClassLoader imple
Method method,
boolean isRequest) {
-
ASMHelper.ClassWriter cw = helper.createClassWriter();
if (cw == null) {
LOG.warning(op.getName() + " requires a wrapper bean but
problems with"
@@ -170,20 +170,20 @@ public final class WrapperClassGenerator extends
ClassGeneratorClassLoader imple
className = className + "Response";
}
String pname = pkg + ".package-info";
- Class<?> def = findClass(pname, method.getDeclaringClass());
+ Class<?> def = findClass(pname);
if (def == null) {
generatePackageInfo(pname, wrapperElement.getNamespaceURI(),
method.getDeclaringClass());
}
- def = findClass(className, method.getDeclaringClass());
+ def = findClass(className);
String origClassName = className;
int count = 0;
while (def != null) {
Boolean b = messageInfo.getProperty("parameterized",
Boolean.class);
if (b != null && b) {
className = origClassName + (++count);
- def = findClass(className, method.getDeclaringClass());
+ def = findClass(className);
} else {
wrapperPart.setTypeClass(def);
wrapperBeans.add(def);
@@ -224,7 +224,7 @@ public final class WrapperClassGenerator extends
ClassGeneratorClassLoader imple
ASMHelper.Label lend = helper.createLabel();
mv.visitLabel(lend);
mv.visitLocalVariable("this", "L" + classFileName + ";", null,
lbegin, lend, 0);
- mv.visitMaxs(1, 1);
+ mv.visitMaxs(0, 0);
mv.visitEnd();
for (MessagePartInfo mpi : messageInfo.getMessageParts()) {
@@ -233,7 +233,7 @@ public final class WrapperClassGenerator extends
ClassGeneratorClassLoader imple
cw.visitEnd();
- Class<?> clz = loadClass(className, method.getDeclaringClass(),
cw.toByteArray());
+ Class<?> clz = loadClass(className, cw.toByteArray());
wrapperPart.setTypeClass(clz);
wrapperBeans.add(clz);
}
@@ -272,7 +272,7 @@ public final class WrapperClassGenerator extends
ClassGeneratorClassLoader imple
}
cw.visitEnd();
- loadClass(className, clz, cw.toByteArray());
+ loadClass(className, cw.toByteArray());
}
private void
generateXmlJavaTypeAdapters(ASMHelper.AnnotationVisitor av, XmlJavaTypeAdapters
adapters) {
diff --git
a/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spi/WrapperClassCreatorProxyService.java
b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spi/WrapperClassCreatorProxyService.java
index 5328277c61..6f3d1743f2 100644
---
a/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spi/WrapperClassCreatorProxyService.java
+++
b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spi/WrapperClassCreatorProxyService.java
@@ -27,8 +27,8 @@ import org.apache.cxf.service.model.InterfaceInfo;
public class WrapperClassCreatorProxyService implements
WrapperClassCreator {
WrapperClassCreator srv;
- public WrapperClassCreatorProxyService() {
- this(new WrapperClassGenerator());
+ public WrapperClassCreatorProxyService(final Bus bus) {
+ this(new WrapperClassGenerator(bus));
}
public WrapperClassCreatorProxyService(WrapperClassCreator srv) {
super();
@@ -48,8 +48,8 @@ public class WrapperClassCreatorProxyService
implements WrapperClassCreator {
}
}
public class GenerateJustInTime extends
WrapperClassCreatorProxyService {
- public GenerateJustInTime() {
- super(new WrapperClassGenerator());
+ public GenerateJustInTime(final Bus bus) {
+ super(new WrapperClassGenerator(bus));
}
}
}
diff --git
a/rt/frontend/simple/src/main/java/org/apache/cxf/endpoint/dynamic/ExceptionClassGenerator.java
b/rt/frontend/simple/src/main/java/org/apache/cxf/endpoint/dynamic/ExceptionClassGenerator.java
index 623c04b6db..02c92dc21d 100644
---
a/rt/frontend/simple/src/main/java/org/apache/cxf/endpoint/dynamic/ExceptionClassGenerator.java
+++
b/rt/frontend/simple/src/main/java/org/apache/cxf/endpoint/dynamic/ExceptionClassGenerator.java
@@ -27,6 +27,7 @@ public class ExceptionClassGenerator extends
ClassGeneratorClassLoader implement
private ASMHelper helper;
public ExceptionClassGenerator(Bus bus) {
+ super(bus);
this.helper = bus.getExtension(ASMHelper.class);
}
@Override
@@ -35,7 +36,7 @@ public class ExceptionClassGenerator extends
ClassGeneratorClassLoader implement
newClassName = newClassName.replaceAll("\\$", ".");
newClassName = helper.periodToSlashes(newClassName);
- Class<?> cls = findClass(newClassName.replace('/', '.'), bean);
+ Class<?> cls = findClass(newClassName.replace('/', '.'));
if (cls == null) {
ASMHelper.ClassWriter cw = helper.createClassWriter();
OpcodesProxy opCodes = helper.getOpCodes();
@@ -70,7 +71,7 @@ public class ExceptionClassGenerator extends
ClassGeneratorClassLoader implement
mv.visitLabel(helper.createLabel());
mv.visitInsn(opCodes.RETURN);
mv.visitLabel(helper.createLabel());
- mv.visitMaxs(2, 3);
+ mv.visitMaxs(0, 0);
mv.visitEnd();
mv = cw.visitMethod(opCodes.ACC_PUBLIC, "getFaultInfo",
@@ -81,12 +82,12 @@ public class ExceptionClassGenerator extends
ClassGeneratorClassLoader implement
mv.visitFieldInsn(opCodes.GETFIELD, newClassName,
"faultInfo", beanClassCode);
mv.visitInsn(opCodes.ARETURN);
mv.visitLabel(helper.createLabel());
- mv.visitMaxs(1, 1);
+ mv.visitMaxs(0, 0);
mv.visitEnd();
cw.visitEnd();
- return loadClass(bean.getName() + "_Exception", bean,
cw.toByteArray());
+ return loadClass(bean.getName() + "_Exception",
cw.toByteArray());
}
return cls;
}
diff --git
a/rt/wsdl/src/main/java/org/apache/cxf/wsdl/ExtensionClassGenerator.java
b/rt/wsdl/src/main/java/org/apache/cxf/wsdl/ExtensionClassGenerator.java
index c7c3672529..0dbccf1494 100644
---
a/rt/wsdl/src/main/java/org/apache/cxf/wsdl/ExtensionClassGenerator.java
+++
b/rt/wsdl/src/main/java/org/apache/cxf/wsdl/ExtensionClassGenerator.java
@@ -30,11 +30,10 @@ import org.apache.cxf.common.util.OpcodesProxy;
public class ExtensionClassGenerator extends ClassGeneratorClassLoader
implements ExtensionClassCreator {
- private Bus bus;
private ASMHelper helper;
public ExtensionClassGenerator(Bus bus) {
- this.bus = bus;
+ super(bus);
this.helper = bus.getExtension(ASMHelper.class);
}
//CHECKSTYLE:OFF - very complicated ASM code
@@ -44,7 +43,7 @@ public class ExtensionClassGenerator extends
ClassGeneratorClassLoader implement
ASMHelper helper = bus.getExtension(ASMHelper.class);
OpcodesProxy Opcodes = helper.getOpCodes();
- Class<?> extClass = findClass(className + "Extensibility",
loader);
+ Class<?> extClass = findClass(className + "Extensibility");
if (extClass != null) {
return extClass;
}
@@ -92,7 +91,7 @@ public class ExtensionClassGenerator extends
ClassGeneratorClassLoader implement
mv.visitFieldInsn(Opcodes.PUTSTATIC, className +
"Extensibility", "WSDL_REQUIRED",
"Ljavax/xml/namespace/QName;");
mv.visitInsn(Opcodes.RETURN);
- mv.visitMaxs(4, 0);
+ mv.visitMaxs(0, 0);
mv.visitEnd();
} else {
fv = cw.visitField(Opcodes.ACC_PRIVATE, "required",
"Ljava/lang/Boolean;", null, null);
@@ -128,7 +127,7 @@ public class ExtensionClassGenerator extends
ClassGeneratorClassLoader implement
mv.visitLabel(l3);
mv.visitLocalVariable("this", "L" + className +
"Extensibility;", null, l0, l3, 0);
- mv.visitMaxs(5, 1);
+ mv.visitMaxs(0, 0);
mv.visitEnd();
mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "setElementType",
"(Ljavax/xml/namespace/QName;)V", null, null);
@@ -147,7 +146,7 @@ public class ExtensionClassGenerator extends
ClassGeneratorClassLoader implement
mv.visitLabel(l2);
mv.visitLocalVariable("this", "L" + className +
"Extensibility;", null, l0, l2, 0);
mv.visitLocalVariable("elementType",
"Ljavax/xml/namespace/QName;", null, l0, l2, 1);
- mv.visitMaxs(2, 2);
+ mv.visitMaxs(0, 0);
mv.visitEnd();
mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "getElementType",
"()Ljavax/xml/namespace/QName;", null, null);
@@ -163,7 +162,7 @@ public class ExtensionClassGenerator extends
ClassGeneratorClassLoader implement
l1 = helper.createLabel();
mv.visitLabel(l1);
mv.visitLocalVariable("this", "L" + className +
"Extensibility;", null, l0, l1, 0);
- mv.visitMaxs(1, 1);
+ mv.visitMaxs(0, 0);
mv.visitEnd();
if (hasAttributes) {
@@ -202,7 +201,7 @@ public class ExtensionClassGenerator extends
ClassGeneratorClassLoader implement
mv.visitLabel(l4);
mv.visitLocalVariable("this", "L" + className +
"Extensibility;", null, l0, l4, 0);
mv.visitLocalVariable("s", "Ljava/lang/String;", null, l1,
l4, 1);
- mv.visitMaxs(2, 2);
+ mv.visitMaxs(0, 0);
mv.visitEnd();
@@ -252,7 +251,7 @@ public class ExtensionClassGenerator extends
ClassGeneratorClassLoader implement
mv.visitLabel(l5);
mv.visitLocalVariable("this", "L" + className +
"Extensibility;", null, l0, l5, 0);
mv.visitLocalVariable("b", "Ljava/lang/Boolean;", null, l0,
l5, 1);
- mv.visitMaxs(3, 2);
+ mv.visitMaxs(0, 0);
mv.visitEnd();
} else {
mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "getRequired",
"()Ljava/lang/Boolean;", null, null);
@@ -266,7 +265,7 @@ public class ExtensionClassGenerator extends
ClassGeneratorClassLoader implement
l1 = helper.createLabel();
mv.visitLabel(l1);
mv.visitLocalVariable("this", "L" + className +
"Extensibility;", null, l0, l1, 0);
- mv.visitMaxs(1, 1);
+ mv.visitMaxs(0, 0);
mv.visitEnd();
mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "setRequired",
"(Ljava/lang/Boolean;)V", null, null);
@@ -285,13 +284,13 @@ public class ExtensionClassGenerator extends
ClassGeneratorClassLoader implement
mv.visitLabel(l2);
mv.visitLocalVariable("this", "L" + className +
"Extensibility;", null, l0, l2, 0);
mv.visitLocalVariable("b", "Ljava/lang/Boolean;", null, l0,
l2, 1);
- mv.visitMaxs(2, 2);
+ mv.visitMaxs(0, 0);
mv.visitEnd();
}
cw.visitEnd();
byte[] bytes = cw.toByteArray();
- return loadClass(className + "Extensibility", loader, bytes);
+ return loadClass(className + "Extensibility", bytes);
}
}
side note: moved visitMaxs to (0, 0) since we force the computation anyway
and since cxf is java 8 min, previous asm will not work so we are now safe to
drop/force these 2 params.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]