简体   繁体   English

如何解决 olingo odata V2 $filter 错误?

[英]How can I solve olingo odata V2 $filter error?

I have an olingo OData V2 service, which is working almost perfect.我有一个 olingo OData V2 服务,它几乎完美运行。 CRUD methods are tested from POSTMAN. CRUD 方法是从 POSTMAN 测试的。 It is running on Tomcat, the db is MySQL and the project is in Eclipse.它在 Tomcat 上运行,数据库是 MySQL,项目在 Eclipse 中。

This is the service's code:这是服务的代码:

package main;

import org.apache.olingo.odata2.jpa.processor.ref.factory.JPAEntityManagerFactory;
import org.apache.olingo.odata2.processor.api.jpa.ODataJPAContext;
import org.apache.olingo.odata2.processor.api.jpa.ODataJPAServiceFactory;
import org.apache.olingo.odata2.processor.api.jpa.exception.ODataJPARuntimeException;

public class ODataServiceFromGenerator extends ODataJPAServiceFactory {  
      private static final String PERSISTENCE_UNIT_NAME = "cars";

    @Override
    public ODataJPAContext initializeODataJPAContext() {

        ODataJPAContext oDataJPAContext;
        try {
            oDataJPAContext = getODataJPAContext();
            oDataJPAContext.setEntityManagerFactory(JPAEntityManagerFactory
                    .getEntityManagerFactory(PERSISTENCE_UNIT_NAME));
            oDataJPAContext.setPersistenceUnitName(PERSISTENCE_UNIT_NAME);
            return oDataJPAContext;
        } catch (ODataJPARuntimeException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }

  }

}

I can reach the metadata in this url: http://localhost:8080/GeneratorTry/cars.svc/$metadata我可以在这个 url 中访问元数据:http://localhost:8080/GeneratorTry/cars.svc/$metadata

When I try to filter one of my EntitySet ( http://localhost:8080/GeneratorTry/cars.svc/Vendors?$filter=startswith(Mobile,'+36') ) I get this error:当我尝试过滤我的 EntitySet 之一( http://localhost:8080/GeneratorTry/cars.svc/Vendors?$filter=startswith(Mobile,'+36') )时,我收到此错误:

HTTP Status 500 – Internal Server Error HTTP 状态 500 – 内部服务器错误

Type Exception Report类型异常报告

Message org.apache.cxf.interceptor.Fault: org.apache.olingo.odata2.core.uri.expression.FilterParserImpl消息org.apache.cxf.interceptor.Fault: org.apache.olingo.odata2.core.uri.expression.FilterParserImpl

Description The server encountered an unexpected condition that prevented it from fulfilling the request.说明服务器遇到了阻止其完成请求的意外情况。

Exception例外

java.lang.RuntimeException: java.lang.RuntimeException:\norg.apache.cxf.interceptor.Fault: org.apache.cxf.interceptor.Fault:\norg.apache.olingo.odata2.core.uri.expression.FilterParserImpl org.apache.olingo.odata2.core.uri.expression.FilterParserImpl\n  org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:116) org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:116)\n  org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:331) org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:331)\n  org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)\n  org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239) org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239)\n  org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223) org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)\n  org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:203) org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:203)\n  org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:137) org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:137)\n  org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:158) org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:158)\n  org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:243) org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:243)\n  org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:168) org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:168)\n  javax.servlet.http.HttpServlet.service(HttpServlet.java:634) javax.servlet.http.HttpServlet.service(HttpServlet.java:634)\n  org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:219) org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:219)\n  org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n

Root Cause根本原因

org.apache.cxf.interceptor.Fault: org.apache.cxf.interceptor.Fault:\norg.apache.olingo.odata2.core.uri.expression.FilterParserImpl org.apache.olingo.odata2.core.uri.expression.FilterParserImpl\n  org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:162) org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:162)\n  org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:128) org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:128)\n  org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:198) org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:198)\n  org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:261) org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:261)\n  org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:100) org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:100)\n  org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58) org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)\n  org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:94) org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:94)\n  org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271) org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271)\n  org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)\n  org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239) org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239)\n  org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223) org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)\n  org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:203) org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:203)\n  org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:137) org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:137)\n  org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:158) org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:158)\n  org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:243) org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:243)\n  org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:168) org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:168)\n  javax.servlet.http.HttpServlet.service(HttpServlet.java:634) javax.servlet.http.HttpServlet.service(HttpServlet.java:634)\n  org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:219) org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:219)\n  org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n

