[ 
https://issues.apache.org/jira/browse/OLINGO-548?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Sven Kobler-Morris resolved OLINGO-548.
---------------------------------------
    Resolution: Not a Problem

Hi,

using a value typed DateTimeOffset as input for method year is not supported.

Per OData 2.0 Specification the input parameter type of the method year(param1) 
must be of type Edm.DateTime.

Details in capter 2.2.3.6.1.1.1 "Expression Construction and Evaluation Rules" 
method yearMethodCallExpression.

regards,
Sven



> Filter by year/day/month does not work for DateTimeOffset properties
> --------------------------------------------------------------------
>
>                 Key: OLINGO-548
>                 URL: https://issues.apache.org/jira/browse/OLINGO-548
>             Project: Olingo
>          Issue Type: Bug
>    Affects Versions: V2 1.2.0, V2 2.0.1
>            Reporter: M Carissimi
>
> Some filter functions don't work when applied to a DateTimeOffset property. 
> For example, the following filter is deemed as invalid by Olingo when 
> PRODUCTION_DATE is of type DateTimeOffset:
> $filter=year(PRODUCTION_DATE) eq 2013
> The same filter on the same entity works without issues when PRODUCTION_DATE 
> is of type DateTime.
> Can you please investigate this issue?
> Stack Trace:
> {code}
> SEVERE: org.apache.olingo.odata2.api.uri.UriSyntaxException: Invalid filter 
> expression: 'year(PRODUCTION_DATE) eq 2013'.
>       at 
> org.apache.olingo.odata2.core.uri.UriParserImpl.handleSystemQueryOptionFilter(UriParserImpl.java:595)
>       at 
> org.apache.olingo.odata2.core.uri.UriParserImpl.handleSystemQueryOptions(UriParserImpl.java:556)
>       at 
> org.apache.olingo.odata2.core.uri.UriParserImpl.parse(UriParserImpl.java:116)
>       at 
> org.apache.olingo.odata2.core.ODataRequestHandler.handle(ODataRequestHandler.java:107)
>       at 
> org.apache.olingo.odata2.core.rest.ODataSubLocator.handle(ODataSubLocator.java:155)
>       at 
> org.apache.olingo.odata2.core.rest.ODataSubLocator.handleGet(ODataSubLocator.java:56)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>       at java.lang.reflect.Method.invoke(Method.java:606)
>       at 
> org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:180)
>       at 
> org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96)
>       at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:198)
>       at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:261)
>       at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:100)
>       at 
> org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)
>       at 
> org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:94)
>       at 
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271)
>       at 
> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
>       at 
> org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239)
>       at 
> org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)
>       at 
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:203)
>       at 
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:137)
>       at 
> org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:158)
>       at 
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:243)
>       at 
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:168)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
>       at 
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:219)
>       at 
> org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
>       at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
>       at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
>       at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
>       at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
>       at 
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
>       at 
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
>       at 
> org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
>       at 
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
>       at 
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
>       at 
> org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
>       at 
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
>       at 
> com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
>       at 
> com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
>       at 
> com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
>       at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
>       at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
>       at 
> com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
>       at 
> com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
>       at 
> com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
>       at 
> com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
>       at 
> com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
>       at 
> com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
>       at 
> com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
>       at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
>       at 
> com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
>       at 
> com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
>       at java.lang.Thread.run(Thread.java:744)
> Caused by: 
> org.apache.olingo.odata2.api.uri.expression.ExpressionParserException: No 
> applicable method found for "year" at position 1 in "year(PRODUCTION_DATE) eq 
> 2013" for the specified argument types.
>       at 
> org.apache.olingo.odata2.core.uri.expression.FilterParserExceptionImpl.createMETHOD_WRONG_INPUT_TYPE(FilterParserExceptionImpl.java:172)
>       at 
> org.apache.olingo.odata2.core.uri.expression.FilterParserImpl.validateMethodTypes(FilterParserImpl.java:645)
>       at 
> org.apache.olingo.odata2.core.uri.expression.FilterParserImpl.readMethod(FilterParserImpl.java:395)
>       at 
> org.apache.olingo.odata2.core.uri.expression.FilterParserImpl.readElement(FilterParserImpl.java:358)
>       at 
> org.apache.olingo.odata2.core.uri.expression.FilterParserImpl.readElement(FilterParserImpl.java:306)
>       at 
> org.apache.olingo.odata2.core.uri.expression.FilterParserImpl.parseFilterString(FilterParserImpl.java:97)
>       at 
> org.apache.olingo.odata2.core.uri.UriParserImpl.handleSystemQueryOptionFilter(UriParserImpl.java:593)
>       ... 56 more
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to