List of usage examples for java.lang.reflect Constructor getParameters
public Parameter[] getParameters()
From source file:lite.flow.runtime.kiss.ComponentUtil.java
private static Object[] buildConstructorArgs(Constructor<?> constructor, Map<String, Object> resources, Map<String, Object> parameters) { requireNonNull(resources, "ComponentUtil.buildConstructorArgs resources should not be null"); requireNonNull(parameters, "ComponentUtil.buildConstructorArgs parameters should not be null"); constructor.getParameterTypes();//from ww w .j ava 2s. co m Parameter[] consParameters = constructor.getParameters(); if (consParameters == null || consParameters.length < 1) return null; Object[] args = new Object[consParameters.length]; for (int i = 0; i < consParameters.length; i++) { Parameter consParam = consParameters[i]; Object consParamvalue = getConsParamvalue(consParam, resources, parameters); args[i] = consParamvalue; } return args; }
From source file:ca.oson.json.util.ObjectUtil.java
public static List<String> getParameterNames(Constructor<?> constructor) throws IOException { List<String> names = getParameterNamesBytecode(constructor); if (names == null) { names = Arrays.asList(getParameterNames(constructor.getParameters())); }/*from www .j a va 2s. c om*/ return names; }
From source file:org.opensingular.flow.core.ProcessDefinition.java
@Nonnull private I newUnbindedInstance() { I novo;// ww w . j a v a 2 s. c om try { for (Constructor<?> c : getProcessInstanceClass().getDeclaredConstructors()) { if (c.getParameters().length == 0) { c.setAccessible(true); novo = (I) c.newInstance(); novo.setProcessDefinition(this); return novo; } } } catch (Exception e) { throw new SingularFlowException(e.getMessage(), e); } throw new SingularFlowException( createErrorMsg( "Construtor sem parametros ausente: " + getProcessInstanceClass().getSimpleName() + "()"), this); }
From source file:ca.oson.json.Oson.java
<T> T newInstance(Map<String, Object> map, Class<T> valueType) {
InstanceCreator creator = getTypeAdapter(valueType);
if (creator != null) {
return (T) creator.createInstance(valueType);
}// w ww .ja v a2s .co m
T obj = null;
if (valueType != null) {
obj = (T) getDefaultValue(valueType);
if (obj != null) {
return obj;
}
}
if (map == null) {
return null;
}
// @JsonTypeInfo(use = JsonTypeInfo.Id.MINIMAL_CLASS, include = As.PROPERTY, property = "@class")
//@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = As.PROPERTY, property = "@class")
String JsonClassType = null;
if (valueType != null) {
if (getAnnotationSupport()) {
for (Annotation annotation : valueType.getAnnotations()) {
if (annotation instanceof JsonTypeInfo) {
JsonTypeInfo jsonTypeInfo = (JsonTypeInfo) annotation;
JsonTypeInfo.Id use = jsonTypeInfo.use();
JsonTypeInfo.As as = jsonTypeInfo.include();
if ((use == JsonTypeInfo.Id.MINIMAL_CLASS || use == JsonTypeInfo.Id.CLASS)
&& as == As.PROPERTY) {
JsonClassType = jsonTypeInfo.property();
}
}
}
}
}
if (JsonClassType == null) {
JsonClassType = getJsonClassType();
}
String className = null;
if (map.containsKey(JsonClassType)) {
className = map.get(JsonClassType).toString();
}
Class<T> classType = getClassType(className);
// && (valueType == null || valueType.isAssignableFrom(classType) || Map.class.isAssignableFrom(valueType))
if (classType != null) {
valueType = classType;
}
if (valueType == null) {
return (T) map; // or null, which is better?
}
Constructor<?>[] constructors = null;
Class implClass = null;
if (valueType.isInterface() || Modifier.isAbstract(valueType.getModifiers())) {
implClass = DeSerializerUtil.implementingClass(valueType.getName());
}
if (implClass != null) {
constructors = implClass.getDeclaredConstructors();
} else {
constructors = valueType.getDeclaredConstructors();//.getConstructors();
}
Object singleMapValue = null;
Class singleMapValueType = null;
if (map.size() == 1) {
singleMapValue = map.get(valueType.getName());
if (singleMapValue != null) {
singleMapValueType = singleMapValue.getClass();
if (singleMapValueType == String.class) {
singleMapValue = StringUtil.unquote(singleMapValue.toString(), isEscapeHtml());
}
try {
if (valueType == Locale.class) {
Constructor constructor = null;
String[] parts = ((String) singleMapValue).split("_");
if (parts.length == 1) {
constructor = valueType.getConstructor(String.class);
constructor.setAccessible(true);
obj = (T) constructor.newInstance(singleMapValue);
} else if (parts.length == 2) {
constructor = valueType.getConstructor(String.class, String.class);
constructor.setAccessible(true);
obj = (T) constructor.newInstance(parts);
} else if (parts.length == 3) {
constructor = valueType.getConstructor(String.class, String.class, String.class);
constructor.setAccessible(true);
obj = (T) constructor.newInstance(parts);
}
if (obj != null) {
return obj;
}
}
} catch (Exception e) {
}
Map<Class, Constructor> cmaps = new HashMap<>();
for (Constructor constructor : constructors) {
//Class[] parameterTypes = constructor.getParameterTypes();
int parameterCount = constructor.getParameterCount();
if (parameterCount == 1) {
Class[] types = constructor.getParameterTypes();
cmaps.put(types[0], constructor);
}
}
if (cmaps.size() > 0) {
Constructor constructor = null;
if ((cmaps.containsKey(Boolean.class) || cmaps.containsKey(boolean.class))
&& BooleanUtil.isBoolean(singleMapValue.toString())) {
constructor = cmaps.get(Boolean.class);
if (constructor == null) {
constructor = cmaps.get(boolean.class);
}
if (constructor != null) {
try {
constructor.setAccessible(true);
obj = (T) constructor
.newInstance(BooleanUtil.string2Boolean(singleMapValue.toString()));
if (obj != null) {
return obj;
}
} catch (Exception e) {
}
}
} else if (StringUtil.isNumeric(singleMapValue.toString())) {
Class[] classes = new Class[] { int.class, Integer.class, long.class, Long.class,
double.class, Double.class, Byte.class, byte.class, Short.class, short.class,
Float.class, float.class, BigDecimal.class, BigInteger.class, AtomicInteger.class,
AtomicLong.class, Number.class };
for (Class cls : classes) {
constructor = cmaps.get(cls);
if (constructor != null) {
try {
obj = (T) constructor.newInstance(NumberUtil.getNumber(singleMapValue, cls));
if (obj != null) {
return obj;
}
} catch (Exception e) {
}
}
}
} else if (StringUtil.isArrayOrList(singleMapValue.toString())
|| singleMapValue.getClass().isArray()
|| Collection.class.isAssignableFrom(singleMapValue.getClass())) {
for (Entry<Class, Constructor> entry : cmaps.entrySet()) {
Class cls = entry.getKey();
constructor = entry.getValue();
if (cls.isArray() || Collection.class.isAssignableFrom(cls)) {
Object listObject = null;
if (singleMapValue instanceof String) {
JSONArray objArray = new JSONArray(singleMapValue.toString());
listObject = (List) fromJsonMap(objArray);
} else {
listObject = singleMapValue;
}
FieldData objectDTO = new FieldData(listObject, cls, true);
listObject = json2Object(objectDTO);
if (listObject != null) {
try {
obj = (T) constructor.newInstance(listObject);
if (obj != null) {
return obj;
}
} catch (Exception e) {
}
}
}
}
}
for (Entry<Class, Constructor> entry : cmaps.entrySet()) {
Class cls = entry.getKey();
constructor = entry.getValue();
try {
obj = (T) constructor.newInstance(singleMapValue);
if (obj != null) {
return obj;
}
} catch (Exception e) {
}
}
}
}
}
if (implClass != null) {
valueType = implClass;
}
try {
obj = valueType.newInstance();
if (obj != null) {
return setSingleMapValue(obj, valueType, singleMapValue, singleMapValueType);
}
} catch (InstantiationException | IllegalAccessException e) {
//e.printStackTrace();
}
///*
for (Constructor constructor : constructors) {
//Class[] parameterTypes = constructor.getParameterTypes();
int parameterCount = constructor.getParameterCount();
if (parameterCount > 0) {
constructor.setAccessible(true);
Annotation[] annotations = constructor.getDeclaredAnnotations(); // getAnnotations();
for (Annotation annotation : annotations) {
boolean isJsonCreator = false;
if (annotation instanceof JsonCreator) {
isJsonCreator = true;
} else if (annotation instanceof ca.oson.json.annotation.FieldMapper) {
ca.oson.json.annotation.FieldMapper fieldMapper = (ca.oson.json.annotation.FieldMapper) annotation;
if (fieldMapper.jsonCreator() == BOOLEAN.TRUE) {
isJsonCreator = true;
}
}
if (isJsonCreator) {
Parameter[] parameters = constructor.getParameters();
String[] parameterNames = ObjectUtil.getParameterNames(parameters);
//parameterCount = parameters.length;
Object[] parameterValues = new Object[parameterCount];
int i = 0;
for (String parameterName : parameterNames) {
parameterValues[i] = getParameterValue(map, valueType, parameterName,
parameters[i].getType());
i++;
}
try {
obj = (T) constructor.newInstance(parameterValues);
if (obj != null) {
return setSingleMapValue(obj, valueType, singleMapValue, singleMapValueType);
}
} catch (InstantiationException | IllegalAccessException | IllegalArgumentException
| InvocationTargetException e) {
//e.printStackTrace();
}
}
}
} else {
try {
constructor.setAccessible(true);
obj = (T) constructor.newInstance();
if (obj != null) {
return setSingleMapValue(obj, valueType, singleMapValue, singleMapValueType);
}
} catch (InstantiationException | IllegalAccessException | IllegalArgumentException
| InvocationTargetException e) {
//e.printStackTrace();
}
}
}
//*/
// try again
for (Constructor constructor : constructors) {
int parameterCount = constructor.getParameterCount();
if (parameterCount > 0) {
constructor.setAccessible(true);
try {
List<String> parameterNames = ObjectUtil.getParameterNames(constructor);
if (parameterNames != null && parameterNames.size() > 0) {
Class[] parameterTypes = constructor.getParameterTypes();
int length = parameterTypes.length;
if (length == parameterNames.size()) {
Object[] parameterValues = new Object[length];
Object parameterValue;
for (int i = 0; i < length; i++) {
parameterValues[i] = getParameterValue(map, valueType, parameterNames.get(i),
parameterTypes[i]);
}
try {
obj = (T) constructor.newInstance(parameterValues);
if (obj != null) {
return setSingleMapValue(obj, valueType, singleMapValue, singleMapValueType);
}
} catch (InstantiationException | IllegalAccessException | IllegalArgumentException
| InvocationTargetException e) {
//e.printStackTrace();
}
}
}
} catch (IOException e1) {
// e1.printStackTrace();
}
}
}
// try more
for (Constructor constructor : constructors) {
int parameterCount = constructor.getParameterCount();
if (parameterCount > 0) {
constructor.setAccessible(true);
Class[] parameterTypes = constructor.getParameterTypes();
List<String> parameterNames;
try {
parameterNames = ObjectUtil.getParameterNames(constructor);
if (parameterNames != null) {
int length = parameterTypes.length;
if (length > parameterNames.size()) {
length = parameterNames.size();
}
Object[] parameterValues = new Object[length];
for (int i = 0; i < length; i++) {
parameterValues[i] = getParameterValue(map, valueType, parameterNames.get(i),
parameterTypes[i]);
}
obj = (T) constructor.newInstance(parameterValues);
if (obj != null) {
return setSingleMapValue(obj, valueType, singleMapValue, singleMapValueType);
}
}
} catch (InstantiationException | IllegalAccessException | IllegalArgumentException
| InvocationTargetException | IOException e) {
//e.printStackTrace();
}
}
}
// try more
try {
Method[] methods = valueType.getMethods(); // .getMethod("getInstance", null);
List<Method> methodList = new ArrayList<>();
if (methods != null) {
for (Method method : methods) {
String methodName = method.getName();
if (methodName.equals("getInstance") || methodName.equals("newInstance")
|| methodName.equals("createInstance") || methodName.equals("factory")) {
Class returnType = method.getReturnType();
if (valueType.isAssignableFrom(returnType) && Modifier.isStatic(method.getModifiers())) {
int parameterCount = method.getParameterCount();
if (parameterCount == 0) {
try {
obj = ObjectUtil.getMethodValue(null, method);
if (obj != null) {
return setSingleMapValue(obj, valueType, singleMapValue,
singleMapValueType);
}
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
}
} else {
methodList.add(method);
}
}
}
}
for (Method method : methodList) {
try {
int parameterCount = method.getParameterCount();
Object[] parameterValues = new Object[parameterCount];
Object parameterValue;
int i = 0;
Class[] parameterTypes = method.getParameterTypes();
String[] parameterNames = ObjectUtil.getParameterNames(method);
if (parameterCount == 1 && valueType != null && singleMapValue != null
&& singleMapValueType != null) {
if (ObjectUtil.isSameDataType(parameterTypes[0], singleMapValueType)) {
try {
obj = ObjectUtil.getMethodValue(null, method, singleMapValue);
if (obj != null) {
return obj;
}
} catch (IllegalArgumentException ex) {
//ex.printStackTrace();
}
}
} else if (parameterNames != null && parameterNames.length == parameterCount) {
for (String parameterName : ObjectUtil.getParameterNames(method)) {
parameterValues[i] = getParameterValue(map, valueType, parameterName,
parameterTypes[i]);
i++;
}
} else {
// try annotation
Parameter[] parameters = method.getParameters();
parameterNames = ObjectUtil.getParameterNames(parameters);
parameterCount = parameters.length;
parameterValues = new Object[parameterCount];
i = 0;
for (String parameterName : parameterNames) {
parameterValues[i] = getParameterValue(map, valueType, parameterName,
parameterTypes[i]);
i++;
}
}
obj = ObjectUtil.getMethodValue(null, method, parameterValues);
if (obj != null) {
return setSingleMapValue(obj, valueType, singleMapValue, singleMapValueType);
}
} catch (IOException | IllegalArgumentException e) {
//e.printStackTrace();
}
}
}
} catch (SecurityException e) {
// e.printStackTrace();
}
// try all static methods, if the return type is correct, get it as the final object
Method[] methods = valueType.getDeclaredMethods();
for (Method method : methods) {
if (Modifier.isStatic(method.getModifiers())) {
Class returnType = method.getReturnType();
if (valueType.isAssignableFrom(returnType)) {
try {
Object[] parameterValues = null;
int parameterCount = method.getParameterCount();
if (parameterCount > 0) {
if (parameterCount == 1 && map.size() == 1 && singleMapValue != null
&& singleMapValueType != null) {
if (ObjectUtil.isSameDataType(method.getParameterTypes()[0], singleMapValueType)) {
obj = ObjectUtil.getMethodValue(null, method, singleMapValueType);
if (obj != null) {
return obj;
}
}
}
parameterValues = new Object[parameterCount];
Object parameterValue;
int i = 0;
Class[] parameterTypes = method.getParameterTypes();
String[] parameterNames = ObjectUtil.getParameterNames(method);
if (parameterNames != null && parameterNames.length == parameterCount) {
for (String parameterName : ObjectUtil.getParameterNames(method)) {
parameterValues[i] = getParameterValue(map, valueType, parameterName,
parameterTypes[i]);
i++;
}
} else {
// try annotation
Parameter[] parameters = method.getParameters();
parameterNames = ObjectUtil.getParameterNames(parameters);
parameterCount = parameters.length;
parameterValues = new Object[parameterCount];
i = 0;
for (String parameterName : parameterNames) {
parameterValues[i] = getParameterValue(map, valueType, parameterName,
parameterTypes[i]);
i++;
}
}
}
obj = ObjectUtil.getMethodValue(obj, method, parameterValues);
if (obj != null) {
return setSingleMapValue(obj, valueType, singleMapValue, singleMapValueType);
}
} catch (IOException | IllegalArgumentException e) {
//e.printStackTrace();
}
}
}
}
return null;
}