alibaba/nacos · warning · IllegalArgumentException
Unsupported object type: {}
Error message
Unsupported object type: {} What it means
Thrown by CollectionUtils.sizeIsEmpty(Object) when the argument is a non-null object that is not a Collection, Map, Object[], Iterator, or Enumeration, and Array.getLength(object) also throws. The message appends the actual class name so you can see what was passed.
Source
Thrown at common/src/main/java/com/alibaba/nacos/common/utils/CollectionUtils.java:201
*/
public static boolean sizeIsEmpty(Object object) {
if (object instanceof Collection) {
return ((Collection) object).isEmpty();
} else if (object instanceof Map) {
return ((Map) object).isEmpty();
} else if (object instanceof Object[]) {
return ((Object[]) object).length == 0;
} else if (object instanceof Iterator) {
return ((Iterator) object).hasNext() == false;
} else if (object instanceof Enumeration) {
return ((Enumeration) object).hasMoreElements() == false;
} else if (object == null) {
throw new IllegalArgumentException("Unsupported object type: null");
} else {
try {
return Array.getLength(object) == 0;
} catch (IllegalArgumentException ex) {
throw new IllegalArgumentException(
"Unsupported object type: " + object.getClass().getName());
}
}
}
/**
* Whether contain item in collection.
*
* @param coll collection
* @param target target value
* @param <T> General Type
* @return true if contain, otherwise false
*/
public static <T> boolean contains(Collection<T> coll, T target) {
if (isEmpty(coll)) {
return false;
}
return coll.contains(target);View on GitHub (pinned to 9b989acdf1)
Solutions
- Check the class name in the error message to confirm what was passed.
- Convert the input to a supported type before calling (e.g., Arrays.asList for arrays, wrap in a collection).
- For Strings use str.isEmpty(); for primitive arrays use array.length directly.
Example fix
// before boolean empty = CollectionUtils.sizeIsEmpty(someString); // after boolean empty = someString == null || someString.isEmpty();
Defensive patterns
Strategy: type-guard
Type guard
boolean isSupportedBySizeIsEmpty(Object o) {
return o instanceof Collection || o instanceof Map
|| o instanceof Object[] || o instanceof Iterator
|| o instanceof Enumeration;
} Try / catch
try {
return CollectionUtils.sizeIsEmpty(obj);
} catch (IllegalArgumentException e) {
// obj was a String, primitive array, or arbitrary POJO
return false; // or compute size the type-specific way
} Prevention
- sizeIsEmpty only accepts Collection, Map, Object[], Iterator, Enumeration — not String, not primitive arrays.
- Use String.isEmpty(), array.length, or Arrays.asList for unsupported types.
- Read the class name in the error message to confirm the offending type.
When it happens
Trigger: Calling sizeIsEmpty with an arbitrary object such as a String, a primitive array (int[]), a custom POJO, or any type without a measurable size.
Common situations: Passing a String (common mistake — length is queried differently); passing a primitive array like int[] (only Object[] is supported); passing a POJO where a Collection was expected.
Related errors
- Unsupported object type: null
- iterable cannot be null.
- expected one element but was: <{}>
- Agent Version storage {field} must be a string
- Agent Version storage {field} must be an integer
AI-assisted analysis of alibaba/nacos@9b989acdf1 (2026-08-14).
Data as JSON: /api/errors/e1be199cb3dfdad0.
Report an issue: GitHub.