List of usage examples for org.springframework.web.bind.support WebArgumentResolver getClass
@HotSpotIntrinsicCandidate public final native Class<?> getClass();
From source file:ch.ralscha.extdirectspring.util.ParametersResolver.java
@SuppressWarnings("unchecked") public Object[] resolveParameters(HttpServletRequest request, HttpServletResponse response, Locale locale, ExtDirectRequest directRequest, MethodInfo methodInfo) throws Exception { int jsonParamIndex = 0; Map<String, Object> remainingParameters = null; ExtDirectStoreReadRequest extDirectStoreReadRequest = null; List<Object> directStoreModifyRecords = null; Class<?> directStoreEntryClass; if (methodInfo.isType(ExtDirectMethodType.STORE_READ) || methodInfo.isType(ExtDirectMethodType.FORM_LOAD) || methodInfo.isType(ExtDirectMethodType.TREE_LOAD)) { List<Object> data = (List<Object>) directRequest.getData(); if (data != null && data.size() > 0) { if (methodInfo.isType(ExtDirectMethodType.STORE_READ)) { extDirectStoreReadRequest = new ExtDirectStoreReadRequest(); remainingParameters = fillReadRequestFromMap(extDirectStoreReadRequest, (Map<String, Object>) data.get(0)); } else { remainingParameters = (Map<String, Object>) data.get(0); }/*from w w w. j a v a 2s. c o m*/ jsonParamIndex = 1; } } else if (methodInfo.isType(ExtDirectMethodType.STORE_MODIFY)) { directStoreEntryClass = methodInfo.getCollectionType(); List<Object> data = (List<Object>) directRequest.getData(); if (directStoreEntryClass != null && data != null && data.size() > 0) { Object obj = data.get(0); if (obj instanceof List) { directStoreModifyRecords = convertObjectEntriesToType((List<Object>) obj, directStoreEntryClass); } else { Map<String, Object> jsonData = (Map<String, Object>) obj; Object records = jsonData.get("records"); if (records != null) { if (records instanceof List) { directStoreModifyRecords = convertObjectEntriesToType((List<Object>) records, directStoreEntryClass); } else { directStoreModifyRecords = new ArrayList<Object>(); directStoreModifyRecords .add(this.jsonHandler.convertValue(records, directStoreEntryClass)); } remainingParameters = new HashMap<String, Object>(jsonData); remainingParameters.remove("records"); } else { directStoreModifyRecords = new ArrayList<Object>(); directStoreModifyRecords .add(this.jsonHandler.convertValue(jsonData, directStoreEntryClass)); } } jsonParamIndex = 1; } else if (data != null && data.size() > 0) { Object obj = data.get(0); if (obj instanceof Map) { remainingParameters = new HashMap<String, Object>((Map<String, Object>) obj); remainingParameters.remove("records"); } } } else if (methodInfo.isType(ExtDirectMethodType.SIMPLE_NAMED)) { Map<String, Object> data = (Map<String, Object>) directRequest.getData(); if (data != null && data.size() > 0) { remainingParameters = new HashMap<String, Object>(data); } } else if (methodInfo.isType(ExtDirectMethodType.POLL)) { throw new IllegalStateException("this controller does not handle poll calls"); } else if (methodInfo.isType(ExtDirectMethodType.FORM_POST)) { throw new IllegalStateException("this controller does not handle form posts"); } else if (methodInfo.isType(ExtDirectMethodType.FORM_POST_JSON)) { List<Object> data = (List<Object>) directRequest.getData(); if (data != null && data.size() > 0) { Object obj = data.get(0); if (obj instanceof Map) { remainingParameters = new HashMap<String, Object>((Map<String, Object>) obj); remainingParameters.remove("records"); } } } List<ParameterInfo> methodParameters = methodInfo.getParameters(); Object[] parameters = null; if (!methodParameters.isEmpty()) { parameters = new Object[methodParameters.size()]; for (int paramIndex = 0; paramIndex < methodParameters.size(); paramIndex++) { ParameterInfo methodParameter = methodParameters.get(paramIndex); if (methodParameter.isSupportedParameter()) { parameters[paramIndex] = SupportedParameters.resolveParameter(methodParameter.getType(), request, response, locale, directRequest); } else if (ExtDirectStoreReadRequest.class.isAssignableFrom(methodParameter.getType())) { parameters[paramIndex] = extDirectStoreReadRequest; } else if (directStoreModifyRecords != null && methodParameter.getCollectionType() != null) { parameters[paramIndex] = directStoreModifyRecords; } else if (methodParameter.hasRequestParamAnnotation()) { parameters[paramIndex] = resolveRequestParam(null, remainingParameters, methodParameter); } else if (methodParameter.hasMetadataParamAnnotation()) { parameters[paramIndex] = resolveRequestParam(null, directRequest.getMetadata(), methodParameter); } else if (methodParameter.hasRequestHeaderAnnotation()) { parameters[paramIndex] = resolveRequestHeader(request, methodParameter); } else if (methodParameter.hasCookieValueAnnotation()) { parameters[paramIndex] = resolveCookieValue(request, methodParameter); } else if (methodParameter.hasAuthenticationPrincipalAnnotation()) { parameters[paramIndex] = resolveAuthenticationPrincipal(methodParameter); } else if (remainingParameters != null && remainingParameters.containsKey(methodParameter.getName())) { Object jsonValue = remainingParameters.get(methodParameter.getName()); parameters[paramIndex] = convertValue(jsonValue, methodParameter); } else if (directRequest.getData() != null && directRequest.getData() instanceof List && ((List<Object>) directRequest.getData()).size() > jsonParamIndex) { Object jsonValue = ((List<Object>) directRequest.getData()).get(jsonParamIndex); parameters[paramIndex] = convertValue(jsonValue, methodParameter); jsonParamIndex++; } else { if (methodInfo.isType(ExtDirectMethodType.SIMPLE_NAMED)) { if (Map.class.isAssignableFrom(methodParameter.getType())) { parameters[paramIndex] = remainingParameters; continue; } else if (methodParameter.isJavaUtilOptional()) { parameters[paramIndex] = javaUtilOptionalEmpty; continue; } } log.info("WebResolvers size:" + this.webArgumentResolvers.size()); log.info("ParamIndex:" + paramIndex); log.info("Request params size:" + request.getParameterMap().isEmpty()); log.info("Request params names:" + request.getParameterMap().keySet()); log.info("Direct Request:" + directRequest.toString()); MethodParameter p = new MethodParameter(methodInfo.getMethod(), paramIndex); request.setAttribute("directRequest", directRequest); request.setAttribute("extDirectStoreReadRequest", extDirectStoreReadRequest); ServletWebRequest r = new ServletWebRequest(request); Object result = WebArgumentResolver.UNRESOLVED; for (WebArgumentResolver resolver : this.webArgumentResolvers) { log.info("Resolving with:" + resolver.getClass().getCanonicalName()); result = resolver.resolveArgument(p, r); if (result != WebArgumentResolver.UNRESOLVED) { log.info("Resolved by:" + resolver.getClass().getCanonicalName()); parameters[paramIndex] = result; break; } } if (result == WebArgumentResolver.UNRESOLVED) { throw new IllegalArgumentException( "Error, parameter mismatch. Please check your remoting method signature to ensure all supported parameters types are used."); } } } } return parameters; }