001: /*
002: Copyright (c) 2002-2007, Dennis M. Sosnoski.
003: All rights reserved.
004:
005: Redistribution and use in source and binary forms, with or without modification,
006: are permitted provided that the following conditions are met:
007:
008: * Redistributions of source code must retain the above copyright notice, this
009: list of conditions and the following disclaimer.
010: * Redistributions in binary form must reproduce the above copyright notice,
011: this list of conditions and the following disclaimer in the documentation
012: and/or other materials provided with the distribution.
013: * Neither the name of JiBX nor the names of its contributors may be used
014: to endorse or promote products derived from this software without specific
015: prior written permission.
016:
017: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
018: ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
019: WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
020: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
021: ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
022: (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
023: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
024: ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
025: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
026: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
027: */
028:
029: package org.jibx.runtime;
030:
031: /**
032: * Validation exception class. This is used for marshalling and unmarshalling
033: * errors that relate to data content.
034: *
035: * @author Dennis M. Sosnoski
036: * @version 1.0
037: */
038:
039: public class ValidationException extends RecoverableException {
040: /**
041: * Constructor from message.
042: *
043: * @param msg message describing the exception condition
044: */
045:
046: public ValidationException(String msg) {
047: super (msg);
048: }
049:
050: /**
051: * Constructor from message and wrapped exception.
052: *
053: * @param msg message describing the exception condition
054: * @param root exception which caused this exception
055: */
056:
057: public ValidationException(String msg, Throwable root) {
058: super (msg, root);
059: }
060:
061: /**
062: * Constructor from message and validation object.
063: *
064: * @param msg message describing the exception condition
065: * @param obj source object for validation error
066: */
067:
068: public ValidationException(String msg, Object obj) {
069: super (addDescription(msg, obj));
070: }
071:
072: /**
073: * Constructor from message, wrapped exception, and validation object.
074: *
075: * @param msg message describing the exception condition
076: * @param root exception which caused this exception
077: * @param obj source object for validation error
078: */
079:
080: public ValidationException(String msg, Throwable root, Object obj) {
081: super (addDescription(msg, obj), root);
082: }
083:
084: /**
085: * Constructor from message, validation object, and unmarshalling context.
086: *
087: * @param msg message describing the exception condition
088: * @param obj source object for validation error
089: * @param ctx context used for unmarshalling
090: */
091:
092: public ValidationException(String msg, Object obj,
093: IUnmarshallingContext ctx) {
094: super (addDescription(msg, obj));
095: }
096:
097: /**
098: * Get description information for a validation object. For an unmarshalled
099: * object with source references available this returns the source position
100: * description. Otherwise, it returns the result of a {@link
101: * java.lang.Object#toString} method call.
102: *
103: * @param obj source object for validation error
104: * @return object description text
105: */
106:
107: public static String describe(Object obj) {
108: if (obj instanceof ITrackSource) {
109: ITrackSource track = (ITrackSource) obj;
110: if (track.jibx_getColumnNumber() != 0
111: || track.jibx_getLineNumber() != 0
112: || track.jibx_getDocumentName() != null) {
113: StringBuffer text = new StringBuffer();
114: text.append("(line ");
115: text.append(track.jibx_getLineNumber());
116: text.append(", col ");
117: text.append(track.jibx_getColumnNumber());
118: if (track.jibx_getDocumentName() != null) {
119: text.append(", in ");
120: text.append(track.jibx_getDocumentName());
121: }
122: text.append(')');
123: return text.toString();
124: }
125: }
126: return "(source unknown)";
127: }
128:
129: /**
130: * Add description information for a validation object to message. This just
131: * appends the result of a {@link #describe} call to the supplied message,
132: * with some appropriate formatting.
133: *
134: * @param msg base message text
135: * @param obj source object for validation error
136: * @return message with object description appended
137: */
138:
139: public static String addDescription(String msg, Object obj) {
140: return msg + " (" + describe(obj) + ")";
141: }
142:
143: /**
144: * Get exception description.
145: *
146: * @return message describing the exception condition
147: */
148:
149: public String getMessage() {
150: return super.getMessage();
151: }
152: }
|