⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 staxsource.java

📁 提供ESB 应用mule源代码 提供ESB 应用mule源代码
💻 JAVA
字号:
/* * $Id$ * -------------------------------------------------------------------------------------- * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com * * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */package org.mule.module.xml.stax;import javanet.staxutils.StAXReaderToContentHandler;import javanet.staxutils.StAXSource;import javanet.staxutils.helpers.XMLFilterImplEx;import javax.xml.stream.XMLStreamException;import javax.xml.stream.XMLStreamReader;import org.xml.sax.ContentHandler;import org.xml.sax.DTDHandler;import org.xml.sax.EntityResolver;import org.xml.sax.ErrorHandler;import org.xml.sax.InputSource;import org.xml.sax.SAXException;import org.xml.sax.SAXNotRecognizedException;import org.xml.sax.SAXNotSupportedException;import org.xml.sax.SAXParseException;import org.xml.sax.XMLReader;import org.xml.sax.ext.LexicalHandler;/** * A StaxSource which gives us access to the underlying XMLStreamReader if we are * StaxCapable down the line. */public class StaxSource extends StAXSource{    private XMLStreamReader reader;    // StAX to SAX converter that will read from StAX and produce SAX    // this object will be wrapped by the XMLReader exposed to the client    protected final StAXReaderToContentHandler handler;    // SAX allows ContentHandler to be changed during the parsing,    // but JAXB doesn't. So this repeater will sit between those    // two components.    protected XMLFilterImplEx repeater = new XMLFilterImplEx();    protected final XMLReader pseudoParser = new PseudoReader();    public StaxSource(XMLStreamReader reader)    {        super(reader);        this.reader = reader;        this.handler = new XMLStreamReaderToContentHandler(reader, repeater);        super.setXMLReader(pseudoParser);        // pass a dummy InputSource. We don't care        super.setInputSource(new InputSource());    }    public XMLStreamReader getXMLStreamReader()    {        return reader;    }    public final class PseudoReader implements XMLReader    {        // we will store this value but never use it by ourselves.        private EntityResolver entityResolver;        private DTDHandler dtdHandler;        private ErrorHandler errorHandler;        public boolean getFeature(String name) throws SAXNotRecognizedException        {            if ("http://xml.org/sax/features/namespaces".equals(name))            {                return true;            }            else if ("http://xml.org/sax/features/namespace-prefixes".equals(name))            {                return repeater.getNamespacePrefixes();            }            else if ("http://xml.org/sax/features/external-general-entities".equals(name))            {                return true;            }            else if ("http://xml.org/sax/features/external-parameter-entities".equals(name))            {                return true;            }            throw new SAXNotRecognizedException(name);        }        public void setFeature(String name, boolean value)            throws SAXNotRecognizedException, SAXNotSupportedException        {            if ("http://xml.org/sax/features/namespaces".equals(name))            {                // Presently we only support namespaces==true. [Issue 9]                if (!value)                {                    throw new SAXNotSupportedException(name);                }            }            else if ("http://xml.org/sax/features/namespace-prefixes".equals(name))            {                repeater.setNamespacePrefixes(value);            }            else if ("http://xml.org/sax/features/external-general-entities".equals(name))            {                // Pass over, XOM likes to get this feature            }            else if ("http://xml.org/sax/features/external-parameter-entities".equals(name))            {                // Pass over, XOM likes to get this feature            }            else            {                throw new SAXNotRecognizedException(name);            }        }        public Object getProperty(String name) throws SAXNotRecognizedException        {            if ("http://xml.org/sax/properties/lexical-handler".equals(name))            {                return repeater.getLexicalHandler();            }            throw new SAXNotRecognizedException(name);        }        public void setProperty(String name, Object value) throws SAXNotRecognizedException        {            if ("http://xml.org/sax/properties/lexical-handler".equals(name))            {                repeater.setLexicalHandler((LexicalHandler) value);            }            else            {                throw new SAXNotRecognizedException(name);            }        }        public void setEntityResolver(EntityResolver resolver)        {            this.entityResolver = resolver;        }        public EntityResolver getEntityResolver()        {            return entityResolver;        }        public void setDTDHandler(DTDHandler handler)        {            this.dtdHandler = handler;        }        public DTDHandler getDTDHandler()        {            return dtdHandler;        }        public void setContentHandler(ContentHandler handler)        {            repeater.setContentHandler(handler);        }        public ContentHandler getContentHandler()        {            return repeater.getContentHandler();        }        public void setErrorHandler(ErrorHandler handler)        {            this.errorHandler = handler;        }        public ErrorHandler getErrorHandler()        {            return errorHandler;        }        public void parse(InputSource input) throws SAXException        {            parse();        }        public void parse(String systemId) throws SAXException        {            parse();        }        public void parse() throws SAXException        {            // parses from a StAX reader and generates SAX events which            // go through the repeater and are forwarded to the appropriate            // component            try            {                handler.bridge();            }            catch (XMLStreamException e)            {                // wrap it in a SAXException                SAXParseException se = new SAXParseException(e.getMessage(), null, null, e.getLocation()                    .getLineNumber(), e.getLocation().getColumnNumber(), e);                // if the consumer sets an error handler, it is our responsibility                // to notify it.                if (errorHandler != null) errorHandler.fatalError(se);                // this is a fatal error. Even if the error handler                // returns, we will abort anyway.                throw se;            }        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -