in core/src/main/java/org/apache/commons/jelly/tags/core/ArgTag.java [205:267]
public void doTag(XMLOutput output) throws JellyTagException {
invokeBody(output);
Class klass = null;
if ("boolean".equals(typeString)) {
klass = Boolean.TYPE;
assertNotNull(value);
} else if ("byte".equals(typeString)) {
klass = Byte.TYPE;
assertNotNull(value);
} else if ("short".equals(typeString)) {
klass = Short.TYPE;
assertNotNull(value);
} else if ("int".equals(typeString)) {
klass = Integer.TYPE;
assertNotNull(value);
} else if ("char".equals(typeString)) {
klass = Character.TYPE;
assertNotNull(value);
} else if ("float".equals(typeString)) {
klass = Float.TYPE;
assertNotNull(value);
} else if ("long".equals(typeString)) {
klass = Long.TYPE;
assertNotNull(value);
} else if ("double".equals(typeString)) {
klass = Double.TYPE;
assertNotNull(value);
} else if (null != typeString) {
try {
// klass = getClassLoader().loadClass(typeString);
// JELLY-274: rather use the three args static class-load-method
klass = Class.forName(typeString, false, getClassLoader());
} catch (ClassNotFoundException e) {
throw new JellyTagException(e);
}
} else if (null == value) { // and (by construction) null == typeString
klass = Object.class;
} else {
klass = value.getClass();
}
if (!isInstanceOf(klass, value)) {
if (klass.equals(Class.class)) {
try {
// value = getClassLoader().loadClass((String) value);
// JELLY-274: rather use three-args class.forName
value = Class.forName((String) value, false, getClassLoader());
} catch (ClassNotFoundException e) {
throw new JellyTagException(e);
}
} else {
value = convert(klass, value);
}
}
ArgTagParent parent = (ArgTagParent)findAncestorWithClass(ArgTagParent.class);
if (null == parent) {
throw new JellyTagException("This tag must be enclosed inside an ArgTagParent implementation (for example, <new> or <invoke>)");
} else {
parent.addArgument(klass, value);
}
}