You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by js...@apache.org on 2016/04/12 08:45:17 UTC

svn commit: r1738701 - in /sling/trunk: bundles/scripting/jsp-taglib/ bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/tei/ bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/tei/ launchpad/...

Author: jsedding
Date: Tue Apr 12 06:45:16 2016
New Revision: 1738701

URL: http://svn.apache.org/viewvc?rev=1738701&view=rev
Log:
SLING-5653 - adaptTo tag fails when adaptTo parameter is an expression

Added:
    sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/tei/
    sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/tei/AdaptToTEITest.java   (with props)
Modified:
    sling/trunk/bundles/scripting/jsp-taglib/pom.xml
    sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/tei/AbstractVarTEI.java
    sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/tei/AdaptToTEI.java
    sling/trunk/launchpad/builder/src/main/provisioning/sling.txt
    sling/trunk/launchpad/integration-tests/src/main/resources/integration-test/taglib-test.jsp

Modified: sling/trunk/bundles/scripting/jsp-taglib/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp-taglib/pom.xml?rev=1738701&r1=1738700&r2=1738701&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/jsp-taglib/pom.xml (original)
+++ sling/trunk/bundles/scripting/jsp-taglib/pom.xml Tue Apr 12 06:45:16 2016
@@ -53,7 +53,10 @@
                             !org.apache.log4j.*,
 							*
 						</Import-Package>
-						<Embed-Dependency>esapi;inline=true</Embed-Dependency>
+						<Embed-Dependency>
+							esapi;inline=true,
+							org.apache.sling.scripting.core;inline=org/apache/sling/scripting/core/servlet/CaptureResponseWrapper.class
+						</Embed-Dependency>
 					</instructions>
 				</configuration>
 			</plugin>

