Antonis Theocharides created OLINGO-410:
-------------------------------------------

             Summary: Function invocation with parameters using reflection 
fails due to reordering of the parameter list when parsing the metadata
                 Key: OLINGO-410
                 URL: https://issues.apache.org/jira/browse/OLINGO-410
             Project: Olingo
          Issue Type: Bug
          Components: odata2-core
    Affects Versions: V2 2.0.0
            Reporter: Antonis Theocharides


In order to call a function import method, reflection is used by getting the 
parameter list from the metadata and calling the Class.getMethod(String name, 
Class<?>... parameterTypes).
The problem occurs in EdmFunctionImportImplProv. 
buildFunctionImportParametersInternal method where a hashtable is used to 
temporarily store the parameter list and then retrieve them from the 
EdmFunctionImportImplProv.getParameterNames function. Using a hashtable to 
store them means that depending on the name of the parameter their order might 
change when retrieved by an iterator. In result. When getParameterNames is 
called and passed into the Class.getMethod method if the order of the 
parameters is wrong an exception is thrown because the signature we are looking 
for does not exist.
Proposed solution might be
@Override
  public List<String> getParameterNames() throws EdmException {
    if (parametersList == null) {
      parametersList = new ArrayList<String>();

      if(functionImport.getParameters() != null){
        for (FunctionImportParameter functionImportParameter : 
functionImport.getParameters()) {
          parametersList.add(functionImportParameter.getName());
        }
      }
    }

    return parametersList;
  }






--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to