Search in sources :

Example 1 with TagAttributeInfo

use of javax.servlet.jsp.tagext.TagAttributeInfo in project tomcat by apache.

the class TestTldParser method testTld.

@Test
public void testTld() throws Exception {
    TaglibXml xml = parse("test/tld/test.tld");
    Assert.assertEquals("1.0", xml.getTlibVersion());
    Assert.assertEquals("2.1", xml.getJspVersion());
    Assert.assertEquals("test", xml.getShortName());
    Assert.assertEquals("http://tomcat.apache.org/TldTests", xml.getUri());
    Assert.assertEquals(1, xml.getFunctions().size());
    ValidatorXml validator = xml.getValidator();
    Assert.assertEquals("com.example.Validator", validator.getValidatorClass());
    Assert.assertEquals(1, validator.getInitParams().size());
    Assert.assertEquals("value", validator.getInitParams().get("name"));
    Assert.assertEquals(1, xml.getTags().size());
    TagXml tag = xml.getTags().get(0);
    Assert.assertEquals("org.apache.jasper.compiler.TestValidator$Echo", tag.getTagClass());
    Assert.assertEquals("empty", tag.getBodyContent());
    Assert.assertTrue(tag.hasDynamicAttributes());
    Assert.assertEquals(1, tag.getVariables().size());
    TagVariableInfo variableInfo = tag.getVariables().get(0);
    Assert.assertEquals("var", variableInfo.getNameGiven());
    Assert.assertEquals("java.lang.Object", variableInfo.getClassName());
    Assert.assertTrue(variableInfo.getDeclare());
    Assert.assertEquals(VariableInfo.AT_END, variableInfo.getScope());
    Assert.assertEquals(4, tag.getAttributes().size());
    TagAttributeInfo attributeInfo = tag.getAttributes().get(0);
    Assert.assertEquals("Echo Tag", tag.getInfo());
    Assert.assertEquals("Echo", tag.getDisplayName());
    Assert.assertEquals("small", tag.getSmallIcon());
    Assert.assertEquals("large", tag.getLargeIcon());
    Assert.assertEquals("echo", attributeInfo.getName());
    Assert.assertTrue(attributeInfo.isRequired());
    Assert.assertTrue(attributeInfo.canBeRequestTime());
    attributeInfo = tag.getAttributes().get(1);
    Assert.assertEquals("fragment", attributeInfo.getName());
    Assert.assertTrue(attributeInfo.isFragment());
    Assert.assertTrue(attributeInfo.canBeRequestTime());
    Assert.assertEquals("javax.servlet.jsp.tagext.JspFragment", attributeInfo.getTypeName());
    attributeInfo = tag.getAttributes().get(2);
    Assert.assertEquals("deferredValue", attributeInfo.getName());
    Assert.assertEquals("javax.el.ValueExpression", attributeInfo.getTypeName());
    Assert.assertEquals("java.util.Date", attributeInfo.getExpectedTypeName());
    attributeInfo = tag.getAttributes().get(3);
    Assert.assertEquals("deferredMethod", attributeInfo.getName());
    Assert.assertEquals("javax.el.MethodExpression", attributeInfo.getTypeName());
    Assert.assertEquals("java.util.Date getDate()", attributeInfo.getMethodSignature());
    Assert.assertEquals(1, xml.getTagFiles().size());
    TagFileXml tagFile = xml.getTagFiles().get(0);
    Assert.assertEquals("Echo", tag.getDisplayName());
    Assert.assertEquals("small", tag.getSmallIcon());
    Assert.assertEquals("large", tag.getLargeIcon());
    Assert.assertEquals("Echo2", tagFile.getName());
    Assert.assertEquals("/echo.tag", tagFile.getPath());
    Assert.assertEquals(1, xml.getFunctions().size());
    FunctionInfo fn = xml.getFunctions().get(0);
    Assert.assertEquals("trim", fn.getName());
    Assert.assertEquals("org.apache.el.TesterFunctions", fn.getFunctionClass());
    Assert.assertEquals("java.lang.String trim(java.lang.String)", fn.getFunctionSignature());
}
Also used : TagAttributeInfo(javax.servlet.jsp.tagext.TagAttributeInfo) TagVariableInfo(javax.servlet.jsp.tagext.TagVariableInfo) FunctionInfo(javax.servlet.jsp.tagext.FunctionInfo) Test(org.junit.Test)

Example 2 with TagAttributeInfo

use of javax.servlet.jsp.tagext.TagAttributeInfo in project tomcat by apache.

the class Parser method getAttributeBodyType.