Root Cause根本原因

java.lang.NoClassDefFoundError: java.lang.NoClassDefFoundError:\norg.apache.olingo.odata2.core.uri.expression.FilterParserImpl org.apache.olingo.odata2.core.uri.expression.FilterParserImpl\n  org.apache.olingo.odata2.core.uri.UriParserImpl.parseOrderByString(UriParserImpl.java:848) org.apache.olingo.odata2.core.uri.UriParserImpl.parseOrderByString(UriParserImpl.java:848)\n  org.apache.olingo.odata2.core.uri.UriParserImpl.handleSystemQueryOptionOrderBy(UriParserImpl.java:604) org.apache.olingo.odata2.core.uri.UriParserImpl.handleSystemQueryOptionOrderBy(UriParserImpl.java:604)\n  org.apache.olingo.odata2.core.uri.UriParserImpl.handleSystemQueryOptions(UriParserImpl.java:560) org.apache.olingo.odata2.core.uri.UriParserImpl.handleSystemQueryOptions(UriParserImpl.java:560)\n  org.apache.olingo.odata2.core.uri.UriParserImpl.parse(UriParserImpl.java:114) org.apache.olingo.odata2.core.uri.UriParserImpl.parse(UriParserImpl.java:114)\n  org.apache.olingo.odata2.core.ODataRequestHandler.handle(ODataRequestHandler.java:101) org.apache.olingo.odata2.core.ODataRequestHandler.handle(ODataRequestHandler.java:101)\n  org.apache.olingo.odata2.core.rest.ODataSubLocator.handle(ODataSubLocator.java:148) org.apache.olingo.odata2.core.rest.ODataSubLocator.handle(ODataSubLocator.java:148)\n  org.apache.olingo.odata2.core.rest.ODataSubLocator.handleGet(ODataSubLocator.java:53) org.apache.olingo.odata2.core.rest.ODataSubLocator.handleGet(ODataSubLocator.java:53)\n  sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)\n  sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) sun.reflect.NativeMethodAccessorImpl.invoke(来源不明)\n  sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(来源不明)\n  java.lang.reflect.Method.invoke(Unknown Source) java.lang.reflect.Method.invoke(来源不明)\n  org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:180) org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:180)\n  org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96) org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96)\n  org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:198) org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:198)\n  org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:261) org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:261)\n  org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:100) org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:100)\n  org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58) org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)\n  org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:94) org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:94)\n  org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271) org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271)\n  org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)\n  org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239) org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239)\n  org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223) org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)\n  org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:203) org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:203)\n  org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:137) org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:137)\n  org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:158) org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:158)\n  org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:243) org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:243)\n  org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:168) org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:168)\n  javax.servlet.http.HttpServlet.service(HttpServlet.java:634) javax.servlet.http.HttpServlet.service(HttpServlet.java:634)\n  org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:219) org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:219)\n  org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n

Note The full stack trace of the root cause is available in the server logs.注意服务器日志中提供了根本原因的完整堆栈跟踪。

Apache Tomcat/9.0.35 Apache Tomcat/9.0.35

The error message is the same with $orderby, but it is working with $select, $top, $skip, $count.错误信息与 $orderby 相同,但它适用于 $select、$top、$skip、$count。

Welcome any idea!欢迎任何想法! Thank you for help in advance!提前感谢您的帮助!

Have a look of this source: https://olingo.apache.org/doc/odata2/tutorials/Olingo_Tutorial_AdvancedRead_FilterVisitor.html看看这个来源: https : //olingo.apache.org/doc/odata2/tutorials/Olingo_Tutorial_AdvancedRead_FilterVisitor.html

You can use uriInfo.getFilter() to get the expression from the request.您可以使用 uriInfo.getFilter() 从请求中获取表达式。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM