Ich versuche, java.util.Date
mit cglib zu verbessern. Es funktioniert nicht und ich habe keine Erfahrung mit cglib, also frage ich mich, was falsch läuft.cglib löst eine IllegalArgumentException aus, wenn die Klasse java.util.Date verbessert wird
Zum Beispiel die folgenden Code Verbesserung eines ArrayList
Werke:
@Test
public void enhance_ArrayList() {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(ArrayList.class);
enhancer.setCallback(new FixedValue() {
@Override
public Object loadObject() throws Exception {
return "Hello cglib!";
}
});
ArrayList enhanced = (ArrayList)enhancer.create();
}
während der folgenden Code:
@Test
public void enhance_Date() {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(Date.class);
enhancer.setCallback(new FixedValue() {
@Override
public Object loadObject() throws Exception {
return "Hello cglib!";
}
});
Date enhanced = (Date)enhancer.create();
}
Ergebnisse in dieser Ausnahme:
java.lang.IllegalArgumentException
at org.objectweb.asm.ClassReader.<init>(Unknown Source)
at org.objectweb.asm.ClassReader.<init>(Unknown Source)
at org.objectweb.asm.ClassReader.<init>(Unknown Source)
at net.sf.cglib.proxy.BridgeMethodResolver.resolveAll(BridgeMethodResolver.java:61)
at net.sf.cglib.proxy.Enhancer.emitMethods(Enhancer.java:911)
at net.sf.cglib.proxy.Enhancer.generateClass(Enhancer.java:498)
at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)
at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:377)
at net.sf.cglib.proxy.Enhancer.create(Enhancer.java:285)
Danke. Zurück zu java7 für jetzt und es funktioniert gut. Sie müssen einen Blick auf Byte Buddy oder andere Optionen werfen, wenn Sie die Anwendung auf Java8 aktualisieren müssen, wenn cglib zu diesem Zeitpunkt noch nicht java8 unterstützt. – Raipe