org.apache.axis.message.SAXOutputter.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.axis.message.SAXOutputter.java

Source

/*
 * Copyright 2001-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.axis.message;

import org.apache.axis.components.logger.LogFactory;
import org.apache.axis.encoding.SerializationContext;
import org.apache.axis.utils.XMLUtils;
import org.apache.commons.logging.Log;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.ext.LexicalHandler;
import org.xml.sax.helpers.DefaultHandler;

import javax.xml.namespace.QName;
import java.io.IOException;

public class SAXOutputter extends DefaultHandler implements LexicalHandler {
    protected static Log log = LogFactory.getLog(SAXOutputter.class.getName());

    SerializationContext context;
    boolean isCDATA = false;

    public SAXOutputter(SerializationContext context) {
        this.context = context;
    }

    public void startDocument() throws SAXException {
        context.setSendDecl(true);
    }

    public void endDocument() throws SAXException {
        if (log.isDebugEnabled()) {
            log.debug("SAXOutputter.endDocument");
        }
    }

    public void startPrefixMapping(String p1, String p2) throws SAXException {
        context.registerPrefixForURI(p1, p2);
    }

    public void endPrefixMapping(String p1) throws SAXException {
        // !!!
    }

    public void characters(char[] p1, int p2, int p3) throws SAXException {
        if (log.isDebugEnabled()) {
            log.debug("SAXOutputter.characters ['" + new String(p1, p2, p3) + "']");
        }
        try {
            if (!isCDATA) {
                context.writeChars(p1, p2, p3);
            } else {
                context.writeString(new String(p1, p2, p3));
            }
        } catch (IOException e) {
            throw new SAXException(e);
        }
    }

    public void ignorableWhitespace(char[] p1, int p2, int p3) throws SAXException {
        try {
            context.writeChars(p1, p2, p3);
        } catch (IOException e) {
            throw new SAXException(e);
        }
    }

    public void skippedEntity(String p1) throws SAXException {
    }

    public void startElement(String namespace, String localName, String qName, Attributes attributes)
            throws SAXException {
        if (log.isDebugEnabled()) {
            log.debug("SAXOutputter.startElement ['" + namespace + "' " + localName + "]");
        }

        try {
            context.startElement(new QName(namespace, localName), attributes);
        } catch (IOException e) {
            throw new SAXException(e);
        }
    }

    public void endElement(String namespace, String localName, String qName) throws SAXException {
        if (log.isDebugEnabled()) {
            log.debug("SAXOutputter.endElement ['" + namespace + "' " + localName + "]");
        }

        try {
            context.endElement();
        } catch (IOException e) {
            throw new SAXException(e);
        }
    }

    public void startDTD(java.lang.String name, java.lang.String publicId, java.lang.String systemId)
            throws SAXException {
    }

    public void endDTD() throws SAXException {
    }

    public void startEntity(java.lang.String name) throws SAXException {
    }

    public void endEntity(java.lang.String name) throws SAXException {
    }

    public void startCDATA() throws SAXException {
        try {
            isCDATA = true;
            context.writeString("<![CDATA[");
        } catch (IOException e) {
            throw new SAXException(e);
        }
    }

    public void endCDATA() throws SAXException {
        try {
            isCDATA = false;
            context.writeString("]]>");
        } catch (IOException e) {
            throw new SAXException(e);
        }
    }

    public void comment(char[] ch, int start, int length) throws SAXException {
        if (log.isDebugEnabled()) {
            log.debug("SAXOutputter.comment ['" + new String(ch, start, length) + "']");
        }
        try {
            context.writeString("<!--");
            context.writeChars(ch, start, length);
            context.writeString("-->");
        } catch (IOException e) {
            throw new SAXException(e);
        }
    }
}