FileDocCategorySizeDatePackage
CatalinaDigester.javaAPI DocGlassfish v2 API5563Fri May 04 22:32:30 BST 2007org.apache.catalina.util

CatalinaDigester

public class CatalinaDigester extends com.sun.org.apache.commons.digester.Digester
This extended digester filters out ${...} tokens to replace them with matching system properties.
author
Simon Kitching
author
Remy Maucherat

Fields Summary
protected static IntrospectionUtils.PropertySource[]
source
Constructors Summary
Methods Summary
public voidendElement(java.lang.String namespaceURI, java.lang.String localName, java.lang.String qName)
Invoke inherited implementation after applying variable substitution to the character data contained in the current element.

        bodyText = updateBodyText(bodyText);
        super.endElement(namespaceURI, localName, qName);
    
public voidstartElement(java.lang.String namespaceURI, java.lang.String localName, java.lang.String qName, org.xml.sax.Attributes list)
Invoke inherited implementation after applying variable substitution to any attribute values containing variable references.



    // ---------------------------------------------------------------- Methods


                        
         
                                
          
        list = updateAttributes(list);
        super.startElement(namespaceURI, localName, qName, list);
    
private org.xml.sax.AttributesupdateAttributes(org.xml.sax.Attributes list)
Returns an attributes list which contains all the attributes passed in, with any text of form "${xxx}" in an attribute value replaced by the appropriate value from the system property.


        if (list.getLength() == 0) {
            return list;
        }
        
        AttributesImpl newAttrs = new AttributesImpl(list);
        int nAttributes = newAttrs.getLength();
        for (int i = 0; i < nAttributes; ++i) {
            String value = newAttrs.getValue(i);
            try {
                String newValue = 
                    IntrospectionUtils.replaceProperties(value, null, source);
                if (value != newValue) {
                    newAttrs.setValue(i, newValue);
                }
            }
            catch (Exception e) {
                // ignore - let the attribute have its original value
            }
        }

        return newAttrs;

    
private java.lang.StringBufferupdateBodyText(java.lang.StringBuffer bodyText)
Return a new StringBuffer containing the same contents as the input buffer, except that data of form ${varname} have been replaced by the value of that var as defined in the system property.

        String in = bodyText.toString();
        String out;
        try {
            out = IntrospectionUtils.replaceProperties(in, null, source);
        } catch(Exception e) {
            return bodyText; // return unchanged data
        }

        if (out == in)  {
            // No substitutions required. Don't waste memory creating
            // a new buffer
            return bodyText;
        } else {
            return new StringBuffer(out);
        }