aboutsummaryrefslogtreecommitdiffstats
path: root/src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java
diff options
context:
space:
mode:
authorMatti Tahvonen <matti.tahvonen@itmill.com>2009-12-30 14:33:03 +0000
committerMatti Tahvonen <matti.tahvonen@itmill.com>2009-12-30 14:33:03 +0000
commit7a2b2b4b34e8a4beeaef0da854d0833af7cf86ae (patch)
treec4d4c642de59f5a9b614f890ff18f0cf76f55505 /src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java
parent3aa3171325689c3409c9b32f83c214e9a3861434 (diff)
downloadvaadin-framework-7a2b2b4b34e8a4beeaef0da854d0833af7cf86ae.tar.gz
vaadin-framework-7a2b2b4b34e8a4beeaef0da854d0833af7cf86ae.zip
fixes #3920, workaround for glassfish 3 bug
svn changeset:10584/svn branch:6.2
Diffstat (limited to 'src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java')
-rw-r--r--src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java23
1 files changed, 20 insertions, 3 deletions
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<? extends Paintable> 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<? extends Paintable>) 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<? extends Paintable> 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<Class<? extends Paintable>> getUsedPaintableTypes() {
return usedPaintableTypes;
}