/**
     * Determine the body type of <jsp:attribute> from the enclosing node
     */
private String getAttributeBodyType(Node n, String name) {
    if (n instanceof Node.CustomTag) {
        TagInfo tagInfo = ((Node.CustomTag) n).getTagInfo();
        TagAttributeInfo[] tldAttrs = tagInfo.getAttributes();
        for (int i = 0; i < tldAttrs.length; i++) {
            if (name.equals(tldAttrs[i].getName())) {
                if (tldAttrs[i].isFragment()) {
                    return TagInfo.BODY_CONTENT_SCRIPTLESS;
                }
                if (tldAttrs[i].canBeRequestTime()) {
                    return TagInfo.BODY_CONTENT_JSP;
                }
            }
        }
        if (tagInfo.hasDynamicAttributes()) {
            return TagInfo.BODY_CONTENT_JSP;
        }
    } else if (n instanceof Node.IncludeAction) {
        if ("page".equals(name)) {
            return TagInfo.BODY_CONTENT_JSP;
        }
    } else if (n instanceof Node.ForwardAction) {
        if ("page".equals(name)) {
            return TagInfo.BODY_CONTENT_JSP;
        }
    } else if (n instanceof Node.SetProperty) {
        if ("value".equals(name)) {
            return TagInfo.BODY_CONTENT_JSP;
        }
    } else if (n instanceof Node.UseBean) {
        if ("beanName".equals(name)) {
            return TagInfo.BODY_CONTENT_JSP;
        }
    } else if (n instanceof Node.PlugIn) {
        if ("width".equals(name) || "height".equals(name)) {
            return TagInfo.BODY_CONTENT_JSP;
        }
    } else if (n instanceof Node.ParamAction) {
        if ("value".equals(name)) {
            return TagInfo.BODY_CONTENT_JSP;
        }
    } else if (n instanceof Node.JspElement) {
        return TagInfo.BODY_CONTENT_JSP;
    }
    return JAVAX_BODY_CONTENT_TEMPLATE_TEXT;
}
Also used : TagAttributeInfo(javax.servlet.jsp.tagext.TagAttributeInfo) TagInfo(javax.servlet.jsp.tagext.TagInfo)

Example 3 with TagAttributeInfo

use of javax.servlet.jsp.tagext.TagAttributeInfo in project sling by apache.

the class TagLibraryInfoImpl method createTagInfo.

private TagInfo createTagInfo(TreeNode elem, String jspVersion) throws JasperException {
    String tagName = null;
    String tagClassName = null;
    String teiClassName = null;
    /*
         * Default body content for JSP 1.2 tag handlers (<body-content> has
         * become mandatory in JSP 2.0, because the default would be invalid for
         * simple tag handlers)
         */
    String bodycontent = "JSP";
    String info = null;
    String displayName = null;
    String smallIcon = null;
    String largeIcon = null;
    boolean dynamicAttributes = false;
    Vector attributeVector = new Vector();
    Vector variableVector = new Vector();
    Iterator list = elem.findChildren();
    while (list.hasNext()) {
        TreeNode element = (TreeNode) list.next();
        String tname = element.getName();
        if ("name".equals(tname)) {
            tagName = element.getBody();
        } else if ("tagclass".equals(tname) || "tag-class".equals(tname)) {
            tagClassName = element.getBody();
        } else if ("teiclass".equals(tname) || "tei-class".equals(tname)) {
            teiClassName = element.getBody();
        } else if ("bodycontent".equals(tname) || "body-content".equals(tname)) {
            bodycontent = element.getBody();
        } else if ("display-name".equals(tname)) {
            displayName = element.getBody();
        } else if ("small-icon".equals(tname)) {
            smallIcon = element.getBody();
        } else if ("large-icon".equals(tname)) {
            largeIcon = element.getBody();
        } else if ("icon".equals(tname)) {
            TreeNode icon = element.findChild("small-icon");
            if (icon != null) {
                smallIcon = icon.getBody();
            }
            icon = element.findChild("large-icon");
            if (icon != null) {
                largeIcon = icon.getBody();
            }
        } else if ("info".equals(tname) || "description".equals(tname)) {
            info = element.getBody();
        } else if ("variable".equals(tname)) {
            variableVector.addElement(createVariable(element));
        } else if ("attribute".equals(tname)) {
            attributeVector.addElement(createAttribute(element, jspVersion));
        } else if ("dynamic-attributes".equals(tname)) {
            dynamicAttributes = JspUtil.booleanValue(element.getBody());
        } else if ("example".equals(tname)) {
        // Ignored elements
        } else if ("tag-extension".equals(tname)) {
        // Ignored
        } else {
            if (log.isWarnEnabled()) {
                log.warn(Localizer.getMessage("jsp.warning.unknown.element.in.tag", tname));
            }
        }
    }
    TagExtraInfo tei = null;
    if (teiClassName != null && !teiClassName.equals("")) {
        try {
            Class teiClass = ctxt.getClassLoader().loadClass(teiClassName);
            tei = (TagExtraInfo) teiClass.newInstance();
        } catch (Exception e) {
            err.jspError("jsp.error.teiclass.instantiation", teiClassName, e);
        }
    }
    TagAttributeInfo[] tagAttributeInfo = new TagAttributeInfo[attributeVector.size()];
    attributeVector.copyInto(tagAttributeInfo);
    TagVariableInfo[] tagVariableInfos = new TagVariableInfo[variableVector.size()];
    variableVector.copyInto(tagVariableInfos);
    TagInfo taginfo = new TagInfo(tagName, tagClassName, bodycontent, info, this, tei, tagAttributeInfo, displayName, smallIcon, largeIcon, tagVariableInfos, dynamicAttributes);
    return taginfo;
}
Also used : TagAttributeInfo(javax.servlet.jsp.tagext.TagAttributeInfo) TagVariableInfo(javax.servlet.jsp.tagext.TagVariableInfo) IOException(java.io.IOException) FileNotFoundException(java.io.FileNotFoundException) JasperException(org.apache.sling.scripting.jsp.jasper.JasperException) TreeNode(org.apache.sling.scripting.jsp.jasper.xmlparser.TreeNode) TagExtraInfo(javax.servlet.jsp.tagext.TagExtraInfo) TagInfo(javax.servlet.jsp.tagext.TagInfo) Iterator(java.util.Iterator) Vector(java.util.Vector)

