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;
}