Updated Branches: refs/heads/master 92e571337 -> d3f064443
WICKET-5375 Improve ConcatBundleResource error handling when a resource is missing Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/d3f06444 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/d3f06444 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/d3f06444 Branch: refs/heads/master Commit: d3f0644438e6a3cadfbe2961005111f0fd4102f0 Parents: 54e65be Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Thu Sep 26 16:49:06 2013 +0200 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Thu Sep 26 16:49:31 2013 +0200 ---------------------------------------------------------------------- .../resource/bundles/ConcatBundleResource.java | 58 +++++++++++++++++++- 1 file changed, 55 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/d3f06444/wicket-core/src/main/java/org/apache/wicket/resource/bundles/ConcatBundleResource.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/bundles/ConcatBundleResource.java b/wicket-core/src/main/java/org/apache/wicket/resource/bundles/ConcatBundleResource.java index 7d3a2ff..88ae656 100644 --- a/wicket-core/src/main/java/org/apache/wicket/resource/bundles/ConcatBundleResource.java +++ b/wicket-core/src/main/java/org/apache/wicket/resource/bundles/ConcatBundleResource.java @@ -22,18 +22,22 @@ import java.io.InputStream; import java.io.Serializable; import java.util.ArrayList; import java.util.List; +import java.util.MissingResourceException; import javax.servlet.http.HttpServletResponse; +import org.apache.wicket.Application; import org.apache.wicket.markup.head.IReferenceHeaderItem; import org.apache.wicket.request.resource.AbstractResource; import org.apache.wicket.request.resource.IResource; +import org.apache.wicket.request.resource.ResourceReference; import org.apache.wicket.request.resource.caching.IStaticCacheableResource; import org.apache.wicket.resource.ITextResourceCompressor; import org.apache.wicket.util.io.ByteArrayOutputStream; import org.apache.wicket.util.io.IOUtils; import org.apache.wicket.util.lang.Args; import org.apache.wicket.util.lang.Bytes; +import org.apache.wicket.util.lang.Classes; import org.apache.wicket.util.resource.AbstractResourceStream; import org.apache.wicket.util.resource.IResourceStream; import org.apache.wicket.util.resource.ResourceStreamNotFoundException; @@ -135,7 +139,10 @@ public class ConcatBundleResource extends AbstractResource implements IStaticCac IResourceStream stream = ((IStaticCacheableResource)curItem.getReference() .getResource()).getCacheableResourceStream(); if (stream == null) + { + reportError(curItem.getReference(), "Cannot get resource stream for "); return null; + } ret.add(stream); } @@ -183,9 +190,11 @@ public class ConcatBundleResource extends AbstractResource implements IStaticCac private ResourceResponse sendResourceError(ResourceResponse resourceResponse, int errorCode, String errorMessage) { - String msg = String.format("bundled resource: %s (status=%d)", errorMessage, errorCode); - - log.warn(msg); + if (log.isWarnEnabled()) + { + String msg = String.format("Bundled resource: %s (status=%d)", errorMessage, errorCode); + log.warn(msg); + } resourceResponse.setError(errorCode, errorMessage); return resourceResponse; @@ -210,16 +219,51 @@ public class ConcatBundleResource extends AbstractResource implements IStaticCac { Serializable curKey = ((IStaticCacheableResource)curItem.getReference().getResource()).getCacheKey(); if (curKey == null) + { + reportError(curItem.getReference(), "Unable to get cache key for "); return null; + } key.add(curKey); } return key; } + /** + * If a bundle resource is missing then throws a {@link MissingResourceException} if + * {@link org.apache.wicket.settings.IResourceSettings#getThrowExceptionOnMissingResource()} + * says so, or logs a warning message if the logging level allows + * @param reference + * The resource reference to the missing resource + * @param prefix + * The error message prefix + */ + private void reportError(ResourceReference reference, String prefix) + { + String scope = Classes.name(reference.getScope()); + String name = reference.getName(); + StringBuilder message = new StringBuilder(prefix); + message.append(scope).append('/').append(name); + + if (getThrowExceptionOnMissingResource()) + { + throw new MissingResourceException(message.toString(), scope, name); + } + else if (log.isWarnEnabled()) + { + log.warn(message.toString()); + } + } + @Override public IResourceStream getCacheableResourceStream() { List<IResourceStream> resources = collectResourceStreams(); + + if (resources == null) + { + return null; + } + byte[] bytes; try { @@ -284,4 +328,12 @@ public class ConcatBundleResource extends AbstractResource implements IStaticCac { return compressor; } + + /** + * @return the result of {@link org.apache.wicket.settings.IResourceSettings#getThrowExceptionOnMissingResource()} + */ + protected boolean getThrowExceptionOnMissingResource() + { + return Application.get().getResourceSettings().getThrowExceptionOnMissingResource(); + } }
