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

📄 xmlutils.java

📁 提供ESB 应用mule源代码 提供ESB 应用mule源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        {            return factory.createXMLStreamReader(new StringReader((String) obj));        }        else if (obj instanceof byte[])        {            // TODO Handle encoding/charset?            return factory.createXMLStreamReader(new ByteArrayInputStream((byte[]) obj));        }        else        {            return null;        }    }        /**     * Convert our object to a Source type efficiently.     */     public static javax.xml.transform.Source toXmlSource(javax.xml.stream.XMLInputFactory xmlInputFactory, boolean useStaxSource, Object src) throws Exception    {        if (src instanceof javax.xml.transform.Source)        {            return (Source) src;        }        else if (src instanceof byte[])        {            ByteArrayInputStream stream = new ByteArrayInputStream((byte[]) src);            return toStreamSource(xmlInputFactory, useStaxSource, stream);        }        else if (src instanceof InputStream)        {            return toStreamSource(xmlInputFactory, useStaxSource, (InputStream) src);        }        else if (src instanceof String)        {            if (useStaxSource)            {                return new StaxSource(xmlInputFactory.createXMLStreamReader(new StringReader((String) src)));            }            else            {                return new StreamSource(new StringReader((String) src));            }        }        else if (src instanceof org.dom4j.Document)        {            return new DocumentSource((org.dom4j.Document) src);        }        else if (src instanceof org.xml.sax.InputSource)        {            return new SAXSource((InputSource) src);        }        // TODO MULE-3555        else if (src instanceof XMLStreamReader)        {            XMLStreamReader xsr = (XMLStreamReader) src;                        // StaxSource requires that we advance to a start element/document event            if (!xsr.isStartElement() &&                             xsr.getEventType() != XMLStreamConstants.START_DOCUMENT)             {                xsr.nextTag();            }                        return new StaxSource((XMLStreamReader) src);        }        else if (src instanceof org.w3c.dom.Document || src instanceof org.w3c.dom.Element)        {            return new DOMSource((org.w3c.dom.Node) src);        }        else if (src instanceof DelayedResult)         {            DelayedResult result = ((DelayedResult) src);            DOMResult domResult = new DOMResult();            result.write(domResult);            return new DOMSource(domResult.getNode());        }        else if (src instanceof OutputHandler)         {            OutputHandler handler = ((OutputHandler) src);            ByteArrayOutputStream output = new ByteArrayOutputStream();                        handler.write(RequestContext.getEvent(), output);                        return toStreamSource(xmlInputFactory, useStaxSource, new ByteArrayInputStream(output.toByteArray()));        }        else        {            return null;        }    }    public static javax.xml.transform.Source toStreamSource(javax.xml.stream.XMLInputFactory xmlInputFactory, boolean useStaxSource, InputStream stream) throws XMLStreamException    {        if (useStaxSource)        {            return new org.mule.module.xml.stax.StaxSource(xmlInputFactory.createXMLStreamReader(stream));        }        else         {            return new javax.xml.transform.stream.StreamSource(stream);        }    }        /**     * Copies the reader to the writer. The start and end document methods must     * be handled on the writer manually. TODO: if the namespace on the reader     * has been declared previously to where we are in the stream, this probably     * won't work.     *      * @param reader     * @param writer     * @throws XMLStreamException     */    public static void copy(XMLStreamReader reader, XMLStreamWriter writer) throws XMLStreamException {        copy(reader, writer, false);    }    public static void copy(XMLStreamReader reader, XMLStreamWriter writer,                            boolean fragment) throws XMLStreamException {        // number of elements read in        int read = 0;        int event = reader.getEventType();        while (reader.hasNext()) {            switch (event) {            case XMLStreamConstants.START_ELEMENT:                read++;                writeStartElement(reader, writer);                break;            case XMLStreamConstants.END_ELEMENT:                writer.writeEndElement();                read--;                if (read <= 0 && !fragment) {                    return;                }                break;            case XMLStreamConstants.CHARACTERS:                writer.writeCharacters(reader.getText());                break;            case XMLStreamConstants.START_DOCUMENT:            case XMLStreamConstants.END_DOCUMENT:            case XMLStreamConstants.ATTRIBUTE:            case XMLStreamConstants.NAMESPACE:                break;            default:                break;            }            event = reader.next();        }    }    private static void writeStartElement(XMLStreamReader reader, XMLStreamWriter writer)        throws XMLStreamException {        String local = reader.getLocalName();        String uri = reader.getNamespaceURI();        String prefix = reader.getPrefix();        if (prefix == null) {            prefix = "";        }        //        System.out.println("STAXUTILS:writeStartElement : node name : " + local +  " namespace URI" + uri);        boolean writeElementNS = false;        if (uri != null) {            String boundPrefix = writer.getPrefix(uri);            if (boundPrefix == null || !prefix.equals(boundPrefix)) {                writeElementNS = true;            }        }        // Write out the element name        if (uri != null) {            if (prefix.length() == 0 && StringUtils.isEmpty(uri)) {                writer.writeStartElement(local);                writer.setDefaultNamespace(uri);            } else {                writer.writeStartElement(prefix, local, uri);                writer.setPrefix(prefix, uri);            }        } else {            writer.writeStartElement(local);        }        // Write out the namespaces        for (int i = 0; i < reader.getNamespaceCount(); i++) {            String nsURI = reader.getNamespaceURI(i);            String nsPrefix = reader.getNamespacePrefix(i);            if (nsPrefix == null) {                nsPrefix = "";            }            if (nsPrefix.length() == 0) {                writer.writeDefaultNamespace(nsURI);            } else {                writer.writeNamespace(nsPrefix, nsURI);            }            if (nsURI.equals(uri) && nsPrefix.equals(prefix)) {                writeElementNS = false;            }        }        // Check if the namespace still needs to be written.        // We need this check because namespace writing works        // different on Woodstox and the RI.        if (writeElementNS) {            if (prefix == null || prefix.length() == 0) {                writer.writeDefaultNamespace(uri);            } else {                writer.writeNamespace(prefix, uri);            }        }                        // Write out attributes        for (int i = 0; i < reader.getAttributeCount(); i++) {            String ns = reader.getAttributeNamespace(i);            String nsPrefix = reader.getAttributePrefix(i);            if (ns == null || ns.length() == 0) {                writer.writeAttribute(reader.getAttributeLocalName(i), reader.getAttributeValue(i));            } else if (nsPrefix == null || nsPrefix.length() == 0) {                writer.writeAttribute(reader.getAttributeNamespace(i), reader.getAttributeLocalName(i),                                      reader.getAttributeValue(i));            } else {                writer.writeAttribute(reader.getAttributePrefix(i), reader.getAttributeNamespace(i), reader                    .getAttributeLocalName(i), reader.getAttributeValue(i));            }        }    }}

⌨️ 快捷键说明

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