[ 
https://issues.apache.org/jira/browse/OLINGO-410?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14229234#comment-14229234
 ] 

Luke Adams commented on OLINGO-410:
-----------------------------------

Using 2.0.1

I think this same situation is in ODataRequestImpl where query parameter order 
is changing at allQueryParameters on line 179. 

I can open a separate Jira issue if needed. 

> 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
>            Assignee: Michael Bolz
>             Fix For: V2 2.0.1
>
>
> 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.3.4#6332)

Reply via email to