ClassNotFoundException:javax.ws.rs.client.ClientBuilder

时间:2014-07-15 18:38:38

标签: java jersey jackson

我正在尝试使用Web应用程序(eclispe中的动态Web应用程序)使用Jersey Rest服务,如下所示:

Client client = ClientBuilder.newBuilder().build(); // Here is the error

WebTarget target = client.target("url/rest").path("List");

String result = target.request(MediaType.TEXT_PLAIN).get(String.class);

在ClientBuilder.newBuilder()行调试时,系统抛出ClassNotFoundException:javax.ws.rs.client.ClientBuilder错误,但java项目中的相同代码工作正常。

完整追踪:

javax.servlet.ServletException: Error instanciando clase de servlet test
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:526)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:655)
    org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523)
    java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Unknown Source)
causa raíz

java.lang.NoClassDefFoundError: javax/ws/rs/client/ClientBuilder
    test.<init>(test.java:27)
    sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    java.lang.reflect.Constructor.newInstance(Unknown Source)
    java.lang.Class.newInstance(Unknown Source)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:526)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:655)
    org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523)
    java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Unknown Source)
causa raíz

java.lang.ClassNotFoundException: javax.ws.rs.client.ClientBuilder
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1324)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1177)
    test.<init>(test.java:27)
    sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    java.lang.reflect.Constructor.newInstance(Unknown Source)
    java.lang.Class.newInstance(Unknown Source)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:526)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:655)
    org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523)
    java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Unknown Source)

1 个答案:

答案 0 :(得分:5)

所以来了;)

首先了解: javax.ws.rs.client是RESTFul客户端实现的标准包。开发人员应该针对此接口进行编程。 在运行时,您需要在类路径中实现此接口。那就像resteasy或jersey这样的项目进来了。

第二: 在eclipse中,buildpath和classpath设置只会影响eclipse中的环境。当你把东西放在那里时,它只存在于日食中。

第三: 根据Java EE webprofile开发Web应用程序时,您可以自动访问应用程序服务器的所有捆绑软件包,如tomcat或jboss。 如果您的应用程序使用更多包,则必须将它们与您的应用程序一起分发。为此,您可以将第三方jar放在项目中的“WEB-INF / libs”下。当它部署到您的应用程序服务器时,此文件夹中的jar会自动放置在您的应用程序的类路径中。

第四(关于你的解决方案): 将第三方库放在应用程序服务器库中或者直接支持使它们可以访问部署在此应用程序服务器上的所有应用程序,并为您的应用程序服务器设置和维护增加更多复杂性。