jaxws/src/share/jaxws_classes/com/sun/xml/internal/org/jvnet/staxex/util/XMLStreamReaderToXMLStreamWriter.java
author mkos
Mon, 31 Mar 2014 10:43:20 +0200
changeset 23782 953bfc3fbe31
permissions -rw-r--r--
8036030: Update JAX-WS RI integration to latest version Summary: JAX-WS RI upgrade from 2.2.9-b130926.1035 to 2.2.10-b140228.1436; Reviewed-by: chegar
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
23782
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
     1
/*
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
     2
 * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
     4
 *
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    10
 *
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    15
 * accompanied this code).
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    16
 *
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    20
 *
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    23
 * questions.
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    24
 */
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    25
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    26
package com.sun.xml.internal.org.jvnet.staxex.util;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    27
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    28
import java.io.IOException;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    29
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    30
import javax.xml.bind.attachment.AttachmentMarshaller;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    31
import javax.xml.stream.XMLStreamConstants;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    32
import javax.xml.stream.XMLStreamException;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    33
import javax.xml.stream.XMLStreamReader;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    34
import javax.xml.stream.XMLStreamWriter;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    35
import javax.xml.XMLConstants;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    36
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    37
import com.sun.xml.internal.org.jvnet.staxex.Base64Data;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    38
import com.sun.xml.internal.org.jvnet.staxex.XMLStreamReaderEx;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    39
import com.sun.xml.internal.org.jvnet.staxex.XMLStreamWriterEx;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    40
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    41
/**
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    42
 * Reads a sub-tree from {@link XMLStreamReader} and writes to {@link XMLStreamWriter}
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    43
 * as-is.
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    44
 *
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    45
 * <p>
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    46
 * This class can be sub-classed to implement a simple transformation logic.
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    47
 *
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    48
 * @author Kohsuke Kawaguchi
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    49
 * @author Ryan Shoemaker
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    50
 */
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    51
public class XMLStreamReaderToXMLStreamWriter {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    52
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    53
    static public class Breakpoint {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    54
        protected XMLStreamReader reader;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    55
        protected XMLStreamWriter writer;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    56
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    57
        public Breakpoint(XMLStreamReader r, XMLStreamWriter w) { reader = r; writer = w; }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    58
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    59
        public XMLStreamReader reader() { return reader; }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    60
        public XMLStreamWriter writer() { return writer; }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    61
        public boolean proceedBeforeStartElement() { return true; }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    62
        public boolean proceedAfterStartElement()  { return true; }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    63
    }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    64
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    65
    private static final int BUF_SIZE = 4096;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    66
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    67
    protected XMLStreamReader in;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    68
    protected XMLStreamWriter out;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    69
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    70
    private char[] buf;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    71
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    72
    boolean optimizeBase64Data = false;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    73
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    74
    AttachmentMarshaller mtomAttachmentMarshaller;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    75
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    76
    /**
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    77
     * Reads one subtree and writes it out.
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    78
     *
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    79
     * <p>
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    80
     * The {@link XMLStreamWriter} never receives a start/end document event.
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    81
     * Those need to be written separately by the caller.
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    82
     */
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    83
    public void bridge(XMLStreamReader in, XMLStreamWriter out) throws XMLStreamException {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    84
        bridge(in, out, null);
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    85
    }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    86
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    87
    public void bridge(Breakpoint breakPoint) throws XMLStreamException {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    88
        bridge(breakPoint.reader(), breakPoint.writer(), breakPoint);
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    89
    }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    90
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    91
    private void bridge(XMLStreamReader in, XMLStreamWriter out, Breakpoint breakPoint) throws XMLStreamException {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    92
        assert in!=null && out!=null;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    93
        this.in = in;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    94
        this.out = out;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    95
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    96
        optimizeBase64Data = (in instanceof XMLStreamReaderEx);
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    97
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    98
        if (out instanceof XMLStreamWriterEx && out instanceof MtomStreamWriter) {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
    99
            mtomAttachmentMarshaller = ((MtomStreamWriter) out).getAttachmentMarshaller();
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   100
        }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   101
        // remembers the nest level of elements to know when we are done.
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   102
        int depth=0;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   103
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   104
        buf = new char[BUF_SIZE];
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   105
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   106
        // if the parser is at the start tag, proceed to the first element
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   107
        int event = getEventType();
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   108
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   109
        if( event!=XMLStreamConstants.START_ELEMENT)
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   110
            throw new IllegalStateException("The current event is not START_ELEMENT\n but " + event);
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   111
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   112
        do {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   113
            // These are all of the events listed in the javadoc for
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   114
            // XMLEvent.
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   115
            // The spec only really describes 11 of them.
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   116
            switch (event) {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   117
                case XMLStreamConstants.START_ELEMENT :
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   118
                    if (breakPoint != null && !breakPoint.proceedBeforeStartElement()) return;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   119
                    depth++;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   120
                    handleStartElement();
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   121
                    if (breakPoint != null && !breakPoint.proceedAfterStartElement()) return;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   122
                    break;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   123
                case XMLStreamConstants.END_ELEMENT :
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   124
                    handleEndElement();
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   125
                    depth--;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   126
                    if(depth==0)
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   127
                        return;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   128
                    break;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   129
                case XMLStreamConstants.CHARACTERS :
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   130
                    handleCharacters();
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   131
                    break;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   132
                case XMLStreamConstants.ENTITY_REFERENCE :
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   133
                    handleEntityReference();
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   134
                    break;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   135
                case XMLStreamConstants.PROCESSING_INSTRUCTION :
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   136
                    handlePI();
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   137
                    break;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   138
                case XMLStreamConstants.COMMENT :
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   139
                    handleComment();
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   140
                    break;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   141
                case XMLStreamConstants.DTD :
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   142
                    handleDTD();
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   143
                    break;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   144
                case XMLStreamConstants.CDATA :
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   145
                    handleCDATA();
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   146
                    break;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   147
                case XMLStreamConstants.SPACE :
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   148
                    handleSpace();
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   149
                    break;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   150
                case XMLStreamConstants.END_DOCUMENT:
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   151
                    throw new XMLStreamException("Malformed XML at depth="+depth+", Reached EOF. Event="+event);
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   152
                default :
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   153
                    throw new XMLStreamException("Cannot process event: " + event);
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   154
            }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   155
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   156
            event=getNextEvent();
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   157
        } while (depth!=0);
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   158
    }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   159
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   160
    protected void handlePI() throws XMLStreamException {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   161
        out.writeProcessingInstruction(
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   162
            in.getPITarget(),
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   163
            in.getPIData());
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   164
    }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   165
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   166
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   167
    protected void handleCharacters() throws XMLStreamException {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   168
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   169
        CharSequence c = null;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   170
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   171
        if (optimizeBase64Data) {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   172
            c = ((XMLStreamReaderEx)in).getPCDATA();
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   173
        }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   174
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   175
        if ((c != null) && (c instanceof Base64Data)) {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   176
            if (mtomAttachmentMarshaller != null) {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   177
                Base64Data b64d = (Base64Data) c;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   178
                ((XMLStreamWriterEx)out).writeBinary(b64d.getDataHandler());
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   179
            } else {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   180
                try {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   181
                    ((Base64Data)c).writeTo(out);
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   182
                } catch (IOException e) {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   183
                    throw new XMLStreamException(e);
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   184
                }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   185
            }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   186
        } else {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   187
            for (int start=0,read=buf.length; read == buf.length; start+=buf.length) {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   188
                read = in.getTextCharacters(start, buf, 0, buf.length);
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   189
                out.writeCharacters(buf, 0, read);
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   190
            }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   191
        }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   192
    }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   193
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   194
    protected void handleEndElement() throws XMLStreamException {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   195
        out.writeEndElement();
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   196
    }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   197
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   198
    protected void handleStartElement() throws XMLStreamException {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   199
        String nsUri = in.getNamespaceURI();
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   200
        if(nsUri==null)
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   201
            out.writeStartElement(in.getLocalName());
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   202
        else
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   203
            out.writeStartElement(
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   204
                fixNull(in.getPrefix()),
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   205
                in.getLocalName(),
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   206
                nsUri
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   207
            );
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   208
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   209
        // start namespace bindings
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   210
        int nsCount = in.getNamespaceCount();
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   211
        for (int i = 0; i < nsCount; i++) {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   212
            out.writeNamespace(
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   213
                in.getNamespacePrefix(i),
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   214
                fixNull(in.getNamespaceURI(i)));    // zephyr doesn't like null, I don't know what is correct, so just fix null to "" for now
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   215
        }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   216
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   217
        // write attributes
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   218
        int attCount = in.getAttributeCount();
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   219
        for (int i = 0; i < attCount; i++) {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   220
            handleAttribute(i);
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   221
        }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   222
    }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   223
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   224
    /**
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   225
     * Writes out the {@code i}-th attribute of the current element.
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   226
     *
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   227
     * <p>
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   228
     * Used from {@link #handleStartElement()}.
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   229
     */
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   230
    protected void handleAttribute(int i) throws XMLStreamException {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   231
        String nsUri = in.getAttributeNamespace(i);
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   232
        String prefix = in.getAttributePrefix(i);
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   233
         if (fixNull(nsUri).equals(XMLConstants.XMLNS_ATTRIBUTE_NS_URI)) {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   234
             //Its a namespace decl, ignore as it is already written.
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   235
             return;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   236
         }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   237
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   238
        if(nsUri==null || prefix == null || prefix.equals("")) {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   239
            out.writeAttribute(
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   240
                in.getAttributeLocalName(i),
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   241
                in.getAttributeValue(i)
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   242
            );
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   243
        } else {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   244
            out.writeAttribute(
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   245
                prefix,
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   246
                nsUri,
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   247
                in.getAttributeLocalName(i),
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   248
                in.getAttributeValue(i)
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   249
            );
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   250
        }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   251
    }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   252
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   253
    protected void handleDTD() throws XMLStreamException {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   254
        out.writeDTD(in.getText());
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   255
    }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   256
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   257
    protected void handleComment() throws XMLStreamException {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   258
        out.writeComment(in.getText());
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   259
    }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   260
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   261
    protected void handleEntityReference() throws XMLStreamException {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   262
        out.writeEntityRef(in.getText());
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   263
    }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   264
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   265
    protected void handleSpace() throws XMLStreamException {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   266
        handleCharacters();
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   267
    }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   268
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   269
    protected void handleCDATA() throws XMLStreamException {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   270
        out.writeCData(in.getText());
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   271
    }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   272
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   273
    private static String fixNull(String s) {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   274
        if(s==null)     return "";
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   275
        else            return s;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   276
    }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   277
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   278
    private int getEventType() throws XMLStreamException {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   279
        int event = in.getEventType();
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   280
     // if the parser is at the start tag, proceed to the first element
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   281
        //Note - need to do this every time because we could be using a composite reader
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   282
        if(event == XMLStreamConstants.START_DOCUMENT) {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   283
            // nextTag doesn't correctly handle DTDs
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   284
            while( !in.isStartElement() ) {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   285
                event = in.next();
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   286
                if (event == XMLStreamConstants.COMMENT)
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   287
                    handleComment();
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   288
            }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   289
        }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   290
        return event;
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   291
    }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   292
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   293
    private int getNextEvent() throws XMLStreamException {
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   294
        in.next();
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   295
        return getEventType();
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   296
    }
953bfc3fbe31 8036030: Update JAX-WS RI integration to latest version
mkos
parents:
diff changeset
   297
}