Example 4 with TagAttributeInfo

use of javax.servlet.jsp.tagext.TagAttributeInfo in project sling by apache.

the class TagLibraryInfoImpl method createAttribute.

TagAttributeInfo createAttribute(TreeNode elem, String jspVersion) {
    String name = null;
    String type = null;
    String expectedType = null;
    String methodSignature = null;
    boolean required = false, rtexprvalue = false, reqTime = false, isFragment = false, deferredValue = false, deferredMethod = false;
    Iterator list = elem.findChildren();
    while (list.hasNext()) {
        TreeNode element = (TreeNode) list.next();
        String tname = element.getName();
        if ("name".equals(tname)) {
            name = element.getBody();
        } else if ("required".equals(tname)) {
            String s = element.getBody();
            if (s != null)
                required = JspUtil.booleanValue(s);
        } else if ("rtexprvalue".equals(tname)) {
            String s = element.getBody();
            if (s != null)
                rtexprvalue = JspUtil.booleanValue(s);
        } else if ("type".equals(tname)) {
            type = element.getBody();
            if ("1.2".equals(jspVersion) && (type.equals("Boolean") || type.equals("Byte") || type.equals("Character") || type.equals("Double") || type.equals("Float") || type.equals("Integer") || type.equals("Long") || type.equals("Object") || type.equals("Short") || type.equals("String"))) {
                type = "java.lang." + type;
            }
        } else if ("fragment".equals(tname)) {
            String s = element.getBody();
            if (s != null) {
                isFragment = JspUtil.booleanValue(s);
            }
        } else if ("deferred-value".equals(tname)) {
            deferredValue = true;
            type = "javax.el.ValueExpression";
            TreeNode child = element.findChild("type");
            if (child != null) {
                expectedType = child.getBody();
                if (expectedType != null) {
                    expectedType = expectedType.trim();
                }
            } else {
                expectedType = "java.lang.Object";
            }
        } else if ("deferred-method".equals(tname)) {
            deferredMethod = true;
            type = "javax.el.MethodExpression";
            TreeNode child = element.findChild("method-signature");
            if (child != null) {
                methodSignature = child.getBody();
                if (methodSignature != null) {
                    methodSignature = methodSignature.trim();
                }
            } else {
                methodSignature = "java.lang.Object method()";
            }
        } else if (// Ignored elements
        "description".equals(tname) || false) {
            ;
        } else {
            if (log.isWarnEnabled()) {
                log.warn(Localizer.getMessage("jsp.warning.unknown.element.in.attribute", tname));
            }
        }
    }
    if (isFragment) {
        /*
             * According to JSP.C-3 ("TLD Schema Element Structure - tag"),
             * 'type' and 'rtexprvalue' must not be specified if 'fragment' has
             * been specified (this will be enforced by validating parser).
             * Also, if 'fragment' is TRUE, 'type' is fixed at
             * javax.servlet.jsp.tagext.JspFragment, and 'rtexprvalue' is fixed
             * at true. See also JSP.8.5.2.
             */
        type = "javax.servlet.jsp.tagext.JspFragment";
        rtexprvalue = true;
    }
    if (!rtexprvalue && type == null) {
        // According to JSP spec, for static values (those determined at
        // translation time) the type is fixed at java.lang.String.
        type = "java.lang.String";
    }
    return new TagAttributeInfo(name, required, type, rtexprvalue, isFragment, null, deferredValue, deferredMethod, expectedType, methodSignature);
}
Also used : TreeNode(org.apache.sling.scripting.jsp.jasper.xmlparser.TreeNode) TagAttributeInfo(javax.servlet.jsp.tagext.TagAttributeInfo) Iterator(java.util.Iterator)

