You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wink.apache.org by nf...@apache.org on 2009/07/15 12:03:25 UTC

svn commit: r794210 - in /incubator/wink/trunk/wink-server/src: main/java/org/apache/wink/server/internal/application/ApplicationProcessor.java test/java/org/apache/wink/server/internal/application/ApplicationProcessorTest.java

Author: nfischer
Date: Wed Jul 15 10:03:25 2009
New Revision: 794210

URL: http://svn.apache.org/viewvc?rev=794210&view=rev
Log:
Fix application processing so that it won't stop if the processing of a resource/provider throws an exception [WINK-101]

Modified:
    incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/application/ApplicationProcessor.java
    incubator/wink/trunk/wink-server/src/test/java/org/apache/wink/server/internal/application/ApplicationProcessorTest.java

Modified: incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/application/ApplicationProcessor.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/application/ApplicationProcessor.java?rev=794210&r1=794209&r2=794210&view=diff
==============================================================================
--- incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/application/ApplicationProcessor.java (original)
+++ incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/application/ApplicationProcessor.java Wed Jul 15 10:03:25 2009
@@ -91,20 +91,25 @@
         }
 
         for (Object obj : instances) {
-            logger.debug("Processing instance: {}", obj);
-
-            Class<?> cls = obj.getClass();
-
-            // the validations were moved to registry
-
-            if (ResourceMetadataCollector.isDynamicResource(cls)) {
-                resourceRegistry.addResource(obj, priority);
-            } else if (ResourceMetadataCollector.isStaticResource(cls)) {
-                resourceRegistry.addResource(obj, priority);
-            } else if (ProviderMetadataCollector.isProvider(cls)) {
-                providersRegistry.addProvider(obj, priority);
-            } else {
-                logger.warn("Cannot handle {}. Ignoring.", obj);
+            try {
+                logger.debug("Processing instance: {}", obj);
+    
+                Class<?> cls = obj.getClass();
+    
+                // the validations were moved to registry
+    
+                if (ResourceMetadataCollector.isDynamicResource(cls)) {
+                    resourceRegistry.addResource(obj, priority);
+                } else if (ResourceMetadataCollector.isStaticResource(cls)) {
+                    resourceRegistry.addResource(obj, priority);
+                } else if (ProviderMetadataCollector.isProvider(cls)) {
+                    providersRegistry.addProvider(obj, priority);
+                } else {
+                    logger.warn("Cannot handle {}. Ignoring.", obj);
+                }
+            } catch (Exception e) {
+                logger.warn("The following exception occured during processing of instance {}. Ignoring.", obj.getClass().getCanonicalName());
+                e.printStackTrace();
             }
         }
     }
@@ -112,16 +117,21 @@
     private void processClasses(Set<Class<?>> classes) {
 
         for (Class<?> cls : classes) {
-            logger.debug("Processing class: {}", cls);
-
-            // the validations were moved to registry
-
-            if (ResourceMetadataCollector.isStaticResource(cls)) {
-                resourceRegistry.addResource(cls);
-            } else if (ProviderMetadataCollector.isProvider(cls)) {
-                providersRegistry.addProvider(cls);
-            } else {
-                logger.warn("{} is not a resource or a provider. Ignored.", cls);
+            try {
+                logger.debug("Processing class: {}", cls);
+    
+                // the validations were moved to registry
+    
+                if (ResourceMetadataCollector.isStaticResource(cls)) {
+                    resourceRegistry.addResource(cls);
+                } else if (ProviderMetadataCollector.isProvider(cls)) {
+                    providersRegistry.addProvider(cls);
+                } else {
+                    logger.warn("{} is not a resource or a provider. Ignored.", cls);
+                }
+            } catch (Exception e) {
+                logger.warn("The following exception occured during processing of class {}. Ignoring.", cls);
+                e.printStackTrace();
             }
         }
     }
@@ -130,16 +140,21 @@
 
         // add singletons
         for (Object obj : singletons) {
-            logger.debug("Processing singleton: {}", obj);
-
-            Class<?> cls = obj.getClass();
-
-            if (ResourceMetadataCollector.isStaticResource(cls)) {
-                resourceRegistry.addResource(obj);
-            } else if (ProviderMetadataCollector.isProvider(cls)) {
-                providersRegistry.addProvider(obj);
-            } else {
-                logger.warn("{} is not a resource or a provider. Ignoring.", obj);
+            try {
+                logger.debug("Processing singleton: {}", obj);
+    
+                Class<?> cls = obj.getClass();
+    
+                if (ResourceMetadataCollector.isStaticResource(cls)) {
+                    resourceRegistry.addResource(obj);
+                } else if (ProviderMetadataCollector.isProvider(cls)) {
+                    providersRegistry.addProvider(obj);
+                } else {
+                    logger.warn("{} is not a resource or a provider. Ignoring.", obj);
+                }
+            } catch (Exception e) {
+                logger.warn("The following exception occured during processing of singleton {}. Ignoring.", obj.getClass().getCanonicalName());
+                e.printStackTrace();
             }
         }
     }

Modified: incubator/wink/trunk/wink-server/src/test/java/org/apache/wink/server/internal/application/ApplicationProcessorTest.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-server/src/test/java/org/apache/wink/server/internal/application/ApplicationProcessorTest.java?rev=794210&r1=794209&r2=794210&view=diff
==============================================================================
--- incubator/wink/trunk/wink-server/src/test/java/org/apache/wink/server/internal/application/ApplicationProcessorTest.java (original)
+++ incubator/wink/trunk/wink-server/src/test/java/org/apache/wink/server/internal/application/ApplicationProcessorTest.java Wed Jul 15 10:03:25 2009
@@ -20,12 +20,13 @@
 package org.apache.wink.server.internal.application;
 
 import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
 
+import javax.ws.rs.Path;
 import javax.ws.rs.core.Application;
+import javax.ws.rs.ext.Provider;
 
 import org.apache.wink.common.AbstractDynamicResource;
 import org.apache.wink.common.WinkApplication;
@@ -58,6 +59,9 @@
         }
 
         public void addResource(Object instance, double priority) {
+            if (instance instanceof BadResource) {
+                throw new BadResource("BadResource cannot be added");
+            }
             instances.add(instance);
         }
 
