[
https://issues.apache.org/jira/browse/OLINGO-548?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14304904#comment-14304904
]
M Carissimi commented on OLINGO-548:
------------------------------------
Hello Sven
thank you for the explanation. We currently use DateTime properties but we
would like to start using DateTimeOffset properties because DateTime is no
longer supported in OData 4.
Is there any way to relax this restriction in Olingo? We implement our own
Producer class and we are capable of serving filter requests with
year/month/day on a DateTime or DateTimeOffset property.
Alternatively, is there an equivalent in version 2 to the date() function that
allows to cast a DateTimeOffset to a Date in version 4?
Cheers
Michele
> 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)