Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
   *
   * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
   *
   * The contents of this file are subject to the terms of either the GNU
   * General Public License Version 2 only ("GPL") or the Common Development
   * and Distribution License("CDDL") (collectively, the "License").  You
   * may not use this file except in compliance with the License.  You can
  * obtain a copy of the License at
  * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
  * or packager/legal/LICENSE.txt.  See the License for the specific
  * language governing permissions and limitations under the License.
  *
  * When distributing the software, include this License Header Notice in each
  * file and include the License file at packager/legal/LICENSE.txt.
  *
  * GPL Classpath Exception:
  * Oracle designates this particular file as subject to the "Classpath"
  * exception as provided by Oracle in the GPL Version 2 section of the License
  * file that accompanied this code.
  *
  * Modifications:
  * If applicable, add the following below the License Header, with the fields
  * enclosed by brackets [] replaced by your own identifying information:
  * "Portions Copyright [year] [name of copyright owner]"
  *
  * Contributor(s):
  * If you wish your version of this file to be governed by only the CDDL or
  * only the GPL Version 2, indicate your decision by adding "[Contributor]
  * elects to include this software in this distribution under the [CDDL or GPL
  * Version 2] license."  If you don't indicate a single choice of license, a
  * recipient has the option to distribute your version of this file under
  * either the CDDL, the GPL Version 2 or to extend the choice of license to
  * its licensees as provided above.  However, if you add GPL Version 2 code
  * and therefore, elected the GPL Version 2 license, then the option applies
  * only if the new code is made subject to such option by the copyright
  * holder.
  *
  *
  * This file incorporates work covered by the following copyright and
  * permission notice:
  *
  * Copyright 2004 The Apache Software Foundation
  *
  * Licensed 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.taglibs.standard.tag.common.xml;
 
 import java.io.Reader;
 
 

Support for tag handlers for <parse>, the XML parsing tag.