Modified: sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/tei/AbstractVarTEI.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/tei/AbstractVarTEI.java?rev=1738701&r1=1738700&r2=1738701&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/tei/AbstractVarTEI.java (original)
+++ sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/tei/AbstractVarTEI.java Tue Apr 12 06:45:16 2016
@@ -32,6 +32,8 @@ import javax.servlet.jsp.tagext.Variable
  */
 public abstract class AbstractVarTEI extends TagExtraInfo {
 
+    static final String OBJECT_CLASS_NAME = Object.class.getName();
+
     protected static final String ATTR_VAR = "var";
 
     private final String variableNameAttribute;
@@ -69,6 +71,19 @@ public abstract class AbstractVarTEI ext
      */
     protected abstract String getClassName(TagData data);
 
+    static String safeGetStringAttribute(TagData data, String attributeName) {
+        final Object attribute = data.getAttribute(attributeName);
+        if (attribute == TagData.REQUEST_TIME_VALUE) {
+            return null;
+        }
+        return data.getAttributeString(attributeName);
+    }
+
+    static String safeGetStringAttribute(TagData data, String attributeName, String defaultValue) {
+        final String attribute = safeGetStringAttribute(data, attributeName);
+        return attribute == null ? defaultValue : attribute;
+    }
+
     @Override
     public VariableInfo[] getVariableInfo(TagData data) {
         final String variableName = getVariableName(data);

Modified: sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/tei/AdaptToTEI.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/tei/AdaptToTEI.java?rev=1738701&r1=1738700&r2=1738701&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/tei/AdaptToTEI.java (original)
+++ sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/tei/AdaptToTEI.java Tue Apr 12 06:45:16 2016
@@ -23,6 +23,6 @@ public class AdaptToTEI extends Abstract
 
 	@Override
 	protected String getClassName(TagData data) {
-		return data.getAttributeString(ATTR_ADAPT_TO);
+		return safeGetStringAttribute(data, ATTR_ADAPT_TO, OBJECT_CLASS_NAME);
 	}
 }

Added: sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/tei/AdaptToTEITest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/tei/AdaptToTEITest.java?rev=1738701&view=auto
==============================================================================
--- sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/tei/AdaptToTEITest.java (added)
+++ sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/tei/AdaptToTEITest.java Tue Apr 12 06:45:16 2016
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sling.scripting.jsp.taglib.tei;
+
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.servlet.jsp.tagext.TagData;
+import javax.servlet.jsp.tagext.VariableInfo;
+
+import java.util.Hashtable;
+
+import static junit.framework.TestCase.assertEquals;
+
+public class AdaptToTEITest {
+
+    private static final Logger LOG = LoggerFactory.getLogger(AdaptToTEITest.class);
+
+    @Test
+    public void typeInference() {
+        final AdaptToTEI adaptToTEI = new AdaptToTEI();
+        final String className = "org.foo.Bar";
+        final VariableInfo[] variableInfo = adaptToTEI.getVariableInfo(tagData(className));
+        assertEquals(1, variableInfo.length);
+        assertEquals(className, variableInfo[0].getClassName());
+    }
+
+    @Test
+    public void typeInferenceNotPossible() {
+        final AdaptToTEI adaptToTEI = new AdaptToTEI();
+        final Object className = TagData.REQUEST_TIME_VALUE;
+        final VariableInfo[] variableInfo = adaptToTEI.getVariableInfo(tagData(className));
+        assertEquals(1, variableInfo.length);
+        assertEquals(Object.class.getName(), variableInfo[0].getClassName());
+    }
+
+    private TagData tagData(final Object className) {
+        final Hashtable<String, Object> map = new Hashtable<String, Object>();
+        map.put(AdaptToTEI.ATTR_VAR, "foo");
+        map.put(AdaptToTEI.ATTR_ADAPT_TO, className);
+        return new TagData(map);
+    }
+}

Propchange: sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/tei/AdaptToTEITest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: sling/trunk/launchpad/builder/src/main/provisioning/sling.txt
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/builder/src/main/provisioning/sling.txt?rev=1738701&r1=1738700&r2=1738701&view=diff
==============================================================================
--- sling/trunk/launchpad/builder/src/main/provisioning/sling.txt (original)
+++ sling/trunk/launchpad/builder/src/main/provisioning/sling.txt Tue Apr 12 06:45:16 2016
@@ -69,7 +69,7 @@
     org.apache.sling/org.apache.sling.scripting.core/2.0.36
     org.apache.sling/org.apache.sling.scripting.javascript/2.0.28
     org.apache.sling/org.apache.sling.scripting.jsp/2.1.8
-    org.apache.sling/org.apache.sling.scripting.jsp.taglib/2.2.4
+    org.apache.sling/org.apache.sling.scripting.jsp.taglib/2.2.5-SNAPSHOT
     org.apache.sling/org.apache.sling.scripting.sightly/1.0.16
     org.apache.sling/org.apache.sling.scripting.sightly.js.provider/1.0.10
     org.apache.sling/org.apache.sling.scripting.sightly.models.provider/1.0.0

Modified: sling/trunk/launchpad/integration-tests/src/main/resources/integration-test/taglib-test.jsp
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/integration-tests/src/main/resources/integration-test/taglib-test.jsp?rev=1738701&r1=1738700&r2=1738701&view=diff
==============================================================================
--- sling/trunk/launchpad/integration-tests/src/main/resources/integration-test/taglib-test.jsp (original)
+++ sling/trunk/launchpad/integration-tests/src/main/resources/integration-test/taglib-test.jsp Tue Apr 12 06:45:16 2016
@@ -13,6 +13,11 @@ AdaptTo Tag
     Test 3: Test Non-Adaptable Handling
     result: <c:catch var="adaptionException"><sling:adaptTo adaptable="res" adaptTo="org.apache.sling.api.resource.ValueMap" var="props3" /></c:catch><c:choose><c:when test="${not empty adaptionException}">SUCCESS: ${adaptionException}</c:when><c:otherwise>ERROR<c:set var="success" value="false" /></c:otherwise></c:choose>
 
+    Test 4: Test adapting when the class name is a run-time expression
+    <c:set var="dest" value="org.apache.sling.api.resource.ValueMap"/>
+    <sling:adaptTo adaptable="${resource}" adaptTo="${dest}" var="props5"/>
+    result: <c:choose><c:when test="${not empty props5 and props5['jcr:primaryType'] eq 'nt:unstructured'}">SUCCESS</c:when><c:otherwise>ERROR<c:set var="success" value="false" /></c:otherwise></c:choose>
+
 Encode Tag
     Test 1: HTML Encode
     Result: HTML_ENCODE:<sling:encode value="&amp;Hello World!<script></script>" mode="HTML" />