From: Matti Tahvonen Date: Wed, 30 Dec 2009 14:33:03 +0000 (+0000) Subject: fixes #3920, workaround for glassfish 3 bug X-Git-Tag: 6.7.0.beta1~2084^2~8 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=7a2b2b4b34e8a4beeaef0da854d0833af7cf86ae;p=vaadin-framework.git fixes #3920, workaround for glassfish 3 bug svn changeset:10584/svn branch:6.2 --- diff --git a/src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java b/src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java index e0f888e6cb..e745282605 100644 --- a/src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java +++ b/src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java @@ -1009,13 +1009,11 @@ public class JsonPaintTarget implements PaintTarget { * integer strings to optimized transferred data. */ Class class1 = paintable.getClass(); - ClientWidget annotation = class1.getAnnotation(ClientWidget.class); - while (annotation == null) { + while (!hasClientWidgetMapping(class1)) { Class superclass = class1.getSuperclass(); if (superclass != null && Paintable.class.isAssignableFrom(superclass)) { class1 = (Class) superclass; - annotation = class1.getAnnotation(ClientWidget.class); } else { System.out .append("Warning: no superclass of givent has ClientWidget" @@ -1023,11 +1021,30 @@ public class JsonPaintTarget implements PaintTarget { break; } } + usedPaintableTypes.add(class1); return AbstractCommunicationManager.getTagForType(class1); } + private boolean hasClientWidgetMapping(Class class1) { + try { + ClientWidget annotation = class1.getAnnotation(ClientWidget.class); + return annotation != null; + } catch (RuntimeException e) { + if (e.getStackTrace()[0].getClassName().equals( + "org.glassfish.web.loader.WebappClassLoader")) { + // Glassfish 3 is darn eager to load the value class, even + // though we just want to check if the annotation exists. + // See #3920, remove this hack when fixed in glassfish + return true; + } else { + // throw exception forward + throw e; + } + } + } + Collection> getUsedPaintableTypes() { return usedPaintableTypes; }