2016-06-26 10 views
0

Ich habe eine war Datei und ich habe es auf meinem ersten Server bereitgestellt. dort ist alles in Ordnung. können Sie es auf http://185.126.201.83:10808/crmapi/rest/v1/authentication/hi testen (Port ist anders, weil es hinter einer Firewall ist) aber in meinem neuen Server bekomme ich unter Fehler und alles ist in beiden Server identisch. Was ist falsch? Sie können es testen auf: http://185.21.76.71:8080/crmapi/rest/v1/authentication/hi500 Interner Server Fehler auf Apache Tomcat Server

type Exception report 

message Servlet.init() for servlet com.crmapi.services.ApplicationConfig threw exception 

description The server encountered an internal error that prevented it from fulfilling this request. 

exception 

javax.servlet.ServletException: Servlet.init() for servlet com.crmapi.services.ApplicationConfig threw exception 
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528) 
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099) 
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670) 
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) 
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) 
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    java.lang.Thread.run(Thread.java:745) 
root cause 

java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map; 
    org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:309) 
    org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:315) 
    org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:170) 
    org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:358) 
    javax.servlet.GenericServlet.init(GenericServlet.java:158) 
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528) 
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099) 
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670) 
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) 
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) 
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    java.lang.Thread.run(Thread.java:745) 
note The full stack trace of the root cause is available in the Apache Tomcat/8.0.36 logs. 

ubuntu 16.04 Server x64 und Apache Tomcat/8.0.36

+0

Haben Sie doppelte Ressourcen (JAR-Dateien) für die gleiche API, wie 2 JAR-Dateien für Jersey mit verschiedenen Versionen im Klassenpfad? – Yazan

+0

@Yazan Wie kann ich es überprüfen? –

+0

überprüfen Sie Ihren Classpath, für eine Web-App wird es hauptsächlich 'WEB-INF/lib' in Ihrer Webapp oder Tomcat' lib'-Ordner, stellen Sie sicher, es gibt keine doppelten Jar-Dateien wie 'jersey1.0.jar' und' jersey2 .0.jar' (zum Beispiel) – Yazan

Antwort

0

Es sieht aus, dass die JRE-Versionen auf den Servern unterscheiden.

1

Apache Tomcat Stack-Trace sagt alles. Ihr Problem ist definitiv mehrere JAX-RS Gläser im Klassenpfad Ihrer Anwendung. Es sieht so aus, als ob die javax.ws.rs.core.Application-Klasse aus einem Jar geladen wird, aber nicht die Methode getProperties(), die eine Java.util.Map zurückgibt. Sie müssen das Vorhandensein doppelter Jars genau prüfen. Wenn Sie es nicht manuell finden können, können Sie ein Tool wie JHade verwenden, um das Vorhandensein doppelter Jars zu erkennen. Aber wenn Sie zu sicher sind, dass der Pfad der Anwendungsklasse nur einen JAX-RS hat jar, überprüfen Sie bitte sorgfältig, ob die erforderliche Methode getProperties() in der Klasse javax.ws.rs.core.Application vorhanden ist. Wenn Sie Ihren Code in diesen Zeilen debuggen, können Sie eine Lösung finden. Lass es mich wissen, wenn dir das hilft :). PS - JAX RS 1.x-Gläser haben keine getProperties() -Methode, aber JAX-RS 2.x haben.

0

Sieht so aus, als hätten Sie Jar-Mismatch von JAX-RS-Versionen. Verwenden Sie Maven, um Ihre JAX-RS-Version zu steuern. Wenn Sie Trikot verwenden, verwenden Sie 2.23.2 oder mehr Versionen.

Sie können Ihre erfolgreichen Einsatz über http://185.21.76.71:8080/crmapi/application.wadl

0

Einer der anderen Fehler überprüfen, die wir vielleicht haben, dass wir nicht unsere servlet Klasse als public Das, was wir müssen uns daran erinnern deklarieren, weil servlet Container sucht immer nach servlet Klasse im öffentlichen Bereich, so dass unsere servlet Datei öffentlich sein muss Sonst erhalten wir Fehler 500 - interner Serverfehler.