ClassNotFoundException: javax.ws.rs.client.ClientBuilder
Ich versuche zu verbrauchen Jersey-Rest-Service aus einer Web-Anwendung (Dynamic Web-App in eclispe) wie folgt:
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);
Beim Debuggen in der Zeile ClientBuilder.newBuilder() das system wirft die ClassNotFoundException: javax.ws.rs.client.ClientBuilder Fehler, aber den gleichen code in ein java-Projekt funktioniert perfekt.
Full trace:
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)
- Tut appserver gehören ein javax.ws.rs.client.ClientBuilder-Implementierung im classpath? Wie die jersey-client? Oder dessen packte er mit Ihnen Anwendung?
- howtodoinjava.com/2013/08/03/... versuchen Sie, diese
- Ich habe die jersey-client.jar (und andere) Hinzugefügt, wie ein Benutzer die lib in eclipse.
- Nun kopierte ich alle die Gläser auf dem tomcat-lib, und funktioniert perfekt ! Jetzt erklären Sie mir, warum sind die nicht gepackt in meine app? Ist der user-lib nicht nützlich?
- User-libs-classpath existieren nur in eclipse. Sie haben, um Ihre libs im WEB-INF/libs zu Verpacken und bereitstellen Ihrer app. Wenn Sie die webprofile, als ich schlage vor, wenn Sie tomcat. Können Sie keine richtige Antwort im moment, mit smartphone. Würde morgen machen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
So, hier kommt es 😉
Erste, der für das Verständnis:
javax.ws.rs.client ist der standard-Paket für den Erholsamen client-Implementierungen. Entwickler sollten programm gegen diese Schnittstelle.
Zur Laufzeit müssen Sie eine Implementierung dieser Schnittstelle in Ihren Klassenpfad ein. Das ist, wo Projekte wie resteasy oder jersey kommt in.
Zweite:
In eclipse die classpath und buildpath-Einstellungen nur aus der Umgebung in eclipse. Wenn Sie etwas in es Händisch, gibt es nur in eclipse.
Dritte:
Wenn Sie die Entwicklung einer webapplication je nach Java EE webprofile Sie haben automatisch Zugang zu allen gebündelten Pakete application server wie tomcat oder jboss.
Wenn Ihre Anwendung mehr Pakete, die Sie haben, verteilen Sie zusammen mit Ihrer Anwendung. Um dies zu tun, können Sie Ihre Drittanbieter-jars unter "WEB-INF/libs" in Ihrem Projekt. Wenn es auf dem Anwendungsserver bereitgestellt, die Gefäße in diesem Ordner werden automatisch in Ihren Klassenpfad Ihrer Anwendung.
Vierten (zu Ihrer Lösung):
Putting third-party libs im application-server-lib oder gebilligt direkt machen Sie zugänglich für alle Anwendungen bereitgestellt, die auf diesem Applikationsserver und fügt hinzu, mehr Komplexität in Ihrem app-server-setup und Wartung.