/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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.axis2.util; import javax.xml.namespace.NamespaceContext; import javax.xml.namespace.QName; import javax.xml.stream.Location; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; public class StreamWrapper implements XMLStreamReader { private static final int STATE_SWITCHED = 0; private static final int STATE_INIT = 1; private static final int STATE_SWITCH_AT_NEXT = 2; private static final int STATE_COMPLETE_AT_NEXT = 3; private static final int STATE_COMPLETED = 4; private XMLStreamReader realReader = null; private int state = STATE_INIT; private int prevState = state; public StreamWrapper(XMLStreamReader realReader) { if (realReader == null) { throw new UnsupportedOperationException("Reader cannot be null"); } this.realReader = realReader; } public void close() throws XMLStreamException { if (state != STATE_INIT) { realReader.close(); } else { throw new XMLStreamException(); } } public int next() throws XMLStreamException { prevState = state; int returnEvent = -1; switch (state) { case STATE_INIT: if (realReader.getEventType() == START_DOCUMENT) { state = STATE_SWITCHED; returnEvent = realReader.next(); } else { state = STATE_SWITCHED; returnEvent = realReader.getEventType(); } break; case STATE_SWITCHED: returnEvent = realReader.next(); if (returnEvent == END_DOCUMENT) { state = STATE_COMPLETED; } else if (!realReader.hasNext()) { state = STATE_COMPLETE_AT_NEXT; } break; // case STATE_SWITCH_AT_NEXT: // state = STATE_SWITCHED; // returnEvent = realReader.getEventType(); // break; case STATE_COMPLETE_AT_NEXT: state = STATE_COMPLETED; returnEvent = END_DOCUMENT; break; case STATE_COMPLETED: //oops - no way we can go beyond this throw new XMLStreamException("end reached!"); default: throw new UnsupportedOperationException(); } return returnEvent; } public int nextTag() throws XMLStreamException { if (prevState != STATE_INIT) { return realReader.nextTag(); } else { throw new XMLStreamException(); } } public void require(int i, String s, String s1) throws XMLStreamException { if (state != STATE_INIT) { realReader.require(i, s, s1); } } public boolean standaloneSet() { if (state != STATE_INIT) { return realReader.standaloneSet(); } else { return false; } } public int getAttributeCount() { if (state != STATE_INIT) { return realReader.getAttributeCount(); } else { return 0; } } public String getAttributeLocalName(int i) { if (state != STATE_INIT) { return realReader.getAttributeLocalName(i); } else { return null; } } public QName getAttributeName(int i) { if (state != STATE_INIT) { return realReader.getAttributeName(i); } else { return null; } } public String getAttributeNamespace(int i) { if (state != STATE_INIT) { return realReader.getAttributeNamespace(i); } else { return null; } } public String getAttributePrefix(int i) { if (state != STATE_INIT) { return realReader.getAttributePrefix(i); } else { return null; } } public String getAttributeType(int i) { if (state != STATE_INIT) { return realReader.getAttributeType(i); } else { return null; } } public String getAttributeValue(int i) { if (state != STATE_INIT) { return realReader.getAttributeValue(i); } else { return null; } } public String getAttributeValue(String s, String s1) { if (state != STATE_INIT) { return realReader.getAttributeValue(s, s1); } else { return null; } } public String getCharacterEncodingScheme() { if (state != STATE_INIT) { return realReader.getCharacterEncodingScheme(); } else { return null; } } public String getElementText() throws XMLStreamException { if (state != STATE_INIT) { return realReader.getElementText(); } else { throw new XMLStreamException(); } } public String getEncoding() { if (state != STATE_INIT) { return realReader.getEncoding(); } else { return null; } } public int getEventType() { if (state == STATE_INIT) { return START_DOCUMENT; } else { return realReader.getEventType(); } } public String getLocalName() { if (state != STATE_INIT) { return realReader.getLocalName(); } else { return null; } } public Location getLocation() { if (state != STATE_INIT) { return realReader.getLocation(); } else { return null; } } public QName getName() { if (state != STATE_INIT) { return realReader.getName(); } else { return null; } } public NamespaceContext getNamespaceContext() { if (state != STATE_INIT) { return realReader.getNamespaceContext(); } else { return null; } } public int getNamespaceCount() { if (state != STATE_INIT) { return realReader.getNamespaceCount(); } else { return 0; } } public String getNamespacePrefix(int i) { if (state != STATE_INIT) { return realReader.getNamespacePrefix(i); } else { return null; } } public String getNamespaceURI() { if (state != STATE_INIT) { return realReader.getNamespaceURI(); } else { return null; } } public String getNamespaceURI(int i) { if (state != STATE_INIT) { return realReader.getNamespaceURI(i); } else { return null; } } public String getNamespaceURI(String s) { if (state != STATE_INIT) { return realReader.getNamespaceURI(s); } else { return null; } } public String getPIData() { if (state != STATE_INIT) { return realReader.getPIData(); } else { return null; } } public String getPITarget() { if (state != STATE_INIT) { return realReader.getPITarget(); } else { return null; } } public String getPrefix() { if (state != STATE_INIT) { return realReader.getPrefix(); } else { return null; } } public Object getProperty(String s) throws IllegalArgumentException { return realReader.getProperty(s); } public String getText() { if (state != STATE_INIT) { return realReader.getText(); } else { return null; } } public char[] getTextCharacters() { if (state != STATE_INIT) { return realReader.getTextCharacters(); } else { return new char[0]; } } public int getTextCharacters(int i, char[] chars, int i1, int i2) throws XMLStreamException { if (state != STATE_INIT) { return realReader.getTextCharacters(i, chars, i1, i2); } else { return 0; } } public int getTextLength() { if (state != STATE_INIT) { return realReader.getTextLength(); } else { return 0; } } public int getTextStart() { if (state != STATE_INIT) { return realReader.getTextStart(); } else { return 0; } } public String getVersion() { if (state != STATE_INIT) { return realReader.getVersion(); } else { return null; } } public boolean hasName() { if (state != STATE_INIT) { return realReader.hasName(); } else { return false; } } public boolean hasNext() throws XMLStreamException { if (state == STATE_COMPLETE_AT_NEXT) { return true; } else if (state == STATE_COMPLETED) { return false; } else if (state != STATE_INIT) { return realReader.hasNext(); } else { return true; } } public boolean hasText() { if (state != STATE_INIT) { return realReader.hasText(); } else { return false; } } public boolean isAttributeSpecified(int i) { if (state != STATE_INIT) { return realReader.isAttributeSpecified(i); } else { return false; } } public boolean isCharacters() { if (state != STATE_INIT) { return realReader.isCharacters(); } else { return false; } } public boolean isEndElement() { if (state != STATE_INIT) { return realReader.isEndElement(); } else { return false; } } public boolean isStandalone() { if (state != STATE_INIT) { return realReader.isStandalone(); } else { return false; } } public boolean isStartElement() { if (state != STATE_INIT) { return realReader.isStartElement(); } else { return false; } } public boolean isWhiteSpace() { if (state != STATE_INIT) { return realReader.isWhiteSpace(); } else { return false; } } }