You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@olingo.apache.org by "Michael Bolz (JIRA)" <ji...@apache.org> on 2014/09/01 09:19:20 UTC

[jira] [Commented] (OLINGO-410) Function invocation with parameters using reflection fails due to reordering of the parameter list when parsing the metadata

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

Michael Bolz commented on OLINGO-410:
-------------------------------------

Hello [~atheohar],

for OData Version 2 it is not specified that the *Function Import Parameters* must be ordered.
As example for the according [URI|http://www.odata.org/documentation/odata-version-2-0/uri-conventions#AddressingServiceOperations] it is specified as *insignificant*.

bq. ParamName: The name of a parameter accepted by the Service Operation. If the Service Operation accepts multiple parameters, the order of the parameters in the query string of the URI is insignificant.

But also I think your suggestion for change the {{getParameterNames()}} is reasonable.
So I changed it and pushed it into [this branch|https://git-wip-us.apache.org/repos/asf?p=olingo-odata2.git;a=shortlog;h=refs/heads/OLINGO-410_SortedFunctionImportParameterNames].
Can you please give feedback if it works for you before I push it into the master branch.

Thanks and kind regards,
Michael


> 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
>
> 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)