如何解决如何解决olingo odata V2 $ filter错误? Apache Tomcat / 9.0.35
大家好!
我有olingo OData V2服务,几乎是完美的工作。 CRUD方法是从POSTMAN测试的。它运行在Tomcat上,数据库是MySQL,项目在Eclipse中。
这是服务的代码:
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;
}
}
}
我可以在以下网址中找到元数据: http:// localhost:8080 / GeneratorTry / cars.svc / $ metadata
当我尝试过滤我的EntitySet之一时 (http:// localhost:8080 / GeneratorTry / cars.svc / Vendors?$ filter = startswith(Mobile,'+ 36'))) 我收到此错误:
HTTP状态500 –内部服务器错误
类型异常报告
消息 org.apache.cxf.interceptor.Fault: org.apache.olingo.odata2.core.uri.expression.FilterParserImpl
描述服务器遇到意外情况 导致它无法满足要求。
异常
java.lang.RuntimeException: org.apache.cxf.interceptor.Fault: org.apache.olingo.odata2.core.uri.expression.FilterParserImpl org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:116) org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:331) org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239) org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223) org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:203) org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:137) org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:158) org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:243) org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:168) javax.servlet.http.HttpServlet.service(HttpServlet.java:634) org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:219) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)根本原因
org.apache.cxf.interceptor.Fault: org.apache.olingo.odata2.core.uri.expression.FilterParserImpl org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:162) org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:128) org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:198) org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:261) org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:100) org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58) org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:94) org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271) org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239) org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223) org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:203) org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:137) org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:158) org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:243) org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:168) javax.servlet.http.HttpServlet.service(HttpServlet.java:634) org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:219) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)根本原因
java.lang.NoClassDefFoundError: org.apache.olingo.odata2.core.uri.expression.FilterParserImpl org.apache.olingo.odata2.core.uri.UriParserImpl.parseOrderByString(UriParserImpl.java:848) org.apache.olingo.odata2.core.uri.UriParserImpl.handleSystemQueryOptionOrderBy(UriParserImpl.java:604) org.apache.olingo.odata2.core.uri.UriParserImpl.handleSystemQueryOptions(UriParserImpl.java:560) org.apache.olingo.odata2.core.uri.UriParserImpl.parse(UriParserImpl.java:114) org.apache.olingo.odata2.core.ODataRequestHandler.handle(ODataRequestHandler.java:101) org.apache.olingo.odata2.core.rest.ODataSubLocator.handle(ODataSubLocator.java:148) org.apache.olingo.odata2.core.rest.ODataSubLocator.handleGet(ODataSubLocator.java:53) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) java.lang.reflect.Method.invoke(Unknown Source) org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:180) org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96) org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:198) org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:261) org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:100) org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58) org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:94) org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271) org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239) org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223) org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:203) org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:137) org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:158) org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:243) org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:168) javax.servlet.http.HttpServlet.service(HttpServlet.java:634) org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:219) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)注意根本原因的完整堆栈跟踪是 在服务器日志中可用。
Apache Tomcat / 9.0.35
错误消息与$ orderby相同,但与$ select,$ top,$ skip,$ count一起使用。
欢迎提出任何建议! 预先感谢您的帮助!
解决方法
看看这个来源:https://olingo.apache.org/doc/odata2/tutorials/Olingo_Tutorial_AdvancedRead_FilterVisitor.html
您可以使用 uriInfo.getFilter() 从请求中获取表达式。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。