Java tutorial
/* * 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); } } }