1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
|
/*******************************************************************************
* Copyright (c) 1998, 2015 Oracle and/or its affiliates, IBM Corporation. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Oracle - initial API and implementation from Oracle TopLink
* 02/19/2015 - Rick Curtis
* - 458877 : Add national character support
******************************************************************************/
package org.eclipse.persistence.exceptions;
import java.util.*;
import org.eclipse.persistence.exceptions.i18n.ExceptionMessageGenerator;
/**
* <P><B>Purpose</B>: Conversion exceptions such as method or class not defined will raise this exception.
*/
public class ConversionException extends EclipseLinkException {
protected Class classToConvertTo;
protected transient Object sourceObject;
public final static int COULD_NOT_BE_CONVERTED = 3001;
public final static int COULD_NOT_BE_CONVERTED_EXTENDED = 3002;
public final static int INCORRECT_DATE_FORMAT = 3003;
public final static int INCORRECT_TIME_FORMAT = 3004;
public final static int INCORRECT_TIMESTAMP_FORMAT = 3005;
public final static int COULD_NOT_CONVERT_TO_BYTE_ARRAY = 3006;
public final static int COULD_NOT_BE_CONVERTED_TO_CLASS = 3007;
public final static int INCORRECT_DATE_TIME_FORMAT = 3008;
public final static int UNABLE_TO_SET_PROPERTIES = 3009;
/**
* INTERNAL:
* TopLink exceptions should only be thrown by TopLink.
* This constructor is only for error message scripting.
*/
protected ConversionException() {
super();
}
/**
* INTERNAL:
* TopLink exceptions should only be thrown by TopLink.
*/
protected ConversionException(String message, Object sourceObject, Class classToConvertTo, Exception exception) {
super(message, exception);
setSourceObject(sourceObject);
setClassToConvertTo(classToConvertTo);
}
// Couldn't find a way of simply changing the message on an existing exception.
// therefore, create a new exception with appropriate message and port existing
// info (stack trace and internal exception over)
public static ConversionException couldNotBeConverted(Object mapping, Object descriptor, ConversionException exception) {
Object sourceObject = exception.getSourceObject();
Class javaClass = exception.getClassToConvertTo();
Exception original = (Exception)exception.getInternalException();
Object[] args = { sourceObject, sourceObject.getClass(), mapping, descriptor, javaClass };
String message = ExceptionMessageGenerator.buildMessage(ConversionException.class, COULD_NOT_BE_CONVERTED_EXTENDED, args);
ConversionException conversionException = new ConversionException(message, sourceObject, javaClass, original);
conversionException.setStackTrace(exception.getStackTrace());
conversionException.setErrorCode(COULD_NOT_BE_CONVERTED_EXTENDED);
return conversionException;
}
public static ConversionException couldNotBeConverted(Object object, Class javaClass) {
Class objectClass = null;
if (object!=null) {
objectClass = object.getClass();
}
Object[] args = { object, objectClass, javaClass };
String message = ExceptionMessageGenerator.buildMessage(ConversionException.class, COULD_NOT_BE_CONVERTED, args);
ConversionException conversionException = new ConversionException(message, object, javaClass, null);
conversionException.setErrorCode(COULD_NOT_BE_CONVERTED);
return conversionException;
}
public static ConversionException couldNotBeConverted(Object object, Class javaClass, Exception exception) {
Class objectClass = null;
if (object!=null) {
objectClass = object.getClass();
}
Object[] args = { object, objectClass, javaClass };
String message = ExceptionMessageGenerator.buildMessage(ConversionException.class, COULD_NOT_BE_CONVERTED, args);
ConversionException conversionException = new ConversionException(message, object, javaClass, exception);
conversionException.setErrorCode(COULD_NOT_BE_CONVERTED);
return conversionException;
}
public static ConversionException couldNotBeConvertedToClass(Object object, Class javaClass, Exception exception) {
Object[] args = { object, object.getClass(), javaClass };
String message = ExceptionMessageGenerator.buildMessage(ConversionException.class, COULD_NOT_BE_CONVERTED_TO_CLASS, args);
ConversionException conversionException = new ConversionException(message, object, javaClass, exception);
conversionException.setErrorCode(COULD_NOT_BE_CONVERTED_TO_CLASS);
return conversionException;
}
public static ConversionException couldNotTranslatePropertiesIntoObject(Object object, String propertyName, String propertyValue, Exception cause) {
// Unable to set {0} properties [{1}] into [{2}]
Object[] args = { propertyName, propertyValue, object};
String message = ExceptionMessageGenerator.buildMessage(ConversionException.class, UNABLE_TO_SET_PROPERTIES, args);
ConversionException conversionException = new ConversionException(message, object, object.getClass(), cause);
conversionException.setErrorCode(UNABLE_TO_SET_PROPERTIES);
return conversionException;
}
public static ConversionException couldNotConvertToByteArray(Object object) {
Object[] args = { object };
String message = ExceptionMessageGenerator.buildMessage(ConversionException.class, COULD_NOT_CONVERT_TO_BYTE_ARRAY, args);
ConversionException conversionException = new ConversionException(message, object, byte[].class, null);
conversionException.setErrorCode(COULD_NOT_CONVERT_TO_BYTE_ARRAY);
return conversionException;
}
public static ConversionException incorrectDateFormat(String dateString) {
Object[] args = { dateString };
String message = ExceptionMessageGenerator.buildMessage(ConversionException.class, INCORRECT_DATE_FORMAT, args);
ConversionException conversionException = new ConversionException(message, dateString, java.sql.Date.class, null);
conversionException.setErrorCode(INCORRECT_DATE_FORMAT);
return conversionException;
}
public static ConversionException incorrectTimeFormat(String timeString) {
Object[] args = { timeString };
String message = ExceptionMessageGenerator.buildMessage(ConversionException.class, INCORRECT_TIME_FORMAT, args);
ConversionException conversionException = new ConversionException(message, timeString, java.sql.Time.class, null);
conversionException.setErrorCode(INCORRECT_TIME_FORMAT);
return conversionException;
}
public static ConversionException incorrectTimestampFormat(String timestampString) {
Object[] args = { timestampString };
String message = ExceptionMessageGenerator.buildMessage(ConversionException.class, INCORRECT_TIMESTAMP_FORMAT, args);
ConversionException conversionException = new ConversionException(message, timestampString, java.sql.Timestamp.class, null);
conversionException.setErrorCode(INCORRECT_TIMESTAMP_FORMAT);
return conversionException;
}
public static ConversionException incorrectDateTimeFormat(String dateTimeString, Class classBeingConvertedTo) {
Object[] args = { dateTimeString };
String message = ExceptionMessageGenerator.buildMessage(ConversionException.class, INCORRECT_DATE_TIME_FORMAT, args);
ConversionException conversionException = new ConversionException(message, dateTimeString, classBeingConvertedTo, null);
conversionException.setErrorCode(INCORRECT_DATE_TIME_FORMAT);
return conversionException;
}
public static ConversionException incorrectDateTimeFormat(String dateTimeString) {
return incorrectDateTimeFormat(dateTimeString, Calendar.class);
}
/**
* PUBLIC:
* Return the class to convert to.
*/
public Class getClassToConvertTo() {
return classToConvertTo;
}
/**
* PUBLIC:
* Return the object for which the problem was detected.
*/
public Object getSourceObject() {
return sourceObject;
}
/**
* INTERNAL:
* Set the class to convert to.
*/
public void setClassToConvertTo(Class classToConvertTo) {
this.classToConvertTo = classToConvertTo;
}
/**
* INTERNAL:
* Set the object for which the problem was detected.
*/
public void setSourceObject(Object sourceObject) {
this.sourceObject = sourceObject;
}
}
|