You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2023/02/09 14:57:16 UTC
[commons-beanutils] 02/02: Add and use ConversionException.format(String, Object...).
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-beanutils.git
commit 0861a8d0f3ad9d9a209df1ccc34fcb841344196d
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Thu Feb 9 09:57:01 2023 -0500
Add and use ConversionException.format(String, Object...).
---
src/changes/changes.xml | 5 +++-
.../apache/commons/beanutils2/BasicDynaBean.java | 7 ++----
.../commons/beanutils2/ConversionException.java | 12 ++++++++++
.../apache/commons/beanutils2/LazyDynaBean.java | 7 ++----
.../beanutils2/converters/AbstractConverter.java | 6 ++---
.../beanutils2/converters/ArrayConverter.java | 7 ++----
.../beanutils2/converters/DateTimeConverter.java | 3 +--
.../beanutils2/converters/NumberConverter.java | 28 ++++++++--------------
.../locale/converters/DateLocaleConverter.java | 25 +++++++++----------
.../locale/converters/FloatLocaleConverter.java | 14 +++++------
.../converters/DateLocaleConverterTestCase.java | 4 ++--
11 files changed, 55 insertions(+), 63 deletions(-)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 6d7df5b9..674e1c48 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -108,9 +108,12 @@
Fix SpotBugs [ERROR] Medium: org.apache.commons.beanutils2.WrapDynaClass.getDynaProperties() may expose internal representation by returning WrapDynaClass.properties [org.apache.commons.beanutils2.WrapDynaClass] At WrapDynaClass.java:[line 172] EI_EXPOSE_REP.
</action>
<!-- ADD -->
- <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
+ <action dev="ggregory" type="add" due-to="Dependabot, Gary Gregory">
Add github/codeql-action #118.
</action>
+ <action dev="ggregory" type="add" due-to="Dependabot, Gary Gregory">
+ Add and use ConversionException.format(String, Object...).
+ </action>
<!-- UPDATES -->
<action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
Bump actions/cache from 2 to 3.0.11 #77, #89, #103, #111. #137, #141.
diff --git a/src/main/java/org/apache/commons/beanutils2/BasicDynaBean.java b/src/main/java/org/apache/commons/beanutils2/BasicDynaBean.java
index 4217ab14..f2515b5c 100644
--- a/src/main/java/org/apache/commons/beanutils2/BasicDynaBean.java
+++ b/src/main/java/org/apache/commons/beanutils2/BasicDynaBean.java
@@ -298,11 +298,8 @@ public class BasicDynaBean implements DynaBean, Serializable {
("Primitive value for '" + name + "'");
}
} else if (!isAssignable(descriptor.getType(), value.getClass())) {
- throw new ConversionException
- ("Cannot assign value of type '" +
- value.getClass().getName() +
- "' to property '" + name + "' of type '" +
- descriptor.getType().getName() + "'");
+ throw ConversionException.format("Cannot assign value of type '%s' to property '%s' of type '%s'", value.getClass().getName(), name,
+ descriptor.getType().getName());
}
values.put(name, value);
diff --git a/src/main/java/org/apache/commons/beanutils2/ConversionException.java b/src/main/java/org/apache/commons/beanutils2/ConversionException.java
index 8f43ed01..707ab98f 100644
--- a/src/main/java/org/apache/commons/beanutils2/ConversionException.java
+++ b/src/main/java/org/apache/commons/beanutils2/ConversionException.java
@@ -25,6 +25,18 @@ package org.apache.commons.beanutils2;
*/
public class ConversionException extends RuntimeException {
+ /**
+ * Constructs a new instance with a message formatted using {@link String#format(String, Object...)}.
+ *
+ * @param format See {@link String#format(String, Object...)}.
+ * @param args See {@link String#format(String, Object...)}.
+ * @return a new instance with a message formatted using {@link String#format(String, Object...)}.
+ * @since 2.0.0
+ */
+ public static ConversionException format(final String format, final Object... args) {
+ return new ConversionException(String.format(format, args));
+ }
+
private static final long serialVersionUID = 1L;
/**
diff --git a/src/main/java/org/apache/commons/beanutils2/LazyDynaBean.java b/src/main/java/org/apache/commons/beanutils2/LazyDynaBean.java
index 242eb308..9433d4c7 100644
--- a/src/main/java/org/apache/commons/beanutils2/LazyDynaBean.java
+++ b/src/main/java/org/apache/commons/beanutils2/LazyDynaBean.java
@@ -481,11 +481,8 @@ public class LazyDynaBean implements DynaBean, Serializable {
("Primitive value for '" + name + "'");
}
} else if (!isAssignable(descriptor.getType(), value.getClass())) {
- throw new ConversionException
- ("Cannot assign value of type '" +
- value.getClass().getName() +
- "' to property '" + name + "' of type '" +
- descriptor.getType().getName() + "'");
+ throw ConversionException.format
+ ("Cannot assign value of type '%s' to property '%s' of type '%s'", value.getClass().getName(), name, descriptor.getType().getName());
}
// Set the property's value
diff --git a/src/main/java/org/apache/commons/beanutils2/converters/AbstractConverter.java b/src/main/java/org/apache/commons/beanutils2/converters/AbstractConverter.java
index 7a9acd8c..98a936c2 100644
--- a/src/main/java/org/apache/commons/beanutils2/converters/AbstractConverter.java
+++ b/src/main/java/org/apache/commons/beanutils2/converters/AbstractConverter.java
@@ -142,8 +142,7 @@ public abstract class AbstractConverter<D> implements Converter<D> {
* @since 1.9
*/
protected ConversionException conversionException(final Class<?> type, final Object value) {
- return new ConversionException("Can't convert value '" + value
- + "' to type " + type);
+ return ConversionException.format("Can't convert value '%s' to type %s", value, type);
}
/**
@@ -385,8 +384,7 @@ public abstract class AbstractConverter<D> implements Converter<D> {
return type.cast(value);
}
- final ConversionException cex = new ConversionException("No value specified for '" +
- toString(type) + "'");
+ final ConversionException cex = ConversionException.format("No value specified for '%s'", toString(type));
if (log().isDebugEnabled()) {
log().debug(" Throwing ConversionException: " + cex.getMessage());
log().debug(" " + DEFAULT_CONFIG_MSG);
diff --git a/src/main/java/org/apache/commons/beanutils2/converters/ArrayConverter.java b/src/main/java/org/apache/commons/beanutils2/converters/ArrayConverter.java
index dead1958..aaf73db9 100644
--- a/src/main/java/org/apache/commons/beanutils2/converters/ArrayConverter.java
+++ b/src/main/java/org/apache/commons/beanutils2/converters/ArrayConverter.java
@@ -281,9 +281,7 @@ public class ArrayConverter<C> extends AbstractConverter<C> {
@Override
protected <T> T convertToType(final Class<T> type, final Object value) throws Throwable {
if (!type.isArray()) {
- throw new ConversionException(toString(getClass())
- + " cannot handle conversion to '"
- + toString(type) + "' (not an array).");
+ throw ConversionException.format("%s cannot handle conversion to '%s' (not an array).", toString(getClass()), toString(type));
}
// Handle the source
@@ -463,8 +461,7 @@ public class ArrayConverter<C> extends AbstractConverter<C> {
} else if (ttype == StreamTokenizer.TT_EOF) {
break;
} else {
- throw new ConversionException("Encountered token of type "
- + ttype + " parsing elements to '" + typeName + ".");
+ throw ConversionException.format("Encountered token of type %s parsing elements to '%s'.", ttype, typeName);
}
}
diff --git a/src/main/java/org/apache/commons/beanutils2/converters/DateTimeConverter.java b/src/main/java/org/apache/commons/beanutils2/converters/DateTimeConverter.java
index af6ebc23..123dd508 100644
--- a/src/main/java/org/apache/commons/beanutils2/converters/DateTimeConverter.java
+++ b/src/main/java/org/apache/commons/beanutils2/converters/DateTimeConverter.java
@@ -591,8 +591,7 @@ public abstract class DateTimeConverter<D> extends AbstractConverter<D> {
}
}
if (patterns.length > 1) {
- throw new ConversionException("Error converting '" + toString(sourceType) + "' to '" + toString(targetType)
- + "' using patterns '" + displayPatterns + "'");
+ throw ConversionException.format("Error converting '%s' to '%s' using patterns '%s'", toString(sourceType), toString(targetType), displayPatterns);
}
throw firstEx;
}
diff --git a/src/main/java/org/apache/commons/beanutils2/converters/NumberConverter.java b/src/main/java/org/apache/commons/beanutils2/converters/NumberConverter.java
index 8c14f3e3..f0df51d6 100644
--- a/src/main/java/org/apache/commons/beanutils2/converters/NumberConverter.java
+++ b/src/main/java/org/apache/commons/beanutils2/converters/NumberConverter.java
@@ -301,12 +301,10 @@ public abstract class NumberConverter<N extends Number> extends AbstractConverte
if (targetType.equals(Byte.class)) {
final long longValue = value.longValue();
if (longValue > Byte.MAX_VALUE) {
- throw new ConversionException(toString(sourceType) + " value '" + value
- + "' is too large for " + toString(targetType));
+ throw ConversionException.format("%s value '%s' is too large for %s", toString(sourceType), value, toString(targetType));
}
if (longValue < Byte.MIN_VALUE) {
- throw new ConversionException(toString(sourceType) + " value '" + value
- + "' is too small " + toString(targetType));
+ throw ConversionException.format("%s value '%s' is too small %s", toString(sourceType), value, toString(targetType));
}
return targetType.cast(Byte.valueOf(value.byteValue()));
}
@@ -315,12 +313,10 @@ public abstract class NumberConverter<N extends Number> extends AbstractConverte
if (targetType.equals(Short.class)) {
final long longValue = value.longValue();
if (longValue > Short.MAX_VALUE) {
- throw new ConversionException(toString(sourceType) + " value '" + value
- + "' is too large for " + toString(targetType));
+ throw ConversionException.format("%s value '%s' is too large for %s", toString(sourceType), value, toString(targetType));
}
if (longValue < Short.MIN_VALUE) {
- throw new ConversionException(toString(sourceType) + " value '" + value
- + "' is too small " + toString(targetType));
+ throw ConversionException.format("%s value '%s' is too small %s", toString(sourceType), value, toString(targetType));
}
return targetType.cast(Short.valueOf(value.shortValue()));
}
@@ -329,12 +325,10 @@ public abstract class NumberConverter<N extends Number> extends AbstractConverte
if (targetType.equals(Integer.class)) {
final long longValue = value.longValue();
if (longValue > Integer.MAX_VALUE) {
- throw new ConversionException(toString(sourceType) + " value '" + value
- + "' is too large for " + toString(targetType));
+ throw ConversionException.format("%s value '%s' is too large for %s", toString(sourceType), value, toString(targetType));
}
if (longValue < Integer.MIN_VALUE) {
- throw new ConversionException(toString(sourceType) + " value '" + value
- + "' is too small " + toString(targetType));
+ throw ConversionException.format("%s value '%s' is too small %s", toString(sourceType), value, toString(targetType));
}
return targetType.cast(Integer.valueOf(value.intValue()));
}
@@ -347,8 +341,7 @@ public abstract class NumberConverter<N extends Number> extends AbstractConverte
// Float
if (targetType.equals(Float.class)) {
if (value.doubleValue() > Float.MAX_VALUE) {
- throw new ConversionException(toString(sourceType) + " value '" + value
- + "' is too large for " + toString(targetType));
+ throw ConversionException.format("%s value '%s' is too large for %s", toString(sourceType), value, toString(targetType));
}
return targetType.cast(Float.valueOf(value.floatValue()));
}
@@ -364,7 +357,7 @@ public abstract class NumberConverter<N extends Number> extends AbstractConverte
return targetType.cast(new BigDecimal(value.toString()));
}
if (value instanceof BigInteger) {
- return targetType.cast(new BigDecimal((BigInteger)value));
+ return targetType.cast(new BigDecimal((BigInteger) value));
}
if (value instanceof BigDecimal) {
return targetType.cast(new BigDecimal(value.toString()));
@@ -375,13 +368,12 @@ public abstract class NumberConverter<N extends Number> extends AbstractConverte
// BigInteger
if (targetType.equals(BigInteger.class)) {
if (value instanceof BigDecimal) {
- return targetType.cast(((BigDecimal)value).toBigInteger());
+ return targetType.cast(((BigDecimal) value).toBigInteger());
}
return targetType.cast(BigInteger.valueOf(value.longValue()));
}
- final String msg = toString(getClass()) + " cannot handle conversion to '"
- + toString(targetType) + "'";
+ final String msg = toString(getClass()) + " cannot handle conversion to '" + toString(targetType) + "'";
if (log().isWarnEnabled()) {
log().warn(" " + msg);
}
diff --git a/src/main/java/org/apache/commons/beanutils2/locale/converters/DateLocaleConverter.java b/src/main/java/org/apache/commons/beanutils2/locale/converters/DateLocaleConverter.java
index 8ce314b0..b9548441 100644
--- a/src/main/java/org/apache/commons/beanutils2/locale/converters/DateLocaleConverter.java
+++ b/src/main/java/org/apache/commons/beanutils2/locale/converters/DateLocaleConverter.java
@@ -242,33 +242,30 @@ public class DateLocaleConverter extends BaseLocaleConverter<Date> {
// Handle Calendar
if (value instanceof java.util.Calendar) {
- return ((java.util.Calendar)value).getTime();
+ return ((java.util.Calendar) value).getTime();
}
- if (localizedPattern) {
- pattern = convertLocalizedPattern(pattern, locale);
- }
+ if (localizedPattern) {
+ pattern = convertLocalizedPattern(pattern, locale);
+ }
- // Create Formatter - use default if pattern is null
- final DateFormat formatter = pattern == null ? DateFormat.getDateInstance(DateFormat.SHORT, locale)
- : new SimpleDateFormat(pattern, locale);
- formatter.setLenient(isLenient);
+ // Create Formatter - use default if pattern is null
+ final DateFormat formatter = pattern == null ? DateFormat.getDateInstance(DateFormat.SHORT, locale) : new SimpleDateFormat(pattern, locale);
+ formatter.setLenient(isLenient);
- // Parse the Date
+ // Parse the Date
final ParsePosition pos = new ParsePosition(0);
final String strValue = value.toString();
final Object parsedValue = formatter.parseObject(strValue, pos);
if (pos.getErrorIndex() > -1) {
- throw new ConversionException("Error parsing date '" + value +
- "' at position="+ pos.getErrorIndex());
+ throw ConversionException.format("Error parsing date '%s' at position = %s", value, pos.getErrorIndex());
}
if (pos.getIndex() < strValue.length()) {
- throw new ConversionException("Date '" + value +
- "' contains unparsed characters from position=" + pos.getIndex());
+ throw ConversionException.format("Date '%s' contains unparsed characters from position = %s", value, pos.getIndex());
}
return parsedValue;
- }
+ }
/**
* Convert a pattern from a localized format to the default format.
diff --git a/src/main/java/org/apache/commons/beanutils2/locale/converters/FloatLocaleConverter.java b/src/main/java/org/apache/commons/beanutils2/locale/converters/FloatLocaleConverter.java
index 9b7961e1..f9f83e2e 100644
--- a/src/main/java/org/apache/commons/beanutils2/locale/converters/FloatLocaleConverter.java
+++ b/src/main/java/org/apache/commons/beanutils2/locale/converters/FloatLocaleConverter.java
@@ -197,12 +197,12 @@ public class FloatLocaleConverter extends DecimalLocaleConverter<Float> {
*/
@Override
protected Object parse(final Object value, final String pattern) throws ParseException {
- final Number parsed = (Number) super.parse(value, pattern);
- final double doubleValue = parsed.doubleValue();
- final double posDouble = doubleValue >= 0 ? doubleValue : doubleValue * -1;
- if (posDouble != 0 && (posDouble < Float.MIN_VALUE || posDouble > Float.MAX_VALUE)) {
- throw new ConversionException("Supplied number is not of type Float: "+parsed);
- }
- return Float.valueOf(parsed.floatValue()); // unlike superclass it returns Float type
+ final Number parsed = (Number) super.parse(value, pattern);
+ final double doubleValue = parsed.doubleValue();
+ final double posDouble = doubleValue >= 0 ? doubleValue : doubleValue * -1;
+ if (posDouble != 0 && (posDouble < Float.MIN_VALUE || posDouble > Float.MAX_VALUE)) {
+ throw new ConversionException("Supplied number is not of type Float: " + parsed);
+ }
+ return Float.valueOf(parsed.floatValue()); // unlike superclass it returns Float type
}
}
diff --git a/src/test/java/org/apache/commons/beanutils2/converters/DateLocaleConverterTestCase.java b/src/test/java/org/apache/commons/beanutils2/converters/DateLocaleConverterTestCase.java
index 90044a05..375ff741 100644
--- a/src/test/java/org/apache/commons/beanutils2/converters/DateLocaleConverterTestCase.java
+++ b/src/test/java/org/apache/commons/beanutils2/converters/DateLocaleConverterTestCase.java
@@ -408,13 +408,13 @@ public class DateLocaleConverterTestCase extends BaseLocaleConverterTestCase<Dat
try {
converter.convert("01/10/2004", "dd-MM-yyyy");
} catch (final ConversionException e) {
- assertEquals("Parse Error", "Error parsing date '01/10/2004' at position=2", e.getMessage());
+ assertEquals("Parse Error", "Error parsing date '01/10/2004' at position = 2", e.getMessage());
}
try {
converter.convert("01-10-2004X", "dd-MM-yyyy");
} catch (final ConversionException e) {
- assertEquals("Parse Length", "Date '01-10-2004X' contains unparsed characters from position=10", e.getMessage());
+ assertEquals("Parse Length", "Date '01-10-2004X' contains unparsed characters from position = 10", e.getMessage());
}
}