@@ -66,12 +70,11 @@
         }
 
         public void addResource(Class<?> clazz, double priority) {
+            if (BadResource.class == clazz) {
+                throw new BadResource("BadResource cannot be added");
+            }
             classes.add(clazz);
         }
-
-        public Set<String> options(String path) {
-            return new HashSet<String>();
-        }
     }
 
     private static class ProvidersRegistryMock extends ProvidersRegistry {
@@ -92,13 +95,30 @@
         }
 
         public boolean addProvider(Class<?> cls, double priority) {
+            if (BadProvider.class == cls) {
+                throw new BadProvider("BadProvider cannot be added");
+            }
             return classes.add(cls);
         }
 
         public boolean addProvider(Object provider, double priority) {
+            if (provider instanceof BadProvider) {
+                throw new BadProvider("BadProvider cannot be added");
+            }
             return instances.add(provider);
         }
-
+    }
+    
+    @Provider
+    private static class BadProvider extends RuntimeException {
+        public BadProvider() {super();}
+        public BadProvider(String message) {super(message);}
+    }
+    
+    @Path("bad-resource")
+    private static class BadResource extends RuntimeException {
+        public BadResource() {super();}
+        public BadResource(String message) {super(message);}
     }
 
     private static final StreamingOutputProvider StreamingOutputProvider = new StreamingOutputProvider();
@@ -110,7 +130,9 @@
         public Set<Class<?>> getClasses() {
             LinkedHashSet<Class<?>> classes = new LinkedHashSet<Class<?>>();
             classes.add(FileProvider.class); // provider
+            classes.add(BadResource.class); // simulate resource exception
             classes.add(String.class); // should be ignored
+            classes.add(BadProvider.class); // simulate provider exception
             classes.add(RootResource.class); // resource
             return classes;
         }
@@ -119,7 +141,9 @@
         public Set<Object> getSingletons() {
             LinkedHashSet<Object> instances = new LinkedHashSet<Object>();
             instances.add(StreamingOutputProvider); // provider
+            instances.add(new BadResource()); // simulate resource exception
             instances.add("bla-bla"); // should be ignored
+            instances.add(new BadProvider()); // simulate provider exception
             instances.add(rootResource);
             return instances;
         }
@@ -137,7 +161,9 @@
         public Set<Class<?>> getClasses() {
             LinkedHashSet<Class<?>> classes = new LinkedHashSet<Class<?>>();
             classes.add(FileProvider.class); // provider
+            classes.add(BadResource.class); // simulate resource exception
             classes.add(String.class); // should be ignored
+            classes.add(BadProvider.class); // simulate provider exception
             classes.add(RootResource.class); // resource
             return classes;
         }
@@ -146,7 +172,9 @@
         public Set<Object> getSingletons() {
             LinkedHashSet<Object> instances = new LinkedHashSet<Object>();
             instances.add(StreamingOutputProvider); // provider
+            instances.add(new BadResource()); // simulate resource exception
             instances.add("bla-bla"); // should be ignored
+            instances.add(new BadProvider()); // simulate provider exception
             instances.add(rootResource); // resource
             return instances;
         }
@@ -156,7 +184,9 @@
             LinkedHashSet<Object> instances = new LinkedHashSet<Object>();
             instances.add(StringProvider);
             instances.add("bla-bla"); // should be ignored
+            instances.add(new BadResource()); // simulate resource exception
             instances.add(HtmlServiceDocument);
+            instances.add(new BadProvider()); // simulate provider exception
             instances.add(DynamicResource);
             return instances;
         }