| /* Copyright 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.xmlbeans.impl.store; |
| |
| import org.apache.xmlbeans.XmlDocumentProperties; |
| import org.apache.xmlbeans.XmlLineNumber; |
| import org.apache.xmlbeans.XmlOptions; |
| import org.w3c.dom.Node; |
| |
| 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; |
| import java.util.ConcurrentModificationException; |
| import java.util.HashMap; |
| import java.util.Iterator; |
| |
| public class Jsr173 { |
| public static Node nodeFromStream(XMLStreamReader xs) { |
| if (!(xs instanceof Jsr173GateWay)) { |
| return null; |
| } |
| |
| Jsr173GateWay gw = (Jsr173GateWay) xs; |
| |
| Locale l = gw._l; |
| |
| if (l.noSync()) { |
| l.enter(); |
| try { |
| return nodeFromStreamImpl(gw); |
| } finally { |
| l.exit(); |
| } |
| } else { |
| synchronized (l) { |
| l.enter(); |
| try { |
| return nodeFromStreamImpl(gw); |
| } finally { |
| l.exit(); |
| } |
| } |
| } |
| |
| } |
| |
| public static Node nodeFromStreamImpl(Jsr173GateWay gw) { |
| Cur c = gw._xs.getStreamCur(); |
| |
| return c.isNode() ? (Node) c.getDom() : (Node) null; |
| } |
| |
| public static XMLStreamReader newXmlStreamReader(Cur c, Object src, int off, int cch) { |
| XMLStreamReaderBase xs = new XMLStreamReaderForString(c, src, off, cch); |
| |
| if (c._locale.noSync()) { |
| return new UnsyncedJsr173(c._locale, xs); |
| } else { |
| return new SyncedJsr173(c._locale, xs); |
| } |
| } |
| |
| public static XMLStreamReader newXmlStreamReader(Cur c, XmlOptions options) { |
| options = XmlOptions.maskNull(options); |
| |
| boolean inner = options.isSaveInner() && !options.isSaveOuter(); |
| |
| XMLStreamReaderBase xs; |
| |
| int k = c.kind(); |
| |
| if (k == Cur.TEXT || k < 0) { |
| xs = new XMLStreamReaderForString(c, c.getChars(-1), c._offSrc, c._cchSrc); |
| } else if (inner) { |
| if (!c.hasAttrs() && !c.hasChildren()) { |
| xs = new XMLStreamReaderForString(c, c.getFirstChars(), c._offSrc, c._cchSrc); |
| } else { |
| assert c.isContainer(); |
| xs = new XMLStreamReaderForNode(c, true); |
| } |
| } else { |
| xs = new XMLStreamReaderForNode(c, false); |
| } |
| |
| if (c._locale.noSync()) { |
| return new UnsyncedJsr173(c._locale, xs); |
| } else { |
| return new SyncedJsr173(c._locale, xs); |
| } |
| } |
| |
| // |
| // |
| // |
| |
| private static final class XMLStreamReaderForNode extends XMLStreamReaderBase { |
| public XMLStreamReaderForNode(Cur c, boolean inner) { |
| super(c); |
| |
| assert c.isContainer() || c.isComment() || c.isProcinst() || c.isAttr(); |
| |
| // Iterate over everything *between* _cur and _end. Do |
| // not iterate the thing to the right of _end |
| |
| if (inner) { |
| assert c.isContainer(); |
| |
| _cur = c.weakCur(this); |
| |
| if (!_cur.toFirstAttr()) { |
| _cur.next(); |
| } |
| |
| _end = c.weakCur(this); |
| _end.toEnd(); |
| } else { |
| _cur = c.weakCur(this); |
| |
| if (c.isRoot()) { |
| _wholeDoc = true; |
| } else { |
| _end = c.weakCur(this); |
| |
| if (c.isAttr()) { |
| if (!_end.toNextAttr()) { |
| _end.toParent(); |
| _end.next(); |
| } |
| } else { |
| _end.skip(); |
| } |
| } |
| } |
| |
| if (!_wholeDoc) { |
| // Set the _done bit properly |
| |
| _cur.push(); |
| |
| try { |
| next(); |
| } catch (XMLStreamException e) { |
| throw new RuntimeException(e.getMessage(), e); |
| } |
| |
| _cur.pop(); |
| } |
| |
| assert _wholeDoc || !_cur.isSamePos(_end); |
| } |
| |
| protected Cur getStreamCur() { |
| return _cur; |
| } |
| |
| // |
| // |
| // |
| |
| public boolean hasNext() throws XMLStreamException { |
| checkChanged(); |
| |
| return !_done; |
| } |
| |
| public int getEventType() { |
| switch (_cur.kind()) { |
| case Cur.ROOT: |
| return START_DOCUMENT; |
| case -Cur.ROOT: |
| return END_DOCUMENT; |
| case Cur.ELEM: |
| return START_ELEMENT; |
| case -Cur.ELEM: |
| return END_ELEMENT; |
| case Cur.ATTR: |
| return _cur.isXmlns() ? NAMESPACE : ATTRIBUTE; |
| case Cur.TEXT: |
| return CHARACTERS; |
| case Cur.COMMENT: |
| return COMMENT; |
| case Cur.PROCINST: |
| return PROCESSING_INSTRUCTION; |
| default: |
| throw new IllegalStateException(); |
| } |
| } |
| |
| public int next() throws XMLStreamException { |
| checkChanged(); |
| |
| if (!hasNext()) { |
| throw new IllegalStateException("No next event in stream"); |
| } |
| |
| int kind = _cur.kind(); |
| |
| if (kind == -Cur.ROOT) { |
| assert _wholeDoc; |
| _done = true; |
| } else { |
| if (kind == Cur.ATTR) { |
| if (!_cur.toNextAttr()) { |
| _cur.toParent(); |
| _cur.next(); |
| } |
| } else if (kind == Cur.COMMENT || kind == Cur.PROCINST) { |
| _cur.skip(); |
| } else if (kind == Cur.ROOT) { |
| if (!_cur.toFirstAttr()) { |
| _cur.next(); |
| } |
| } else { |
| _cur.next(); |
| } |
| |
| assert _wholeDoc || _end != null; |
| |
| _done = _wholeDoc ? _cur.kind() == -Cur.ROOT : _cur.isSamePos(_end); |
| } |
| |
| _textFetched = false; |
| _srcFetched = false; |
| |
| return getEventType(); |
| } |
| |
| public String getText() { |
| checkChanged(); |
| |
| int k = _cur.kind(); |
| |
| if (k == Cur.COMMENT) { |
| return _cur.getValueAsString(); |
| } |
| |
| if (k == Cur.TEXT) { |
| return _cur.getCharsAsString(); |
| } |
| |
| throw new IllegalStateException(); |
| } |
| |
| public boolean isStartElement() { |
| return getEventType() == START_ELEMENT; |
| } |
| |
| public boolean isEndElement() { |
| return getEventType() == END_ELEMENT; |
| } |
| |
| public boolean isCharacters() { |
| return getEventType() == CHARACTERS; |
| } |
| |
| public String getElementText() throws XMLStreamException { |
| checkChanged(); |
| |
| if (!isStartElement()) { |
| throw new IllegalStateException(); |
| } |
| |
| StringBuilder sb = new StringBuilder(); |
| |
| for (; ; ) { |
| if (!hasNext()) { |
| throw new XMLStreamException(); |
| } |
| |
| int e = next(); |
| |
| if (e == END_ELEMENT) { |
| break; |
| } else if (e == START_ELEMENT) { |
| throw new XMLStreamException(); |
| } else if (e != COMMENT && e != PROCESSING_INSTRUCTION) { |
| sb.append(getText()); |
| } |
| } |
| |
| return sb.toString(); |
| } |
| |
| public int nextTag() throws XMLStreamException { |
| checkChanged(); |
| |
| for (; ; ) { |
| if (isStartElement() || isEndElement()) { |
| return getEventType(); |
| } |
| |
| if (!isWhiteSpace()) { |
| throw new XMLStreamException(); |
| } |
| |
| if (!hasNext()) { |
| throw new XMLStreamException(); |
| } |
| |
| next(); |
| } |
| } |
| |
| private static boolean matchAttr(Cur c, String uri, String local) { |
| assert c.isNormalAttr(); |
| |
| QName name = c.getName(); |
| |
| return |
| name.getLocalPart().equals(local) && |
| (uri == null || name.getNamespaceURI().equals(uri)); |
| } |
| |
| private static Cur toAttr(Cur c, String uri, String local) { |
| if (uri == null || local == null || local.length() == 0) { |
| throw new IllegalArgumentException(); |
| } |
| |
| Cur ca = c.tempCur(); |
| boolean match = false; |
| |
| if (c.isElem()) { |
| if (ca.toFirstAttr()) { |
| do { |
| if (ca.isNormalAttr() && matchAttr(ca, uri, local)) { |
| match = true; |
| break; |
| } |
| } |
| while (ca.toNextSibling()); |
| } |
| } else if (c.isNormalAttr()) { |
| match = matchAttr(c, uri, local); |
| } else { |
| throw new IllegalStateException(); |
| } |
| |
| if (!match) { |
| ca.release(); |
| ca = null; |
| } |
| |
| return ca; |
| } |
| |
| public String getAttributeValue(String uri, String local) { |
| Cur ca = toAttr(_cur, uri, local); |
| |
| String value = null; |
| |
| if (ca != null) { |
| value = ca.getValueAsString(); |
| ca.release(); |
| } |
| |
| return value; |
| } |
| |
| private static Cur toAttr(Cur c, int i) { |
| if (i < 0) { |
| throw new IndexOutOfBoundsException("Attribute index is negative"); |
| } |
| |
| Cur ca = c.tempCur(); |
| boolean match = false; |
| |
| if (c.isElem()) { |
| if (ca.toFirstAttr()) { |
| do { |
| if (ca.isNormalAttr() && i-- == 0) { |
| match = true; |
| break; |
| } |
| } |
| while (ca.toNextSibling()); |
| } |
| } else if (c.isNormalAttr()) { |
| match = i == 0; |
| } else { |
| throw new IllegalStateException(); |
| } |
| |
| if (!match) { |
| ca.release(); |
| throw new IndexOutOfBoundsException("Attribute index is too large"); |
| } |
| |
| return ca; |
| } |
| |
| public int getAttributeCount() { |
| int n = 0; |
| |
| if (_cur.isElem()) { |
| Cur ca = _cur.tempCur(); |
| |
| if (ca.toFirstAttr()) { |
| do { |
| if (ca.isNormalAttr()) { |
| n++; |
| } |
| } |
| while (ca.toNextSibling()); |
| } |
| |
| ca.release(); |
| } else if (_cur.isNormalAttr()) { |
| n++; |
| } else { |
| throw new IllegalStateException(); |
| } |
| |
| return n; |
| } |
| |
| public QName getAttributeName(int index) { |
| Cur ca = toAttr(_cur, index); |
| QName name = ca.getName(); |
| ca.release(); |
| return name; |
| } |
| |
| public String getAttributeNamespace(int index) { |
| return getAttributeName(index).getNamespaceURI(); |
| } |
| |
| public String getAttributeLocalName(int index) { |
| return getAttributeName(index).getLocalPart(); |
| } |
| |
| public String getAttributePrefix(int index) { |
| return getAttributeName(index).getPrefix(); |
| } |
| |
| public String getAttributeType(int index) { |
| toAttr(_cur, index).release(); |
| return "CDATA"; |
| } |
| |
| public String getAttributeValue(int index) { |
| Cur ca = toAttr(_cur, index); |
| |
| String value = null; |
| |
| if (ca != null) { |
| value = ca.getValueAsString(); |
| ca.release(); |
| } |
| |
| return value; |
| } |
| |
| public boolean isAttributeSpecified(int index) { |
| // Go to attr to force index check |
| Cur ca = toAttr(_cur, index); |
| ca.release(); |
| |
| return false; |
| } |
| |
| public int getNamespaceCount() { |
| int n = 0; |
| |
| if (_cur.isElem() || _cur.kind() == -Cur.ELEM) { |
| Cur ca = _cur.tempCur(); |
| |
| if (_cur.kind() == -Cur.ELEM) { |
| ca.toParent(); |
| } |
| |
| if (ca.toFirstAttr()) { |
| do { |
| if (ca.isXmlns()) { |
| n++; |
| } |
| } |
| while (ca.toNextSibling()); |
| } |
| |
| ca.release(); |
| } else if (_cur.isXmlns()) { |
| n++; |
| } else { |
| throw new IllegalStateException(); |
| } |
| |
| return n; |
| } |
| |
| private static Cur toXmlns(Cur c, int i) { |
| if (i < 0) { |
| throw new IndexOutOfBoundsException("Namespace index is negative"); |
| } |
| |
| Cur ca = c.tempCur(); |
| boolean match = false; |
| |
| if (c.isElem() || c.kind() == -Cur.ELEM) { |
| if (c.kind() == -Cur.ELEM) { |
| ca.toParent(); |
| } |
| |
| if (ca.toFirstAttr()) { |
| do { |
| if (ca.isXmlns() && i-- == 0) { |
| match = true; |
| break; |
| } |
| } |
| while (ca.toNextSibling()); |
| } |
| } else if (c.isXmlns()) { |
| match = i == 0; |
| } else { |
| throw new IllegalStateException(); |
| } |
| |
| if (!match) { |
| ca.release(); |
| throw new IndexOutOfBoundsException("Namespace index is too large"); |
| } |
| |
| return ca; |
| } |
| |
| public String getNamespacePrefix(int index) { |
| Cur ca = toXmlns(_cur, index); |
| String prefix = ca.getXmlnsPrefix(); |
| ca.release(); |
| return prefix; |
| } |
| |
| public String getNamespaceURI(int index) { |
| Cur ca = toXmlns(_cur, index); |
| String uri = ca.getXmlnsUri(); |
| ca.release(); |
| return uri; |
| } |
| |
| private void fetchChars() { |
| if (!_textFetched) { |
| int k = _cur.kind(); |
| |
| Cur cText = null; |
| |
| if (k == Cur.COMMENT) { |
| cText = _cur.tempCur(); |
| cText.next(); |
| } else if (k == Cur.TEXT) { |
| cText = _cur; |
| } else { |
| throw new IllegalStateException(); |
| } |
| |
| Object src = cText.getChars(-1); |
| |
| ensureCharBufLen(cText._cchSrc); |
| |
| CharUtil.getChars( |
| _chars, _offChars = 0, src, cText._offSrc, _cchChars = cText._cchSrc); |
| |
| if (cText != _cur) { |
| cText.release(); |
| } |
| |
| _textFetched = true; |
| } |
| } |
| |
| private void ensureCharBufLen(int cch) { |
| if (_chars == null || _chars.length < cch) { |
| int l = 256; |
| |
| while (l < cch) { |
| l *= 2; |
| } |
| |
| _chars = new char[l]; |
| } |
| } |
| |
| public char[] getTextCharacters() { |
| checkChanged(); |
| |
| fetchChars(); |
| |
| return _chars; |
| } |
| |
| public int getTextStart() { |
| checkChanged(); |
| |
| fetchChars(); |
| |
| return _offChars; |
| } |
| |
| public int getTextLength() { |
| checkChanged(); |
| |
| fetchChars(); |
| |
| return _cchChars; |
| } |
| |
| public int getTextCharacters( |
| int sourceStart, char[] target, int targetStart, int length) |
| throws XMLStreamException { |
| if (length < 0) { |
| throw new IndexOutOfBoundsException(); |
| } |
| |
| if (targetStart < 0 || targetStart >= target.length) { |
| throw new IndexOutOfBoundsException(); |
| } |
| |
| if (targetStart + length > target.length) { |
| throw new IndexOutOfBoundsException(); |
| } |
| |
| if (!_srcFetched) { |
| int k = _cur.kind(); |
| |
| Cur cText = null; |
| |
| if (k == Cur.COMMENT) { |
| cText = _cur.tempCur(); |
| cText.next(); |
| } else if (k == Cur.TEXT) { |
| cText = _cur; |
| } else { |
| throw new IllegalStateException(); |
| } |
| |
| _src = cText.getChars(-1); |
| _offSrc = cText._offSrc; |
| _cchSrc = cText._cchSrc; |
| |
| if (cText != _cur) { |
| cText.release(); |
| } |
| |
| _srcFetched = true; |
| } |
| |
| if (sourceStart > _cchSrc) { |
| throw new IndexOutOfBoundsException(); |
| } |
| |
| if (sourceStart + length > _cchSrc) { |
| length = _cchSrc - sourceStart; |
| } |
| |
| CharUtil.getChars(target, targetStart, _src, _offSrc, length); |
| |
| return length; |
| } |
| |
| public boolean hasText() { |
| int k = _cur.kind(); |
| |
| return k == Cur.COMMENT || k == Cur.TEXT; |
| } |
| |
| public boolean hasName() { |
| int k = _cur.kind(); |
| return k == Cur.ELEM || k == -Cur.ELEM; |
| } |
| |
| public QName getName() { |
| if (!hasName()) { |
| throw new IllegalStateException(); |
| } |
| |
| return _cur.getName(); |
| } |
| |
| public String getNamespaceURI() { |
| return getName().getNamespaceURI(); |
| } |
| |
| public String getLocalName() { |
| return getName().getLocalPart(); |
| } |
| |
| public String getPrefix() { |
| return getName().getPrefix(); |
| } |
| |
| public String getPITarget() { |
| return _cur.kind() == Cur.PROCINST ? _cur.getName().getLocalPart() : null; |
| } |
| |
| public String getPIData() { |
| return _cur.kind() == Cur.PROCINST ? _cur.getValueAsString() : null; |
| } |
| |
| // |
| // |
| // |
| |
| private boolean _wholeDoc; |
| private boolean _done; |
| |
| private Cur _cur; |
| private Cur _end; |
| |
| private boolean _srcFetched; |
| private Object _src; |
| private int _offSrc; |
| private int _cchSrc; |
| |
| private boolean _textFetched; |
| private char[] _chars; |
| private int _offChars; |
| private int _cchChars; |
| } |
| |
| // |
| // |
| // |
| |
| private static abstract class XMLStreamReaderBase |
| implements XMLStreamReader, NamespaceContext, Location { |
| XMLStreamReaderBase(Cur c) { |
| _locale = c._locale; |
| _version = _locale.version(); |
| } |
| |
| protected final void checkChanged() { |
| if (_version != _locale.version()) { |
| throw new ConcurrentModificationException("Document changed while streaming"); |
| } |
| } |
| |
| // |
| // XMLStreamReader methods |
| // |
| |
| public void close() throws XMLStreamException { |
| checkChanged(); |
| } |
| |
| public boolean isWhiteSpace() { |
| checkChanged(); |
| |
| // TODO - avoid creating a string here |
| String s = getText(); |
| |
| return _locale.getCharUtil().isWhiteSpace(s, 0, s.length()); |
| } |
| |
| public Location getLocation() { |
| checkChanged(); |
| |
| Cur c = getStreamCur(); |
| |
| XmlLineNumber ln = (XmlLineNumber) c.getBookmark(XmlLineNumber.class); |
| |
| // BUGBUG - put source name here |
| _uri = null; |
| |
| if (ln != null) { |
| _line = ln.getLine(); |
| _column = ln.getColumn(); |
| _offset = ln.getOffset(); |
| } else { |
| _line = -1; |
| _column = -1; |
| _offset = -1; |
| } |
| |
| return this; |
| } |
| |
| |
| public Object getProperty(String name) { |
| checkChanged(); |
| |
| if (name == null) { |
| throw new IllegalArgumentException("Property name is null"); |
| } |
| |
| // BUGBUG - I should implement some perperties here |
| |
| return null; |
| } |
| |
| public String getCharacterEncodingScheme() { |
| checkChanged(); |
| |
| XmlDocumentProperties props = _locale.getDocProps(getStreamCur(), false); |
| |
| return props == null ? null : props.getEncoding(); |
| } |
| |
| public String getEncoding() { |
| // BUGBUG - this should probably return the actual decoding used on the document |
| return null; |
| } |
| |
| public String getVersion() { |
| checkChanged(); |
| |
| XmlDocumentProperties props = _locale.getDocProps(getStreamCur(), false); |
| |
| return props == null ? null : props.getVersion(); |
| } |
| |
| public boolean isStandalone() { |
| checkChanged(); |
| |
| XmlDocumentProperties props = _locale.getDocProps(getStreamCur(), false); |
| |
| return props == null ? false : props.getStandalone(); |
| } |
| |
| public boolean standaloneSet() { |
| checkChanged(); |
| |
| return false; |
| } |
| |
| public void require(int type, String namespaceURI, String localName) |
| throws XMLStreamException { |
| checkChanged(); |
| |
| if (type != getEventType()) { |
| throw new XMLStreamException(); |
| } |
| |
| if (namespaceURI != null && !getNamespaceURI().equals(namespaceURI)) { |
| throw new XMLStreamException(); |
| } |
| |
| if (localName != null && !getLocalName().equals(localName)) { |
| throw new XMLStreamException(); |
| } |
| } |
| |
| // |
| // Location methods do not need a gatway |
| // |
| |
| public int getCharacterOffset() { |
| return _offset; |
| } |
| |
| public int getColumnNumber() { |
| return _column; |
| } |
| |
| public int getLineNumber() { |
| return _line; |
| } |
| |
| public String getLocationURI() { |
| return _uri; |
| } |
| |
| public String getPublicId() { |
| return null; |
| } |
| |
| public String getSystemId() { |
| return null; |
| } |
| |
| public NamespaceContext getNamespaceContext() { |
| throw new RuntimeException("This version of getNamespaceContext should not be called"); |
| } |
| |
| public String getNamespaceURI(String prefix) { |
| checkChanged(); |
| |
| Cur c = getStreamCur(); |
| |
| c.push(); |
| |
| if (!c.isContainer()) { |
| c.toParent(); |
| } |
| |
| String ns = c.namespaceForPrefix(prefix, true); |
| |
| c.pop(); |
| |
| return ns; |
| } |
| |
| public String getPrefix(String namespaceURI) { |
| checkChanged(); |
| |
| Cur c = getStreamCur(); |
| |
| c.push(); |
| |
| if (!c.isContainer()) { |
| c.toParent(); |
| } |
| |
| String prefix = c.prefixForNamespace(namespaceURI, null, false); |
| |
| c.pop(); |
| |
| return prefix; |
| } |
| |
| public Iterator getPrefixes(String namespaceURI) { |
| checkChanged(); |
| |
| // BUGBUG - get only one for now ... |
| |
| HashMap map = new HashMap(); |
| |
| map.put(namespaceURI, getPrefix(namespaceURI)); |
| |
| return map.values().iterator(); |
| } |
| |
| // |
| // |
| // |
| |
| protected abstract Cur getStreamCur(); |
| |
| // |
| // |
| // |
| |
| private Locale _locale; |
| private long _version; |
| |
| String _uri; |
| |
| int _line = -1; |
| int _column = -1; |
| int _offset = -1; |
| } |
| |
| // |
| // |
| // |
| |
| private static final class XMLStreamReaderForString extends XMLStreamReaderBase { |
| XMLStreamReaderForString(Cur c, Object src, int off, int cch) { |
| super(c); |
| |
| _src = src; |
| _off = off; |
| _cch = cch; |
| |
| _cur = c; |
| } |
| |
| protected Cur getStreamCur() { |
| return _cur; |
| } |
| |
| // |
| // Legal stream methods |
| // |
| |
| public String getText() { |
| checkChanged(); |
| |
| return CharUtil.getString(_src, _off, _cch); |
| } |
| |
| public char[] getTextCharacters() { |
| checkChanged(); |
| |
| char[] chars = new char[_cch]; |
| |
| CharUtil.getChars(chars, 0, _src, _off, _cch); |
| |
| return chars; |
| } |
| |
| public int getTextStart() { |
| checkChanged(); |
| |
| return _off; |
| } |
| |
| public int getTextLength() { |
| checkChanged(); |
| |
| return _cch; |
| } |
| |
| public int getTextCharacters(int sourceStart, char[] target, int targetStart, int length) { |
| checkChanged(); |
| |
| if (length < 0) { |
| throw new IndexOutOfBoundsException(); |
| } |
| |
| if (sourceStart > _cch) { |
| throw new IndexOutOfBoundsException(); |
| } |
| |
| if (sourceStart + length > _cch) { |
| length = _cch - sourceStart; |
| } |
| |
| CharUtil.getChars(target, targetStart, _src, _off + sourceStart, length); |
| |
| return length; |
| } |
| |
| public int getEventType() { |
| checkChanged(); |
| return CHARACTERS; |
| } |
| |
| public boolean hasName() { |
| checkChanged(); |
| return false; |
| } |
| |
| public boolean hasNext() { |
| checkChanged(); |
| return false; |
| } |
| |
| public boolean hasText() { |
| checkChanged(); |
| return true; |
| } |
| |
| public boolean isCharacters() { |
| checkChanged(); |
| return true; |
| } |
| |
| public boolean isEndElement() { |
| checkChanged(); |
| return false; |
| } |
| |
| public boolean isStartElement() { |
| checkChanged(); |
| return false; |
| } |
| |
| // |
| // Illegal stream methods |
| // |
| |
| public int getAttributeCount() { |
| throw new IllegalStateException(); |
| } |
| |
| public String getAttributeLocalName(int index) { |
| throw new IllegalStateException(); |
| } |
| |
| public QName getAttributeName(int index) { |
| throw new IllegalStateException(); |
| } |
| |
| public String getAttributeNamespace(int index) { |
| throw new IllegalStateException(); |
| } |
| |
| public String getAttributePrefix(int index) { |
| throw new IllegalStateException(); |
| } |
| |
| public String getAttributeType(int index) { |
| throw new IllegalStateException(); |
| } |
| |
| public String getAttributeValue(int index) { |
| throw new IllegalStateException(); |
| } |
| |
| public String getAttributeValue(String namespaceURI, String localName) { |
| throw new IllegalStateException(); |
| } |
| |
| public String getElementText() { |
| throw new IllegalStateException(); |
| } |
| |
| public String getLocalName() { |
| throw new IllegalStateException(); |
| } |
| |
| public QName getName() { |
| throw new IllegalStateException(); |
| } |
| |
| public int getNamespaceCount() { |
| throw new IllegalStateException(); |
| } |
| |
| public String getNamespacePrefix(int index) { |
| throw new IllegalStateException(); |
| } |
| |
| public String getNamespaceURI(int index) { |
| throw new IllegalStateException(); |
| } |
| |
| public String getNamespaceURI() { |
| throw new IllegalStateException(); |
| } |
| |
| public String getPIData() { |
| throw new IllegalStateException(); |
| } |
| |
| public String getPITarget() { |
| throw new IllegalStateException(); |
| } |
| |
| public String getPrefix() { |
| throw new IllegalStateException(); |
| } |
| |
| public boolean isAttributeSpecified(int index) { |
| throw new IllegalStateException(); |
| } |
| |
| public int next() { |
| throw new IllegalStateException(); |
| } |
| |
| public int nextTag() { |
| throw new IllegalStateException(); |
| } |
| |
| public String getPublicId() { |
| throw new IllegalStateException(); |
| } |
| |
| public String getSystemId() { |
| throw new IllegalStateException(); |
| } |
| |
| private Cur _cur; |
| private Object _src; |
| private int _off; |
| private int _cch; |
| } |
| |
| // |
| // |
| // |
| |
| private static abstract class Jsr173GateWay { |
| public Jsr173GateWay(Locale l, XMLStreamReaderBase xs) { |
| _l = l; |
| _xs = xs; |
| } |
| |
| Locale _l; |
| XMLStreamReaderBase _xs; |
| } |
| |
| private static final class SyncedJsr173 extends Jsr173GateWay implements XMLStreamReader, Location, NamespaceContext { |
| public SyncedJsr173(Locale l, XMLStreamReaderBase xs) { |
| super(l, xs); |
| } |
| |
| public Object getProperty(java.lang.String name) { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getProperty(name); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public int next() throws XMLStreamException { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.next(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public void require(int type, String namespaceURI, String localName) throws XMLStreamException { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| _xs.require(type, namespaceURI, localName); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public String getElementText() throws XMLStreamException { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getElementText(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public int nextTag() throws XMLStreamException { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.nextTag(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public boolean hasNext() throws XMLStreamException { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.hasNext(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public void close() throws XMLStreamException { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| _xs.close(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public String getNamespaceURI(String prefix) { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getNamespaceURI(prefix); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public boolean isStartElement() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.isStartElement(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public boolean isEndElement() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.isEndElement(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public boolean isCharacters() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.isCharacters(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public boolean isWhiteSpace() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.isWhiteSpace(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public String getAttributeValue(String namespaceURI, String localName) { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getAttributeValue(namespaceURI, localName); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public int getAttributeCount() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getAttributeCount(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public QName getAttributeName(int index) { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getAttributeName(index); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public String getAttributeNamespace(int index) { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getAttributeNamespace(index); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public String getAttributeLocalName(int index) { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getAttributeLocalName(index); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public String getAttributePrefix(int index) { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getAttributePrefix(index); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public String getAttributeType(int index) { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getAttributeType(index); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public String getAttributeValue(int index) { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getAttributeValue(index); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public boolean isAttributeSpecified(int index) { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.isAttributeSpecified(index); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public int getNamespaceCount() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getNamespaceCount(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public String getNamespacePrefix(int index) { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getNamespacePrefix(index); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public String getNamespaceURI(int index) { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getNamespaceURI(index); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public NamespaceContext getNamespaceContext() { |
| return this; |
| } |
| |
| public int getEventType() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getEventType(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public String getText() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getText(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public char[] getTextCharacters() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getTextCharacters(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public int getTextCharacters(int sourceStart, char[] target, int targetStart, int length) throws XMLStreamException { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getTextCharacters(sourceStart, target, targetStart, length); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public int getTextStart() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getTextStart(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public int getTextLength() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getTextLength(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public String getEncoding() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getEncoding(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public boolean hasText() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.hasText(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public Location getLocation() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getLocation(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public QName getName() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getName(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public String getLocalName() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getLocalName(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public boolean hasName() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.hasName(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public String getNamespaceURI() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getNamespaceURI(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public String getPrefix() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getPrefix(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public String getVersion() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getVersion(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public boolean isStandalone() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.isStandalone(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public boolean standaloneSet() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.standaloneSet(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public String getCharacterEncodingScheme() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getCharacterEncodingScheme(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public String getPITarget() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getPITarget(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public String getPIData() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getPIData(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public String getPrefix(String namespaceURI) { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getPrefix(namespaceURI); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public Iterator getPrefixes(String namespaceURI) { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getPrefixes(namespaceURI); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public int getCharacterOffset() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getCharacterOffset(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public int getColumnNumber() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getColumnNumber(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public int getLineNumber() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getLineNumber(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public String getLocationURI() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getLocationURI(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public String getPublicId() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getPublicId(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public String getSystemId() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getSystemId(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| } |
| |
| private static final class UnsyncedJsr173 extends Jsr173GateWay implements XMLStreamReader, Location, NamespaceContext { |
| public UnsyncedJsr173(Locale l, XMLStreamReaderBase xs) { |
| super(l, xs); |
| } |
| |
| public Object getProperty(java.lang.String name) { |
| try { |
| _l.enter(); |
| return _xs.getProperty(name); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public int next() throws XMLStreamException { |
| try { |
| _l.enter(); |
| return _xs.next(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public void require(int type, String namespaceURI, String localName) throws XMLStreamException { |
| try { |
| _l.enter(); |
| _xs.require(type, namespaceURI, localName); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public String getElementText() throws XMLStreamException { |
| try { |
| _l.enter(); |
| return _xs.getElementText(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public int nextTag() throws XMLStreamException { |
| try { |
| _l.enter(); |
| return _xs.nextTag(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public boolean hasNext() throws XMLStreamException { |
| try { |
| _l.enter(); |
| return _xs.hasNext(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public void close() throws XMLStreamException { |
| try { |
| _l.enter(); |
| _xs.close(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public String getNamespaceURI(String prefix) { |
| try { |
| _l.enter(); |
| return _xs.getNamespaceURI(prefix); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public boolean isStartElement() { |
| try { |
| _l.enter(); |
| return _xs.isStartElement(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public boolean isEndElement() { |
| try { |
| _l.enter(); |
| return _xs.isEndElement(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public boolean isCharacters() { |
| try { |
| _l.enter(); |
| return _xs.isCharacters(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public boolean isWhiteSpace() { |
| try { |
| _l.enter(); |
| return _xs.isWhiteSpace(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public String getAttributeValue(String namespaceURI, String localName) { |
| try { |
| _l.enter(); |
| return _xs.getAttributeValue(namespaceURI, localName); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public int getAttributeCount() { |
| try { |
| _l.enter(); |
| return _xs.getAttributeCount(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public QName getAttributeName(int index) { |
| try { |
| _l.enter(); |
| return _xs.getAttributeName(index); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public String getAttributeNamespace(int index) { |
| try { |
| _l.enter(); |
| return _xs.getAttributeNamespace(index); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public String getAttributeLocalName(int index) { |
| try { |
| _l.enter(); |
| return _xs.getAttributeLocalName(index); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public String getAttributePrefix(int index) { |
| try { |
| _l.enter(); |
| return _xs.getAttributePrefix(index); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public String getAttributeType(int index) { |
| try { |
| _l.enter(); |
| return _xs.getAttributeType(index); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public String getAttributeValue(int index) { |
| try { |
| _l.enter(); |
| return _xs.getAttributeValue(index); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public boolean isAttributeSpecified(int index) { |
| try { |
| _l.enter(); |
| return _xs.isAttributeSpecified(index); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public int getNamespaceCount() { |
| try { |
| _l.enter(); |
| return _xs.getNamespaceCount(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public String getNamespacePrefix(int index) { |
| try { |
| _l.enter(); |
| return _xs.getNamespacePrefix(index); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public String getNamespaceURI(int index) { |
| try { |
| _l.enter(); |
| return _xs.getNamespaceURI(index); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public NamespaceContext getNamespaceContext() { |
| return this; |
| } |
| |
| public int getEventType() { |
| try { |
| _l.enter(); |
| return _xs.getEventType(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public String getText() { |
| try { |
| _l.enter(); |
| return _xs.getText(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public char[] getTextCharacters() { |
| try { |
| _l.enter(); |
| return _xs.getTextCharacters(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public int getTextCharacters(int sourceStart, char[] target, int targetStart, int length) throws XMLStreamException { |
| try { |
| _l.enter(); |
| return _xs.getTextCharacters(sourceStart, target, targetStart, length); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public int getTextStart() { |
| try { |
| _l.enter(); |
| return _xs.getTextStart(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public int getTextLength() { |
| try { |
| _l.enter(); |
| return _xs.getTextLength(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public String getEncoding() { |
| try { |
| _l.enter(); |
| return _xs.getEncoding(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public boolean hasText() { |
| try { |
| _l.enter(); |
| return _xs.hasText(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public Location getLocation() { |
| try { |
| _l.enter(); |
| return _xs.getLocation(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public QName getName() { |
| try { |
| _l.enter(); |
| return _xs.getName(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public String getLocalName() { |
| try { |
| _l.enter(); |
| return _xs.getLocalName(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public boolean hasName() { |
| try { |
| _l.enter(); |
| return _xs.hasName(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public String getNamespaceURI() { |
| try { |
| _l.enter(); |
| return _xs.getNamespaceURI(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public String getPrefix() { |
| try { |
| _l.enter(); |
| return _xs.getPrefix(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public String getVersion() { |
| try { |
| _l.enter(); |
| return _xs.getVersion(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public boolean isStandalone() { |
| try { |
| _l.enter(); |
| return _xs.isStandalone(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public boolean standaloneSet() { |
| try { |
| _l.enter(); |
| return _xs.standaloneSet(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public String getCharacterEncodingScheme() { |
| try { |
| _l.enter(); |
| return _xs.getCharacterEncodingScheme(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public String getPITarget() { |
| try { |
| _l.enter(); |
| return _xs.getPITarget(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public String getPIData() { |
| try { |
| _l.enter(); |
| return _xs.getPIData(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public String getPrefix(String namespaceURI) { |
| try { |
| _l.enter(); |
| return _xs.getPrefix(namespaceURI); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public Iterator getPrefixes(String namespaceURI) { |
| try { |
| _l.enter(); |
| return _xs.getPrefixes(namespaceURI); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public int getCharacterOffset() { |
| try { |
| _l.enter(); |
| return _xs.getCharacterOffset(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public int getColumnNumber() { |
| try { |
| _l.enter(); |
| return _xs.getColumnNumber(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| |
| public int getLineNumber() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getLineNumber(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public String getLocationURI() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getLocationURI(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public String getPublicId() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getPublicId(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| |
| public String getSystemId() { |
| synchronized (_l) { |
| _l.enter(); |
| try { |
| return _xs.getSystemId(); |
| } finally { |
| _l.exit(); |
| } |
| } |
| } |
| } |
| } |
| |