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]


Reply via email to