001: package net.sf.saxon.trans;
002:
003: import net.sf.saxon.om.NamespaceConstant;
004: import net.sf.saxon.value.Value;
005:
006: import javax.xml.transform.SourceLocator;
007: import javax.xml.transform.TransformerException;
008:
009: /**
010: * XPathException is used to indicate an error in an XPath expression.
011: * We don't distinguish compile-time errors from run-time errors because there are
012: * too many overlaps, e.g. constant expressions can be evaluated at compile-time, and
013: * expressions can be optimised either at compile-time or at run-time.
014: */
015:
016: public abstract class XPathException extends TransformerException {
017:
018: // Rewritten in 8.3 to remove the dependency on the javax.xml.QName class, which is not present in JDK 1.4
019:
020: private boolean isTypeError = false;
021: String errorCodeNamespace;
022: String errorCode;
023: Value errorObject;
024: private boolean hasBeenReported = false;
025:
026: public XPathException(String message) {
027: super (message);
028: }
029:
030: public XPathException(Throwable err) {
031: super (err);
032: }
033:
034: public XPathException(String message, Throwable err) {
035: super (message, err);
036: }
037:
038: public XPathException(String message, SourceLocator loc) {
039: super (message, loc);
040: }
041:
042: public XPathException(String message, SourceLocator loc,
043: Throwable err) {
044: super (message, loc, err);
045: }
046:
047: /**
048: * Force an exception to a static error
049: */
050:
051: public StaticError makeStatic() {
052: return new StaticError(this );
053: }
054:
055: public void setIsTypeError(boolean is) {
056: isTypeError = is;
057: }
058:
059: public boolean isTypeError() {
060: return isTypeError;
061: }
062:
063: /**
064: * Set the error code. The error code is a QName; this method sets the local part of the name,
065: * and if no other namespace has been set, it sets the namespace of the error code to the standard
066: * system namespace {@link NamespaceConstant#ERR}
067: * @param code The local part of the name of the error code
068: */
069:
070: public void setErrorCode(String code) {
071: if (code != null) {
072: this .errorCode = code;
073: if (errorCodeNamespace == null) {
074: errorCodeNamespace = NamespaceConstant.ERR;
075: }
076: }
077: }
078:
079: /**
080: * Set the error code. The error code is a QName; this method sets both parts of the name.
081: * @param namespace The namespace URI part of the name of the error code
082: * @param code The local part of the name of the error code
083: */
084:
085: public void setErrorCode(String namespace, String code) {
086: this .errorCode = code;
087: this .errorCodeNamespace = namespace;
088: }
089:
090: /**
091: * Get the local part of the name of the error code
092: * @return the local part of the name of the error code
093: */
094:
095: public String getErrorCodeLocalPart() {
096: return errorCode;
097: }
098:
099: /**
100: * Get the namespace URI part of the name of the error code
101: * @return the namespace URI part of the name of the error code
102: */
103:
104: public String getErrorCodeNamespace() {
105: return errorCodeNamespace;
106: }
107:
108: public void setErrorObject(Value value) {
109: errorObject = value;
110: }
111:
112: public Value getErrorObject() {
113: return errorObject;
114: }
115:
116: public void setHasBeenReported() {
117: hasBeenReported = true;
118: }
119:
120: public boolean hasBeenReported() {
121: return hasBeenReported;
122: }
123:
124: /**
125: * Subclass used to report circularities
126: */
127:
128: public static class Circularity extends DynamicError {
129: public Circularity(String message) {
130: super (message);
131: }
132: }
133:
134: }
135:
136: //
137: // The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License");
138: // you may not use this file except in compliance with the License. You may obtain a copy of the
139: // License at http://www.mozilla.org/MPL/
140: //
141: // Software distributed under the License is distributed on an "AS IS" basis,
142: // WITHOUT WARRANTY OF ANY KIND, either express or implied.
143: // See the License for the specific language governing rights and limitations under the License.
144: //
145: // The Original Code is: all this file.
146: //
147: // The Initial Developer of the Original Code is Michael H. Kay.
148: //
149: // Portions created by (your name) are Copyright (C) (your legal entity). All Rights Reserved.
150: //
151: // Contributor(s): none.
152: //
|