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());
+       }
 
 }

Reply via email to