Author(s):
Shawn Bayern
 
 public abstract class ParseSupport extends BodyTagSupport {
 
     //*********************************************************************
    // Protected state
    protected Object xml;                          // 'xml' attribute
    protected String systemId;                     // 'systemId' attribute
    protected XMLFilter filter;			   // 'filter' attribute
    //*********************************************************************
    // Private state
    private String var;                            // 'var' attribute
    private String varDom;			   // 'varDom' attribute
    private int scope;				   // processed 'scope' attr
    private int scopeDom;			   // processed 'scopeDom' attr
    // state in support of XML parsing...
    private DocumentBuilderFactory dbf;
    private DocumentBuilder db;
    private TransformerFactory tf;
    private TransformerHandler th;
    //*********************************************************************
    // Constructor and initialization
    public ParseSupport() {
	super();
    }
    private void init() {
	 =  = null;
	 = null;
	 = null;
	 = null;
	 = null;
	 = null;
	 = null;
	 = null;
    }
    //*********************************************************************
    // Tag logic
    // parse 'source' or body, storing result in 'var'
    public int doEndTag() throws JspException {
      try {
	// set up our DocumentBuilder
        if ( == null) {
             = DocumentBuilderFactory.newInstance();
            .setNamespaceAware(true);
            .setValidating(false);
        }
         = .newDocumentBuilder();
	// if we've gotten a filter, set up a transformer to support it
	if ( != null) {
            if ( == null)
                 = TransformerFactory.newInstance();
            if (!.getFeature(.))
                throw new JspTagException(
		    Resources.getMessage("PARSE_NO_SAXTRANSFORMER"));
            SAXTransformerFactory stf = (SAXTransformerFactory;
             = stf.newTransformerHandler();
	}
	// produce a Document by parsing whatever the attributes tell us to use
	Object xmlText = this.;
	if (xmlText == null) {
	    // if the attribute was specified, use the body as 'xml'
	    if ( != null && .getString() != null)
		xmlText = .getString().trim();
	    else
		xmlText = "";
	}
	if (xmlText instanceof String)
	    d = parseStringWithFilter((StringxmlText);
	else if (xmlText instanceof Reader)
	    d = parseReaderWithFilter((ReaderxmlText);
	else
	    throw new JspTagException(
	        Resources.getMessage("PARSE_INVALID_SOURCE"));
	// we've got a Document object; store it out as appropriate
	// (let any exclusivity or other constraints be enforced by TEI/TLV)
	if ( != null)
	if ( != null)
	return ;
      } catch (SAXException ex) {
	throw new JspException(ex);
      } catch (IOException ex) {
	throw new JspException(ex);
      } catch (ParserConfigurationException ex) {
	throw new JspException(ex);
      } catch (TransformerConfigurationException ex) {
	throw new JspException(ex);
      }
    }
    // Releases any resources we may have (or inherit)
    public void release() {
    }
    //*********************************************************************
    // Private utility methods

    
Parses the given InputSource after, applying the given XMLFilter.
            throws SAXExceptionIOException {
	if (f != null) {
            // prepare an output Document
            Document o = .newDocument();
            // use TrAX to adapt SAX events to a Document object
            .setResult(new DOMResult(o));
            XMLReader xr = XMLReaderFactory.createXMLReader();
            //   (note that we overwrite the filter's parent.  this seems
            //    to be expected usage.  we could cache and reset the old
            //    parent, but you can't setParent(null), so this wouldn't
            //    be perfect.)
            f.setParent(xr);
            f.setContentHandler();
            f.parse(s);
            return o;
else
	    return parseInputSource(s);	
    }

    
Parses the given Reader after applying the given XMLFilter.
            throws SAXExceptionIOException {
    }

    
Parses the given String after applying the given XMLFilter.
            throws SAXExceptionIOException {
        StringReader r = new StringReader(s);
        return parseReaderWithFilter(rf);
    }

    
Parses the given Reader after applying the given XMLFilter.
    private Document parseURLWithFilter(String urlXMLFilter f)
            throws SAXExceptionIOException {
    }

    
Parses the given InputSource into a Document.
	    throws SAXExceptionIOException {
        // normalize URIs so they can be processed consistently by resolver
        if ( == null)
            s.setSystemId("jstl:");
	else if (ImportSupport.isAbsoluteUrl())
            s.setSystemId();
        else
            s.setSystemId("jstl:" + );
	return .parse(s);
    }

    
Parses the given Reader into a Document.
    private Document parseReader(Reader rthrows SAXExceptionIOException {
        return parseInputSource(new InputSource(r));
    }

    
Parses the given String into a Document.
    private Document parseString(String sthrows SAXExceptionIOException {
        StringReader r = new StringReader(s);
        return parseReader(r);
    }

    
Parses the URL (passed as a String) into a Document.
    private Document parseURL(String urlthrows SAXExceptionIOException {
	return parseInputSource(new InputSource(url));
    }
    //*********************************************************************
    // JSTL-specific EntityResolver class

    
Lets us resolve relative external entities.
    public static class JstlEntityResolver implements EntityResolver {
	private final PageContext ctx;
        public JstlEntityResolver(PageContext ctx) {
            this. = ctx;
        }
        public InputSource resolveEntity(String publicIdString systemId)
	        throws FileNotFoundException {
	    // pass if we don't have a systemId
	    if (systemId == null)
		return null;
	    // strip leading "jstl:" off URL if applicable
	    if (systemId.startsWith("jstl:"))
		systemId = systemId.substring(5);
	    // we're only concerned with relative URLs
	    if (ImportSupport.isAbsoluteUrl(systemId))
		return null;
	    // for relative URLs, load and wrap the resource.
	    // don't bother checking for 'null' since we specifically want
	    // the parser to fail if the resource doesn't exist
	    InputStream s;
	    if (systemId.startsWith("/")) {
	        s = .getServletContext().getResourceAsStream(systemId);
	        if (s == null)
		    throw new FileNotFoundException(
			Resources.getMessage("UNABLE_TO_RESOLVE_ENTITY",
			 systemId));
	    } else {
		String pagePath =
		String basePath =
		    pagePath.substring(0, pagePath.lastIndexOf("/"));
		      basePath + "/" + systemId);
	        if (s == null)
		    throw new FileNotFoundException(
			Resources.getMessage("UNABLE_TO_RESOLVE_ENTITY",
			 systemId));
	    }
	    return new InputSource(s);
        }
    }
    //*********************************************************************
    // Tag attributes
    public void setVar(String var) {
	this. = var;
    }
    public void setVarDom(String varDom) {
	this. = varDom;
    }
    public void setScope(String scope) {
	this. = Util.getScope(scope);
    }
    public void setScopeDom(String scopeDom) {
	this. = Util.getScope(scopeDom);
    }
New to GrepCode? Check out our FAQ X