Example 5 with TagAttributeInfo

use of javax.servlet.jsp.tagext.TagAttributeInfo in project sling by apache.

the class Parser method getAttributeBodyType.

/**
     * Determine the body type of <jsp:attribute> from the enclosing node
     */
private String getAttributeBodyType(Node n, String name) {
    if (n instanceof Node.CustomTag) {
        TagInfo tagInfo = ((Node.CustomTag) n).getTagInfo();
        TagAttributeInfo[] tldAttrs = tagInfo.getAttributes();
        for (int i = 0; i < tldAttrs.length; i++) {
            if (name.equals(tldAttrs[i].getName())) {
                if (tldAttrs[i].isFragment()) {
                    return TagInfo.BODY_CONTENT_SCRIPTLESS;
                }
                if (tldAttrs[i].canBeRequestTime()) {
                    return TagInfo.BODY_CONTENT_JSP;
                }
            }
        }
        if (tagInfo.hasDynamicAttributes()) {
            return TagInfo.BODY_CONTENT_JSP;
        }
    } else if (n instanceof Node.IncludeAction) {
        if ("page".equals(name)) {
            return TagInfo.BODY_CONTENT_JSP;
        }
    } else if (n instanceof Node.ForwardAction) {
        if ("page".equals(name)) {
            return TagInfo.BODY_CONTENT_JSP;
        }
    } else if (n instanceof Node.SetProperty) {
        if ("value".equals(name)) {
            return TagInfo.BODY_CONTENT_JSP;
        }
    } else if (n instanceof Node.UseBean) {
        if ("beanName".equals(name)) {
            return TagInfo.BODY_CONTENT_JSP;
        }
    } else if (n instanceof Node.PlugIn) {
        if ("width".equals(name) || "height".equals(name)) {
            return TagInfo.BODY_CONTENT_JSP;
        }
    } else if (n instanceof Node.ParamAction) {
        if ("value".equals(name)) {
            return TagInfo.BODY_CONTENT_JSP;
        }
    } else if (n instanceof Node.JspElement) {
        return TagInfo.BODY_CONTENT_JSP;
    }
    return JAVAX_BODY_CONTENT_TEMPLATE_TEXT;
}
Also used : TagAttributeInfo(javax.servlet.jsp.tagext.TagAttributeInfo) TagInfo(javax.servlet.jsp.tagext.TagInfo)

Aggregations

TagAttributeInfo (javax.servlet.jsp.tagext.TagAttributeInfo)7 TagInfo (javax.servlet.jsp.tagext.TagInfo)4 TagVariableInfo (javax.servlet.jsp.tagext.TagVariableInfo)3 IOException (java.io.IOException)2 Iterator (java.util.Iterator)2 FunctionInfo (javax.servlet.jsp.tagext.FunctionInfo)2 TagExtraInfo (javax.servlet.jsp.tagext.TagExtraInfo)2 TreeNode (org.apache.sling.scripting.jsp.jasper.xmlparser.TreeNode)2 FileNotFoundException (java.io.FileNotFoundException)1 URISyntaxException (java.net.URISyntaxException)1 Vector (java.util.Vector)1 JasperException (org.apache.jasper.JasperException)1 JasperException (org.apache.sling.scripting.jsp.jasper.JasperException)1 TagXml (org.apache.tomcat.util.descriptor.tld.TagXml)1 TaglibXml (org.apache.tomcat.util.descriptor.tld.TaglibXml)1 TldResourcePath (org.apache.tomcat.util.descriptor.tld.TldResourcePath)1 ValidatorXml (org.apache.tomcat.util.descriptor.tld.ValidatorXml)1 Test (org.junit.Test)1