【问题标题】:Java REST API throws error "org.glassfish.jersey.server.ContainerException: java.lang.NoSuchFieldError: ACCEPT_CASE_INSENSITIVE_PROPERTIES"Java REST API 抛出错误“org.glassfish.jersey.server.ContainerException: java.lang.NoSuchFieldError: ACCEPT_CASE_INSENSITIVE_PROPERTIES”
【发布时间】:2018-05-06 06:02:55
【问题描述】:

我在新安装的 Debian 9 机器上运行的 Java 后端不再正常工作。有些调用正常,有些调用失败并出现此错误堆栈:

org.glassfish.jersey.server.ContainerException: java.lang.NoSuchFieldError: ACCEPT_CASE_INSENSITIVE_PROPERTIES 在 org.glassfish.jersey.servlet.internal.ResponseWriter.rethrow(ResponseWriter.java:278) 在 org.glassfish.jersey.servlet.internal.ResponseWriter.failure(ResponseWriter.java:260) 在 org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:509) 在 org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:334) 在 org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) 在 org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) 在 org.glassfish.jersey.internal.Errors.process(Errors.java:315) 在 org.glassfish.jersey.internal.Errors.process(Errors.java:297) 在 org.glassfish.jersey.internal.Errors.process(Errors.java:267) 在 org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) 在 org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305) 在 org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) 在 org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:473) 在 org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427) 在 org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388) 在 org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341) 在 org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228) 在 org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:686) 在 org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:501) 在 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) 在 org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557) 在 org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) 在 org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086) 在 org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428) 在 org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) 在 org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020) 在 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) 在 org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) 在 org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:68) 在 org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) 在 org.eclipse.jetty.server.Server.handle(Server.java:370) 在 org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489) 在 org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:960) 在 org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1021) 在 org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865) 在 org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240) 在 org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82) 在 org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668) 在 org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52) 在 org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) 在 org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) 在 java.lang.Thread.run(Thread.java:748)

它没有给我一个提示,在我的代码中发生这种情况,在其他机器上,使用相同的导入,这是有效的。

与项目正常运行的服务器相比,我找不到使用的库有任何区别。在服务器和我的机器上也使用相同的 java 版本。

有人有什么想法吗?谢谢!

【问题讨论】:

    标签: java gwt jackson glassfish


    【解决方案1】:

    这很可能是类路径问题,Glassfish 以某种方式获取了旧版本的 Jackson。 ACCEPT_CASE_INSENSITIVE_PROPERTIES 字段是在 Jackson 2.5 中引入的,因此请在类路径中查找早期版本。

    尝试通过查找实现Versioned 接口的类(例如ObjectMapper)来记录Jackson 版本。这应该可以告诉您类路径理论是否成立。

    【讨论】:

    • 您好 Henrik,感谢您的回答。我从项目中删除了jackson的所有依赖项,但仍然出现相同的错误,jackson的版本是2.8.7,项目中没有任何Jackson-libs ...同一个项目适用于Windows开发机器和linux服务器,只是不在我的 Debian PC 上。
    • 还有其他想法吗?我已经尝试过使用不同版本的 eclipse 但没有任何帮助...
    • 可能是this question中提到的东西?
    • 我终于解决了这个问题,但不是 100% 确定问题是什么。我删除了所有球衣和杰克逊库,并一一阅读。不添加 jackson-corejackson-databind 库它现在工作正常......谢谢
    • @newnoise:好的。很高兴听到。我的猜测是,类路径上 jar 的顺序在您重新添加期间发生了变化,现在您“前面”有了最新版本的 Jackson。
    猜你喜欢
    • 2019-05-21
    • 2021-06-21
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 2023-03-04
    • 1970-01-01
    • 2019-11-14
    相关资源
    最近更新 更多