WICKET-6031 NPE in PackageResourceReference#getResource() when there is no request
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/e4399d74 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/e4399d74 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/e4399d74 Branch: refs/heads/lambdas Commit: e4399d74234b657435f44eb137969db1a22896d5 Parents: 490fdf6 Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Sat Nov 14 10:58:55 2015 +0100 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Sat Nov 14 10:59:19 2015 +0100 ---------------------------------------------------------------------- .../resource/PackageResourceReference.java | 34 +++++++++++++++----- .../resource/PackageResourceReferenceTest.java | 19 +++++++++++ 2 files changed, 45 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/e4399d74/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java index 40d7d0c..f10a01c 100644 --- a/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java +++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java @@ -111,10 +111,16 @@ public class PackageResourceReference extends ResourceReference final String extension = getExtension(); final PackageResource resource; - - final Url url = RequestCycle.get().getRequest().getUrl(); - //resource attributes (locale, style, variation) might be encoded in the URL - final UrlAttributes urlAttributes = ResourceUtil.decodeResourceReferenceAttributes(url); + + RequestCycle requestCycle = RequestCycle.get(); + UrlAttributes urlAttributes = null; + if (requestCycle != null) + { + //resource attributes (locale, style, variation) might be encoded in the URL + final Url url = requestCycle.getRequest().getUrl(); + urlAttributes = ResourceUtil.decodeResourceReferenceAttributes(url); + } + final String currentVariation = getCurrentVariation(urlAttributes); final String currentStyle = getCurrentStyle(urlAttributes); final Locale currentLocale = getCurrentLocale(urlAttributes); @@ -185,7 +191,11 @@ public class PackageResourceReference extends ResourceReference { Locale currentLocale = getCurrentLocale(); - return currentLocale != null ? currentLocale : attributes.getLocale(); + return currentLocale != null + ? currentLocale + : attributes != null + ? attributes.getLocale() + : null; } private Locale getCurrentLocale() @@ -208,8 +218,12 @@ public class PackageResourceReference extends ResourceReference private String getCurrentStyle(UrlAttributes attributes) { String currentStyle = getCurrentStyle(); - - return currentStyle != null ? currentStyle : attributes.getStyle(); + + return currentStyle != null + ? currentStyle + : attributes != null + ? attributes.getStyle() + : null; } private String getCurrentStyle() @@ -233,7 +247,11 @@ public class PackageResourceReference extends ResourceReference { final String variation = getVariation(); - return variation != null ? variation : attributes.getVariation(); + return variation != null + ? variation + : attributes != null + ? attributes.getVariation() + : null; } /** http://git-wip-us.apache.org/repos/asf/wicket/blob/e4399d74/wicket-core/src/test/java/org/apache/wicket/request/resource/PackageResourceReferenceTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/PackageResourceReferenceTest.java b/wicket-core/src/test/java/org/apache/wicket/request/resource/PackageResourceReferenceTest.java index df70f16..de7a0a5 100644 --- a/wicket-core/src/test/java/org/apache/wicket/request/resource/PackageResourceReferenceTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/request/resource/PackageResourceReferenceTest.java @@ -21,6 +21,7 @@ import java.io.InputStream; import java.util.Locale; import org.apache.wicket.Application; +import org.apache.wicket.ThreadContext; import org.apache.wicket.protocol.http.mock.MockHttpServletRequest; import org.apache.wicket.protocol.http.mock.MockHttpServletResponse; import org.apache.wicket.request.Request; @@ -355,5 +356,23 @@ public class PackageResourceReferenceTest extends WicketTestCase new String(mockHttpServletResponse.getBinaryContent())); } + /** + * https://issues.apache.org/jira/browse/WICKET-6031 + */ + @Test + public void noRequestCycle() + { + ThreadContext.setRequestCycle(null); + + PackageResourceReference reference = new PackageResourceReference(scope, "resource.txt", + locales[1], styles[1], variations[1]); + + PackageResource resource = reference.getResource(); + assertNotNull(resource); + + assertEquals(locales[1], resource.getResourceStream().getLocale()); + assertEquals(styles[1], resource.getResourceStream().getStyle()); + assertEquals(variations[1], resource.getResourceStream().getVariation()); + } }
