Updated Branches: refs/heads/wicket-6.x eaed6ee5e -> 7db55f5a8
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/7db55f5a Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/7db55f5a Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/7db55f5a Branch: refs/heads/wicket-6.x Commit: 7db55f5a828560d8733c4db34eeaa06f11982741 Parents: eaed6ee 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:55:53 2013 +0200 ---------------------------------------------------------------------- .../resource/bundles/ConcatBundleResource.java | 60 ++++++++++++++++++-- 1 file changed, 56 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/7db55f5a/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 e25d952..f4e0a31 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,17 +219,52 @@ 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(); - byte[] bytes = null; + + if (resources == null) + { + return null; + } + + byte[] bytes; try { bytes = readAllResources(resources); @@ -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(); + } }
