Clean up ExceptionUtils.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BasicException.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BasicException.java
index 39343bc..b60f5d7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BasicException.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BasicException.java
@@ -21,7 +21,7 @@
 /**

  * Subclass of non-runtime exceptions that take in a message and zero or more arguments.

  */

-public class BasicException extends Exception {

+public abstract class BasicException extends Exception {

 

 	private static final long serialVersionUID = 1L;

 

diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BasicIllegalArgumentException.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BasicIllegalArgumentException.java
deleted file mode 100644
index 08b408d..0000000
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BasicIllegalArgumentException.java
+++ /dev/null
@@ -1,72 +0,0 @@
-// ***************************************************************************************************************************

-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *

-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *

-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *

-// * with the License.  You may obtain a copy of the License at                                                              *

-// *                                                                                                                         *

-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *

-// *                                                                                                                         *

-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *

-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *

-// * specific language governing permissions and limitations under the License.                                              *

-// ***************************************************************************************************************************

-package org.apache.juneau;

-

-import static org.apache.juneau.internal.StringUtils.*;

-

-import java.text.*;

-

-import org.apache.juneau.internal.*;

-import org.apache.juneau.reflect.*;

-

-/**

- * Subclass of illegal-argument exceptions that take in a message and zero or more arguments.

- */

-public class BasicIllegalArgumentException extends IllegalArgumentException {

-

-	private static final long serialVersionUID = 1L;

-

-	/**

-	 * Constructor.

-	 *

-	 * @param message The {@link MessageFormat}-style message.

-	 * @param args Optional {@link MessageFormat}-style arguments.

-	 */

-	public BasicIllegalArgumentException(String message, Object...args) {

-		super(format(message, args));

-	}

-

-	/**

-	 * Constructor.

-	 *

-	 * @param causedBy The cause of this exception.

-	 * @param message The {@link MessageFormat}-style message.

-	 * @param args Optional {@link MessageFormat}-style arguments.

-	 */

-	public BasicIllegalArgumentException(Throwable causedBy, String message, Object...args) {

-		this(message, args);

-		initCause(causedBy);

-	}

-

-	/**

-	 * Throws a {@link BasicIllegalArgumentException} if the specified method does not only contain args of the specified types.

-	 *

-	 * @param m The method to check.

-	 * @param args The allowed args.

-	 */

-	public static void assertArgsOnlyOfType(MethodInfo m, Class<?>...args) {

-		if (! m.argsOnlyOfType(args))

-			throw new BasicIllegalArgumentException("Invalid arguments passed to method {0}.  Only arguments of type {1} are allowed.", m, args);

-	}

-

-	/**

-	 * Same as {@link #getCause()} but searches the throwable chain for an exception of the specified type.

-	 *

-	 * @param c The throwable type to search for.

-	 * @param <T> The throwable type to search for.

-	 * @return The exception, or <jk>null</jk> if not found.

-	 */

-	public <T extends Throwable> T getCause(Class<T> c) {

-		return ThrowableUtils.getCause(c, this);

-	}

-}

diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
index 758caac..32a7116 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
@@ -13,7 +13,6 @@
 package org.apache.juneau;

 

 import static org.apache.juneau.internal.StringUtils.*;

-import static org.apache.juneau.internal.ThrowableUtils.*;

 import static org.apache.juneau.assertions.Assertions.*;

 import static org.apache.juneau.internal.ClassUtils.*;

 import static org.apache.juneau.internal.IOUtils.*;

@@ -833,9 +832,7 @@
 	public final <T> BeanMap<T> toBeanMap(T o, Class<? super T> c) throws BeanRuntimeException {

 		assertArgNotNull("o", o);

 		assertArgNotNull("c", c);

-

-		if (! c.isInstance(o))

-			illegalArg("The specified object is not an instance of the specified class.  class=''{0}'', objectClass=''{1}'', object=''{2}''", className(c), className(o), 0);

+		assertArg(c.isInstance(o), "The specified object is not an instance of the specified class.  class=''{0}'', objectClass=''{1}'', object=''{2}''", className(c), className(o), 0);

 

 		ClassMeta cm = getClassMeta(c);

 

diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/Assertions.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/Assertions.java
index 02576b3..cca32e6 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/Assertions.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/Assertions.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.assertions;
 
+import static org.apache.juneau.internal.ExceptionUtils.*;
 import static org.apache.juneau.internal.IOUtils.*;
 
 import java.io.*;
@@ -577,14 +578,26 @@
 	 * Throws an {@link IllegalArgumentException} if the specified argument is <jk>null</jk>.
 	 *
 	 * @param <T> The argument data type.
-	 * @param arg The argument name.
+	 * @param name The argument name.
 	 * @param o The object to check.
 	 * @return The same argument.
 	 * @throws IllegalArgumentException Constructed exception.
 	 */
-	public static final <T> T assertArgNotNull(String arg, T o) throws IllegalArgumentException {
-		if (o == null)
-			throw new BasicIllegalArgumentException("Argument ''{0}'' cannot be null", arg);
+	public static final <T> T assertArgNotNull(String name, T o) throws IllegalArgumentException {
+		assertArg(o != null, "Argument ''{0}'' cannot be null", name);
 		return o;
 	}
+
+	/**
+	 * Throws an {@link IllegalArgumentException} if the specified expression is <jk>false</jk>.
+	 *
+	 * @param expression The boolean expression to check.
+	 * @param msg The exception message.
+	 * @param args The exception message args.
+	 * @throws IllegalArgumentException Constructed exception.
+	 */
+	public static final void assertArg(boolean expression, String msg, Object...args) throws IllegalArgumentException {
+		if (! expression)
+			throw illegalArgumentException(msg, args);
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/EntityTag.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/EntityTag.java
index f386a36..c04be39 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/EntityTag.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/EntityTag.java
@@ -13,10 +13,10 @@
 package org.apache.juneau.http.header;
 
 import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.assertions.Assertions.*;
+import static org.apache.juneau.internal.ExceptionUtils.*;
 import static org.apache.juneau.internal.ObjectUtils.*;
 
-import org.apache.juneau.*;
-
 /**
  * Represents a validator value.
  *
@@ -55,8 +55,7 @@
 	 * @throws IllegalArgumentException If attempting to set an invalid entity tag value.
 	 */
 	public EntityTag(String value) {
-		if (value == null)
-			throw new BasicIllegalArgumentException("Invalid value for entity-tag: [null]");
+		assertArgNotNull("value", value);
 
 		value = trim(emptyIfNull(value));
 		isWeak = value.startsWith("W/");
@@ -68,7 +67,7 @@
 			if (value.length() > 1 && value.charAt(0) == '"' && value.charAt(value.length()-1) == '"')
 				value = value.substring(1, value.length()-1);
 			else
-				throw new BasicIllegalArgumentException("Invalid value for entity-tag: [{0}]", isWeak ? ("W/"+value) : value);
+				throw illegalArgumentException("Invalid value for entity-tag: [{0}]", isWeak ? ("W/"+value) : value);
 		}
 		this.value = value;
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderList.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderList.java
index c33411f..4e6abdb 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderList.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderList.java
@@ -21,7 +21,6 @@
 
 import org.apache.http.*;
 import org.apache.http.util.*;
-import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.http.HttpHeaders;
 import org.apache.juneau.internal.*;
@@ -428,8 +427,7 @@
 		assertArgNotNull("type", type);
 
 		String name = HeaderBeanMeta.of(type).getSchema().getName();
-		if (name == null)
-			throw new BasicIllegalArgumentException("Header name could not be found on bean type ''{0}''", type.getName());
+		assertArg(name != null, "Header name could not be found on bean type ''{0}''", type.getName());
 
 		return get(name, type);
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicIntegerPart.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicIntegerPart.java
index e254b05..3673fe3 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicIntegerPart.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicIntegerPart.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.http.part;
 
+import static org.apache.juneau.internal.ExceptionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static java.util.Optional.*;
 
@@ -19,7 +20,6 @@
 import java.util.function.*;
 
 import org.apache.http.*;
-import org.apache.juneau.*;
 import org.apache.juneau.assertions.*;
 
 /**
@@ -136,7 +136,7 @@
 				Long.parseLong(s);
 				return Integer.MAX_VALUE;
 			} catch (NumberFormatException e2) {
-				throw new BasicIllegalArgumentException("Value could not be parsed as an int: {0}", o);
+				throw illegalArgumentException("Value could not be parsed as an int: {0}", o);
 			}
 		}
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicLongPart.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicLongPart.java
index 49a19db..fa67e97 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicLongPart.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicLongPart.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.http.part;
 
+import static org.apache.juneau.internal.ExceptionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static java.util.Optional.*;
 
@@ -19,7 +20,6 @@
 import java.util.function.*;
 
 import org.apache.http.*;
-import org.apache.juneau.*;
 import org.apache.juneau.assertions.*;
 
 /**
@@ -130,7 +130,7 @@
 		try {
 			return Long.parseLong(s);
 		} catch (NumberFormatException e) {
-			throw new BasicIllegalArgumentException("Value could not be parsed as a long: {0}", o);
+			throw illegalArgumentException("Value could not be parsed as a long: {0}", o);
 		}
 	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/PartList.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/PartList.java
index a0f9ef4..fcb37bc 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/PartList.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/PartList.java
@@ -22,7 +22,6 @@
 
 import org.apache.http.*;
 import org.apache.http.util.*;
-import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.http.HttpParts;
 import org.apache.juneau.http.annotation.*;
@@ -416,8 +415,7 @@
 		assertArgNotNull("type", type);
 
 		String name = PartBeanMeta.of(type).getSchema().getName();
-		if (name == null)
-			throw new BasicIllegalArgumentException("Part name could not be found on bean type ''{0}''", type.getName());
+		assertArg(name != null, "Part name could not be found on bean type ''{0}''", type.getName());
 
 		return get(name, type);
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ExceptionUtils.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ExceptionUtils.java
index b4363d9..7e20153 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ExceptionUtils.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ExceptionUtils.java
@@ -127,4 +127,25 @@
 	public static UnsupportedOperationException unsupportedOperationException(String msg, Object...args) {
 		return unsupportedOperationException().message(msg, args).build();
 	}
+
+	/**
+	 * Creates a new builder for {@link IllegalArgumentException} objects.
+	 *
+	 * @return A new builder for {@link IllegalArgumentException} objects.
+	 */
+	public static ExceptionBuilder<IllegalArgumentException> illegalArgumentException() {
+		return new ExceptionBuilder<>(IllegalArgumentException.class);
+	}
+
+	/**
+	 * Creates a new {@link UnsupportedOperationException}.
+	 *
+	 * @param msg The exception message.  Can be <jk>null</jk>.
+	 * 	<br>If <jk>null</jk>, then the caused-by message is used if available.
+	 * @param args The exception message arguments.
+	 * @return A new {@link UnsupportedOperationException}.
+	 */
+	public static IllegalArgumentException illegalArgumentException(String msg, Object...args) {
+		return illegalArgumentException().message(msg, args).build();
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/SimpleMap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/SimpleMap.java
index f08ba1c..81fbbb1 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/SimpleMap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/SimpleMap.java
@@ -14,13 +14,10 @@
 

 import static org.apache.juneau.assertions.Assertions.*;

 import static org.apache.juneau.internal.ArrayUtils.*;

-import static org.apache.juneau.internal.ThrowableUtils.*;

-

+import static org.apache.juneau.internal.ExceptionUtils.*;

 import java.lang.reflect.*;

 import java.util.*;

 

-import org.apache.juneau.*;

-

 /**

  * An instance of a <c>Map</c> where the keys and values are simple arrays.

  *

@@ -52,15 +49,13 @@
 	public SimpleMap(K[] keys, V[] values) {

 		assertArgNotNull("keys", keys);

 		assertArgNotNull("values", values);

-		if (keys.length != values.length)

-			illegalArg("keys ''{0}'' and values ''{1}'' array lengths differ", keys.length, values.length);

+		assertArg(keys.length == values.length, "keys ''{0}'' and values ''{1}'' array lengths differ", keys.length, values.length);

 

 		this.keys = keys;

 		this.values = values;

 		entries = (SimpleMapEntry[]) Array.newInstance(SimpleMapEntry.class, keys.length);

 		for (int i = 0; i < keys.length; i++) {

-			if (keys[i] == null)

-				illegalArg("Keys array cannot contain a null value.");

+			assertArg(keys[i] != null, "Keys array cannot contain a null value.");

 			entries[i] = new SimpleMapEntry(i);

 	}

 	}

@@ -92,7 +87,7 @@
 				return v;

 			}

 		}

-		throw new BasicIllegalArgumentException("No key ''{0}'' defined in map", key);

+		throw illegalArgumentException("No key ''{0}'' defined in map", key);

 	}

 

 	final class SimpleMapEntry implements Map.Entry<K,V> {

diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/StringUtils.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/StringUtils.java
index b301391..e64c92d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/StringUtils.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/StringUtils.java
@@ -15,8 +15,6 @@
 import static org.apache.juneau.assertions.Assertions.*;

 import static org.apache.juneau.internal.ExceptionUtils.*;

 import static org.apache.juneau.internal.IOUtils.*;

-import static org.apache.juneau.internal.ThrowableUtils.*;

-

 import java.io.*;

 import java.lang.reflect.*;

 import java.math.*;

@@ -1422,8 +1420,7 @@
 

 		byte bIn[] = in.getBytes(IOUtils.UTF8);

 

-		if (bIn.length % 4 != 0)

-			illegalArg("Invalid BASE64 string length.  Must be multiple of 4.");

+		assertArg(bIn.length % 4 == 0, "Invalid BASE64 string length.  Must be multiple of 4.");

 

 		// Strip out any trailing '=' filler characters.

 		int inLength = bIn.length;

diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ThrowableUtils.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ThrowableUtils.java
index 836eadd..1ee8952 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ThrowableUtils.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ThrowableUtils.java
@@ -12,27 +12,12 @@
 // ***************************************************************************************************************************

 package org.apache.juneau.internal;

 

-import java.text.*;

-

-import org.apache.juneau.*;

-

 /**

  * Various utility methods for creating and working with throwables.

  */

 public class ThrowableUtils {

 

 	/**

-	 * Shortcut for calling <code><jk>new</jk> IllegalArgumentException(MessageFormat.<jsm>format</jsm>(msg, args));</code>

-	 *

-	 * @param msg The message of the IllegalArgumentException.

-	 * @param args Optional {@link MessageFormat}-style arguments.

-	 * @throws IllegalArgumentException Constructed exception.

-	 */

-	public static void illegalArg(String msg, Object...args) throws IllegalArgumentException {

-		throw new BasicIllegalArgumentException(msg, args);

-	}

-

-	/**

 	 * Same as {@link Throwable#getCause()} but searches the throwable chain for an exception of the specified type.

 	 *

 	 * @param c The throwable type to search for.

diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
index 8afd5b3..c7a54ef 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
@@ -14,6 +14,7 @@
 
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.reflect.ReflectFlags.*;
+import static org.apache.juneau.assertions.Assertions.*;
 import static org.apache.juneau.internal.ExceptionUtils.*;
 import static org.apache.juneau.internal.ObjectUtils.*;
 
@@ -2406,9 +2407,9 @@
 	 * @param pt The parameterized type class containing the parameterized type to resolve (e.g. <c>HashMap</c>).
 	 * @return The resolved real class.
 	 */
+	@SuppressWarnings("null")
 	public Class<?> getParameterType(int index, Class<?> pt) {
-		if (pt == null)
-			throw new BasicIllegalArgumentException("Parameterized type cannot be null");
+		assertArgNotNull("pt", pt);
 
 		// We need to make up a mapping of type names.
 		Map<Type,Type> typeMap = new HashMap<>();
@@ -2416,19 +2417,16 @@
 		while (pt != cc.getSuperclass()) {
 			extractTypes(typeMap, cc);
 			cc = cc.getSuperclass();
-			if (cc == null)
-				throw new BasicIllegalArgumentException("Class ''{0}'' is not a subclass of parameterized type ''{1}''", c.getSimpleName(), pt.getSimpleName());
+			assertArg(cc != null, "Class ''{0}'' is not a subclass of parameterized type ''{1}''", c.getSimpleName(), pt.getSimpleName());
 		}
 
 		Type gsc = cc.getGenericSuperclass();
 
-		if (! (gsc instanceof ParameterizedType))
-			throw new BasicIllegalArgumentException("Class ''{0}'' is not a parameterized type", pt.getSimpleName());
+		assertArg(gsc instanceof ParameterizedType, "Class ''{0}'' is not a parameterized type", pt.getSimpleName());
 
 		ParameterizedType cpt = (ParameterizedType)gsc;
 		Type[] atArgs = cpt.getActualTypeArguments();
-		if (index >= atArgs.length)
-			throw new BasicIllegalArgumentException("Invalid type index. index={0}, argsLength={1}", index, atArgs.length);
+		assertArg(index < atArgs.length, "Invalid type index. index={0}, argsLength={1}", index, atArgs.length);
 		Type actualType = cpt.getActualTypeArguments()[index];
 
 		if (typeMap.containsKey(actualType))
@@ -2464,7 +2462,7 @@
 		} else if (actualType instanceof ParameterizedType) {
 			return (Class<?>)((ParameterizedType)actualType).getRawType();
 		}
-		throw new BasicIllegalArgumentException("Could not resolve variable ''{0}'' to a type.", actualType.getTypeName());
+		throw illegalArgumentException("Could not resolve variable ''{0}'' to a type.", actualType.getTypeName());
 	}
 
 	private static boolean isInnerClass(GenericDeclaration od, GenericDeclaration id) {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/MapVar.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/MapVar.java
index ea863e7..26a938d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/MapVar.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/MapVar.java
@@ -12,9 +12,8 @@
 // ***************************************************************************************************************************

 package org.apache.juneau.svl;

 

+import static org.apache.juneau.assertions.Assertions.*;

 import static org.apache.juneau.internal.StringUtils.*;

-import static org.apache.juneau.internal.ThrowableUtils.*;

-

 import java.util.*;

 

 /**

@@ -37,8 +36,7 @@
 	 */

 	public MapVar(String name, Map m) {

 		super(name);

-		if (m == null)

-			illegalArg("''m'' parameter cannot be null.");

+		assertArgNotNull("m", m);

 		this.m = m;

 	}

 

diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/Var.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/Var.java
index a6d7c7f..3c08ab4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/Var.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/Var.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************

 package org.apache.juneau.svl;

 

-import static org.apache.juneau.internal.ThrowableUtils.*;

-

+import static org.apache.juneau.assertions.Assertions.*;

+import static org.apache.juneau.internal.ExceptionUtils.*;

 import java.io.*;

 

 /**

@@ -61,16 +61,15 @@
 	 * 	If <jk>false</jk>, then the {@link #resolve(VarResolverSession, String)} method is implemented.

 	 */

 	public Var(String name, boolean streamed) {

+		assertArgNotNull("name", name);

 		this.name = name;

 		this.streamed = streamed;

 

-		if (name == null)

-			illegalArg("Invalid var name.  Must consist of only uppercase and lowercase ASCII letters.");

-		else for (int i = 0; i < name.length(); i++) {

-		// Need to make sure only ASCII characters are used.

+		for (int i = 0; i < name.length(); i++) {

+			// Need to make sure only ASCII characters are used.

 			char c = name.charAt(i);

 			if (c < 'A' || c > 'z' || (c > 'Z' && c < 'a'))

-				illegalArg("Invalid var name.  Must consist of only uppercase and lowercase ASCII letters.");

+				throw illegalArgumentException("Invalid var name.  Must consist of only uppercase and lowercase ASCII letters.");

 		}

 	}

 

diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/IfVar.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/IfVar.java
index 8c11966..b993d80 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/IfVar.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/IfVar.java
@@ -12,8 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.svl.vars;
 
-import static org.apache.juneau.internal.ThrowableUtils.*;
-
+import static org.apache.juneau.assertions.Assertions.*;
 import org.apache.juneau.svl.*;
 
 /**
@@ -63,8 +62,7 @@
 
 	@Override /* MultipartVar */
 	public String resolve(VarResolverSession session, String[] args) {
-		if (args.length < 2 || args.length > 3)
-			illegalArg("Invalid number of arguments passed to $IF var.  Must be either $IF{booleanArg,thenValue} or $IF{booleanArg,thenValue,elseValue}");
+		assertArg(args.length >= 2 && args.length <= 3, "Invalid number of arguments passed to $IF var.  Must be either $IF{booleanArg,thenValue} or $IF{booleanArg,thenValue,elseValue}");
 
 		String b = args[0].toLowerCase();
 		if ("1".equals(b) || "t".equals(b) || "true".equals(b))
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/LenVar.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/LenVar.java
index 42d3757..23bb87b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/LenVar.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/LenVar.java
@@ -12,8 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.svl.vars;
 
-import static org.apache.juneau.internal.ThrowableUtils.*;
-
+import static org.apache.juneau.assertions.Assertions.*;
 import java.util.regex.*;
 
 import org.apache.juneau.svl.*;
@@ -59,8 +58,7 @@
 
 	@Override /* MultipartVar */
 	public String resolve(VarResolverSession session, String[] args) {
-		if (args.length > 2)
-			illegalArg("Invalid number of arguments passed to $LN var.  Must have 1 or 2 arguments.");
+		assertArg(args.length <= 2, "Invalid number of arguments passed to $LN var.  Must have 1 or 2 arguments.");
 
 		int len = 0;
 		String stringArg = args[0];
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/PatternExtractVar.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/PatternExtractVar.java
index a57253d..7ff703a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/PatternExtractVar.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/PatternExtractVar.java
@@ -12,8 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.svl.vars;
 
-import static org.apache.juneau.internal.ThrowableUtils.*;
-
+import static org.apache.juneau.assertions.Assertions.*;
 import java.util.regex.*;
 
 import org.apache.juneau.svl.*;
@@ -62,8 +61,7 @@
 
 	@Override /* MultipartVar */
 	public String resolve(VarResolverSession session, String[] args) {
-		if (args.length < 3)
-			illegalArg("Invalid number of arguments passed to $PE var.  Must have 3 arguments.");
+		assertArg(args.length == 3, "Invalid number of arguments passed to $PE var.  Must have 3 arguments.");
 
 		String stringArg = args[0];
 		String pattern = args[1];
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/PatternMatchVar.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/PatternMatchVar.java
index 9ea8f87..94c8c63 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/PatternMatchVar.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/PatternMatchVar.java
@@ -12,8 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.svl.vars;
 
-import static org.apache.juneau.internal.ThrowableUtils.*;
-
+import static org.apache.juneau.assertions.Assertions.*;
 import java.util.regex.*;
 
 import org.apache.juneau.svl.*;
@@ -63,8 +62,7 @@
 
 	@Override /* MultipartVar */
 	public String resolve(VarResolverSession session, String[] args) {
-		if (args.length < 2)
-			illegalArg("Invalid number of arguments passed to $PM var.  Must have 2 or more arguments.");
+		assertArg(args.length >= 2, "Invalid number of arguments passed to $PM var.  Must have 2 or more arguments.");
 
 		String stringArg = args[0];
 		String pattern = args[1];
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/PatternReplaceVar.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/PatternReplaceVar.java
index ad26f0e..2c5e6c6 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/PatternReplaceVar.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/PatternReplaceVar.java
@@ -12,8 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.svl.vars;
 
-import static org.apache.juneau.internal.ThrowableUtils.*;
-
+import static org.apache.juneau.assertions.Assertions.*;
 import org.apache.juneau.svl.*;
 
 /**
@@ -62,8 +61,7 @@
 
 	@Override /* MultipartVar */
 	public String resolve(VarResolverSession session, String[] args) {
-		if (args.length < 3)
-			illegalArg("Invalid number of arguments passed to $PR var.  Must have 3 or more arguments.");
+		assertArg(args.length >= 3, "Invalid number of arguments passed to $PR var.  Must have 3 or more arguments.");
 
 		String stringArg = args[0];
 		String pattern = args[1];
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/SubstringVar.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/SubstringVar.java
index c713d9a..537d728 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/SubstringVar.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/SubstringVar.java
@@ -12,8 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.svl.vars;
 
-import static org.apache.juneau.internal.ThrowableUtils.*;
-
+import static org.apache.juneau.assertions.Assertions.*;
 import org.apache.juneau.svl.*;
 
 /**
@@ -60,9 +59,7 @@
 
 	@Override /* MultipartVar */
 	public String resolve(VarResolverSession session, String[] args) {
-		if (args.length > 3)
-			illegalArg("Invalid number of arguments passed to $ST var.  Must have 1 or 2 arguments.");
-
+		assertArg(args.length >= 2 && args.length <= 3, "Invalid number of arguments passed to $ST var.  Must have 2 or 3 arguments.");
 
 		String stringArg = args[0];
 		String result = "";
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/SwitchVar.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/SwitchVar.java
index 98751fe..ec609e0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/SwitchVar.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/SwitchVar.java
@@ -12,8 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.svl.vars;
 
-import static org.apache.juneau.internal.ThrowableUtils.*;
-
+import static org.apache.juneau.assertions.Assertions.*;
 import java.util.regex.*;
 
 import org.apache.juneau.internal.*;
@@ -64,16 +63,14 @@
 
 	@Override /* MultipartVar */
 	public String resolve(VarResolverSession session, String[] args) {
-		if (args.length < 2)
-			illegalArg("Invalid number of arguments passed to $SW var.  Must have 2 or more arguments.");
+		assertArg(args.length >= 2, "Invalid number of arguments passed to $SW var.  Must have 2 or more arguments.");
 
 		String stringArg = args[0];
 		for (int i = 1; i < args.length; i++) {
 			String pattern = args[i];
 
 			String[] parts = StringUtils.split(pattern, ':', 2);
-			if (parts.length < 2)
-				illegalArg("Invalid arguments passed to $SW var.  Each case statement must contains 'pattern:value'.");
+			assertArg(parts.length >= 2, "Invalid arguments passed to $SW var.  Each case statement must contains 'pattern:value'.");
 
 			Pattern p = Pattern.compile(parts[0].replace("*", ".*").replace("?", "."));
 			if (p.matcher(stringArg).matches())
diff --git a/juneau-utest/src/test/java/org/apache/juneau/http/EntityTag_Test.java b/juneau-utest/src/test/java/org/apache/juneau/http/EntityTag_Test.java
index 1f4f4aa..50f7bdf 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/http/EntityTag_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/http/EntityTag_Test.java
@@ -73,7 +73,7 @@
 		assertThrown(()->new EntityTag("foo")).is("Invalid value for entity-tag: [foo]");
 		assertThrown(()->new EntityTag("\"")).is("Invalid value for entity-tag: [\"]");
 		assertThrown(()->new EntityTag("")).is("Invalid value for entity-tag: []");
-		assertThrown(()->new EntityTag(null)).is("Invalid value for entity-tag: [null]");
+		assertThrown(()->new EntityTag(null)).is("Argument 'value' cannot be null");
 		assertThrown(()->new EntityTag("\"a")).is("Invalid value for entity-tag: [\"a]");
 		assertThrown(()->new EntityTag("a\"")).is("Invalid value for entity-tag: [a\"]");
 		assertThrown(()->new EntityTag("W/\"")).is("Invalid value for entity-tag: [W/\"]");
diff --git a/juneau-utest/src/test/java/org/apache/juneau/reflection/ClassInfoTest.java b/juneau-utest/src/test/java/org/apache/juneau/reflection/ClassInfoTest.java
index ad6dbf1..8efcf30 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/reflection/ClassInfoTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/reflection/ClassInfoTest.java
@@ -2134,7 +2134,7 @@
 
 	@Test
 	public void getParameterType_nullParameterizedType() {
-		assertThrown(()->aClass.getParameterType(2, null)).is("Parameterized type cannot be null");
+		assertThrown(()->aClass.getParameterType(2, null)).is("Argument 'pt' cannot be null");
 	}
 
 	@Test