All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sun.xml.wss.impl.c14n.SAXC14nCanonicalizerImpl Maven / Gradle / Ivy

There is a newer version: 4.0.4
Show newest version
/*
 * Copyright (c) 1997, 2022 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Distribution License v. 1.0, which is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

package com.sun.xml.wss.impl.c14n;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;

import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.NamespaceSupport;

/**
 *
 * @author [email protected]
 */
public class SAXC14nCanonicalizerImpl extends BaseCanonicalizer  implements ContentHandler {

    NamespaceSupport nsContext = new NamespaceSupport ();
    //boolean  firstElement  =   true;



    /** Creates a new instance of SAXC14nCanonicalzerImpl */
    @SuppressWarnings("unchecked")
    public SAXC14nCanonicalizerImpl () {
        //_attrResult = new TreeSet (new AttrSorter (false));
        _attrResult = new ArrayList();
        for(int i=0;i<4;i++){
            _attrs.add (new Attribute ());
        }
    }

    public NamespaceSupport getNSContext (){
        return  nsContext;
    }
    /**
     * Receive notification of a parser warning.
     *
     * 

The default implementation does nothing. Application writers * may override this method in a subclass to take specific actions * for each warning, such as inserting the message in a log file or * printing it to the console. * * @param e The warning information encoded as an exception. * @exception org.xml.sax.SAXException Any SAX exception, possibly * wrapping another exception. * @see org.xml.sax.ErrorHandler#warning * @see org.xml.sax.SAXParseException */ public void warning (org.xml.sax.SAXParseException e) throws SAXException { } /** * Receive notification of a recoverable parser error. * *

The default implementation does nothing. Application writers * may override this method in a subclass to take specific actions * for each error, such as inserting the message in a log file or * printing it to the console. * * @param e The warning information encoded as an exception. * @exception org.xml.sax.SAXException Any SAX exception, possibly * wrapping another exception. * @see org.xml.sax.ErrorHandler#warning * @see org.xml.sax.SAXParseException */ public void error (org.xml.sax.SAXParseException e) throws SAXException { } /** * Report a fatal XML parsing error. * *

The default implementation throws a SAXParseException. * Application writers may override this method in a subclass if * they need to take specific actions for each fatal error (such as * collecting all of the errors into a single report): in any case, * the application must stop all regular processing when this * method is invoked, since the document is no longer reliable, and * the parser may no longer report parsing events. * * @param e The error information encoded as an exception. * @exception org.xml.sax.SAXException Any SAX exception, possibly * wrapping another exception. * @see org.xml.sax.ErrorHandler#fatalError * @see org.xml.sax.SAXParseException */ public void fatalError (org.xml.sax.SAXParseException e) throws SAXException { } public void comment (char[] ch, int start, int length) throws SAXException { } /** * Receive notification of character data inside an element. * *

By default, do nothing. Application writers may override this * method to take specific actions for each chunk of character data * (such as adding the data to a node or buffer, or printing it to * a file). * * @param ch The characters. * @param start The start position in the character array. * @param length The number of characters to use from the * character array. * @exception org.xml.sax.SAXException Any SAX exception, possibly * wrapping another exception. * @see org.xml.sax.ContentHandler#characters */ public void characters (char[] ch, int start, int length) throws SAXException { try { outputTextToWriter (ch,start,length,_stream); } catch (IOException ex) { throw new RuntimeException(ex); } } /** * Receive notification of ignorable whitespace in element content. * *

By default, do nothing. Application writers may override this * method to take specific actions for each chunk of ignorable * whitespace (such as adding data to a node or buffer, or printing * it to a file). * * @param ch The whitespace characters. * @param start The start position in the character array. * @param length The number of characters to use from the * character array. * @exception org.xml.sax.SAXException Any SAX exception, possibly * wrapping another exception. * @see org.xml.sax.ContentHandler#ignorableWhitespace */ public void ignorableWhitespace (char[] ch, int start, int length) throws SAXException { } public void endEntity (String name) throws SAXException { } public void startEntity (String name) throws SAXException { } /** * Receive notification of the end of a Namespace mapping. * *

By default, do nothing. Application writers may override this * method in a subclass to take specific actions at the end of * each prefix mapping. * * @param prefix The Namespace prefix being declared. * @exception org.xml.sax.SAXException Any SAX exception, possibly * wrapping another exception. * @see org.xml.sax.ContentHandler#endPrefixMapping */ public void endPrefixMapping (String prefix) throws SAXException { } /** * Receive a Locator object for document events. * *

By default, do nothing. Application writers may override this * method in a subclass if they wish to store the locator for use * with other document events. * * @param locator A locator for all SAX document events. * @see org.xml.sax.ContentHandler#setDocumentLocator * @see org.xml.sax.Locator */ public void setDocumentLocator (Locator locator) { } /** * Receive notification of a skipped entity. * *

By default, do nothing. Application writers may override this * method in a subclass to take specific actions for each * processing instruction, such as setting status variables or * invoking other methods. * * @param name The name of the skipped entity. * @exception org.xml.sax.SAXException Any SAX exception, possibly * wrapping another exception. * @see org.xml.sax.ContentHandler#processingInstruction */ public void skippedEntity (String name) throws SAXException { } /** * Receive notification of an unparsed entity declaration. * *

By default, do nothing. Application writers may override this * method in a subclass to keep track of the unparsed entities * declared in a document. * * @param name The entity name. * @param publicId The entity public identifier, or null if not * available. * @param systemId The entity system identifier. * @param notationName The name of the associated notation. * @exception org.xml.sax.SAXException Any SAX exception, possibly * wrapping another exception. * @see org.xml.sax.DTDHandler#unparsedEntityDecl */ public void unparsedEntityDecl (String name, String publicId, String systemId, String notationName) throws SAXException { } /** * Receive notification of the start of a Namespace mapping. * *

By default, do nothing. Application writers may override this * method in a subclass to take specific actions at the start of * each Namespace prefix scope (such as storing the prefix mapping). * * @param prefix The Namespace prefix being declared. * @param uri The Namespace URI mapped to the prefix. * @exception org.xml.sax.SAXException Any SAX exception, possibly * wrapping another exception. * @see org.xml.sax.ContentHandler#startPrefixMapping */ @SuppressWarnings("unchecked") public void startPrefixMapping (String prefix, String uri) throws SAXException { String dURI = nsContext.getURI (prefix); boolean add = dURI == null || !uri.equals(dURI); if(add && !_ncContextState[_depth]){ nsContext.pushContext (); _ncContextState[_depth]=true; } if(add){ if(prefix.length () == 0){ _defURI = uri; }else{ nsContext.declarePrefix (prefix,uri); AttributeNS attrNS = getAttributeNS (); attrNS.setPrefix (prefix); attrNS.setUri (uri); _nsResult.add (attrNS); } } } public void reset (){ super.reset (); nsContext.reset (); } /** * Receive notification of the start of an element. * *

By default, do nothing. Application writers may override this * method in a subclass to take specific actions at the start of * each element (such as allocating a new tree node or writing * output to a file). * * @param uri The Namespace URI, or the empty string if the * element has no Namespace URI or if Namespace * processing is not being performed. * @param localName The local name (without prefix), or the * empty string if Namespace processing is not being * performed. * @param qName The qualified name (with prefix), or the * empty string if qualified names are not available. * @param attributes The attributes attached to the element. If * there are no attributes, it shall be an empty * Attributes object. * @exception org.xml.sax.SAXException Any SAX exception, possibly * wrapping another exception. * @see org.xml.sax.ContentHandler#startElement */ public void startElement (String uri, String localName, String qName, Attributes attributes) throws SAXException { try { _depth ++; resize(); _ncContextState[_depth]=false; _stream .write ('<'); if(qName.length () >0){ writeStringToUtf8 (qName,_stream); }else { writeStringToUtf8 (localName,_stream); } if(attributes.getLength () >0 || _nsResult.size () >0){ handleAttributes (attributes); } _stream.write ('>'); _attrNSPos =0; _attrPos =0; _defURI = null; _nsResult.clear (); _attrResult.clear (); } catch (IOException ex) { throw new RuntimeException(ex); } } /** * Receive notification of the beginning of the document. * *

By default, do nothing. Application writers may override this * method in a subclass to take specific actions at the beginning * of a document (such as allocating the root node of a tree or * creating an output file). * * @exception org.xml.sax.SAXException Any SAX exception, possibly * wrapping another exception. * @see org.xml.sax.ContentHandler#startDocument */ public void startDocument () throws SAXException { //super.startDocument (); } public void startDTD (String name, String publicId, String systemId) throws SAXException { // super.startDTD (name, publicId, systemId); } public void startCDATA () throws SAXException { //super.startCDATA (); } /** * Tells the parser to resolve the systemId against the baseURI * and read the entity text from that resulting absolute URI. * Note that because the older * DefaultHandler#resolveEntity DefaultHandler.resolveEntity(), * method is overridden to call this one, this method may sometimes * be invoked with null name and baseURI, and * with the systemId already absolutized. */ public org.xml.sax.InputSource resolveEntity (String name, String publicId, String baseURI, String systemId) throws SAXException, java.io.IOException { throw new UnsupportedOperationException ("Not yet implemented"); } /** * Invokes * EntityResolver2#resolveEntity EntityResolver2.resolveEntity() * with null entity name and base URI. * You only need to override that method to use this class. */ public org.xml.sax.InputSource resolveEntity (String publicId, String systemId) throws SAXException, java.io.IOException { return null; } public void internalEntityDecl (String name, String value) throws SAXException { throw new UnsupportedOperationException ("Not yet implemented"); } /** * Tells the parser that if no external subset has been declared * in the document text, none should be used. */ public org.xml.sax.InputSource getExternalSubset (String name, String baseURI) throws SAXException, java.io.IOException { throw new UnsupportedOperationException ("Not yet implemented"); } public void externalEntityDecl (String name, String publicId, String systemId) throws SAXException { } public void endDTD () throws SAXException { } public void endCDATA () throws SAXException { } public void elementDecl (String name, String model) throws SAXException { } public void attributeDecl (String eName, String aName, String type, String mode, String value) throws SAXException { } /** * Receive notification of the end of the document. * *

By default, do nothing. Application writers may override this * method in a subclass to take specific actions at the end * of a document (such as finalising a tree or closing an output * file). * * @exception org.xml.sax.SAXException Any SAX exception, possibly * wrapping another exception. * @see org.xml.sax.ContentHandler#endDocument */ public void endDocument () throws SAXException { } /** * Receive notification of the end of an element. * *

By default, do nothing. Application writers may override this * method in a subclass to take specific actions at the end of * each element (such as finalising a tree node or writing * output to a file). * * @param uri The Namespace URI, or the empty string if the * element has no Namespace URI or if Namespace * processing is not being performed. * @param localName The local name (without prefix), or the * empty string if Namespace processing is not being * performed. * @param qName The qualified name (with prefix), or the * empty string if qualified names are not available. * @exception org.xml.sax.SAXException Any SAX exception, possibly * wrapping another exception. * @see org.xml.sax.ContentHandler#endElement */ public void endElement (String uri, String localName, String qName) throws SAXException { _depth --; if(_ncContextState[_depth]){ nsContext.popContext (); _ncContextState[_depth]=false; } try{ _stream.write (_END_TAG); if(qName.length () >0){ writeStringToUtf8 (qName,_stream); }else { writeStringToUtf8 (localName,_stream); } _stream.write ('>'); }catch(IOException io){ throw new RuntimeException(io); } } /** * Receive notification of a notation declaration. * *

By default, do nothing. Application writers may override this * method in a subclass if they wish to keep track of the notations * declared in a document. * * @param name The notation name. * @param publicId The notation public identifier, or null if not * available. * @param systemId The notation system identifier. * @exception org.xml.sax.SAXException Any SAX exception, possibly * wrapping another exception. * @see org.xml.sax.DTDHandler#notationDecl */ public void notationDecl (String name, String publicId, String systemId) throws SAXException { } /** * Receive notification of a processing instruction. * *

By default, do nothing. Application writers may override this * method in a subclass to take specific actions for each * processing instruction, such as setting status variables or * invoking other methods. * * @param target The processing instruction target. * @param data The processing instruction data, or null if * none is supplied. * @exception org.xml.sax.SAXException Any SAX exception, possibly * wrapping another exception. * @see org.xml.sax.ContentHandler#processingInstruction */ public void processingInstruction (String target, String data) throws SAXException { } //TODO:: Optimize @SuppressWarnings("unchecked") private void handleAttributes (Attributes attributes) { int length = attributes.getLength (); String localName = null; boolean contextPushed= false; try{ for(int i=0; i





© 2015 - 2024 Weber Informatics LLC | Privacy Policy