[英]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.