2015-05-19 7 views
6

Ich habe ein Tomcat 7-Projekt, das wie ein Zauber auf meinem Eclipse-integrierten Testserver funktioniert, aber nicht auf dem Produktionsserver gestartet werden kann.Tomcat-Anwendung startet nicht nach dem Hinzufügen der CORS-Unterstützung

Es hat vorher auch an der Produktion gearbeitet, aber ich musste die CORS-Unterstützung hinzufügen, die es irgendwie zum Scheitern brachte.

CORS Unterstützung hinzuzufügen, habe ich diese zu meinen pom.xml

<dependency> 
    <groupId>org.apache.tomcat</groupId> 
    <artifactId>tomcat-catalina</artifactId> 
    <version>8.0.22</version> 
    <scope>provided</scope> 
</dependency> 

und diese auf meine web.xml

<filter> 
    <filter-name>CorsFilter</filter-name> 
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>CorsFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

Wenn ich diese Zeilen wieder entfernen, funktioniert es auf die Produktion Server, aber CORS funktioniert nicht.

Der Server führt ein ClassNotFoundException wenn ich versuche, die Anwendung zu starten, die seltsam ist, weil die Klasse eindeutig dort in der WAR-Datei ist.

Das Catalina-Protokoll behauptet, einige .jar-Dateien könnten nicht validiert werden, weil "jar not loaded". Die .jars sind alle im .war, also verstehe ich nicht, warum es scheitert.

Ausgabe aus den Protokollen:

Catalina log:

May 19, 2015 9:10:29 AM org.apache.catalina.util.LifecycleBase stop 
INFO: The stop() method was called on component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/APIMR]] after stop() had already been called. The second call will be ignored. 
May 19, 2015 9:10:29 AM org.apache.catalina.startup.HostConfig deleteRedeployResources 
INFO: Undeploying context [/APIMR] 
May 19, 2015 9:10:36 AM org.apache.catalina.startup.HostConfig deployWAR 
INFO: Deploying web application archive /var/lib/tomcat/webapps/APIMR.war 
May 19, 2015 9:10:37 AM org.apache.catalina.loader.WebappClassLoader validateJarFile 
INFO: validateJarFile(/usr/share/tomcat/webapps/APIMR/WEB-INF/lib/tomcat-el-api-8.0.22.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/el/Expression.class 
May 19, 2015 9:10:37 AM org.apache.catalina.loader.WebappClassLoader validateJarFile 
INFO: validateJarFile(/usr/share/tomcat/webapps/APIMR/WEB-INF/lib/tomcat-servlet-api-8.0.22.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class 
May 19, 2015 9:10:38 AM org.apache.catalina.core.StandardContext startInternal 
SEVERE: Error filterStart 
May 19, 2015 9:10:38 AM org.apache.catalina.core.StandardContext startInternal 
SEVERE: Context [/APIMR] startup failed due to previous errors 

localhost log:

May 19, 2015 8:22:11 AM org.apache.catalina.core.ApplicationContext log 
INFO: Initializing Spring FrameworkServlet 'dispatcher' 
May 19, 2015 8:22:13 AM org.apache.catalina.core.ApplicationContext log 
INFO: ContextListener: contextInitialized() 
May 19, 2015 8:22:13 AM org.apache.catalina.core.ApplicationContext log 
INFO: SessionListener: contextInitialized() 
May 19, 2015 8:22:13 AM org.apache.catalina.core.ApplicationContext log 
INFO: ContextListener: attributeAdded('org.apache.jasper.compiler.TldLocationsCache', '[email protected]') 
May 19, 2015 9:10:05 AM org.apache.catalina.core.StandardContext filterStart 
SEVERE: Exception starting filter CorsFilter 
java.lang.ClassNotFoundException: org.apache.catalina.filters.CorsFilter 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    <snip> 


May 19, 2015 9:10:38 AM org.apache.catalina.core.StandardContext filterStart 
SEVERE: Exception starting filter CorsFilter 
java.lang.ClassNotFoundException: org.apache.catalina.filters.CorsFilter 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    <snip> 

Irgendwelche Vorschläge?

+0

Duplikat von http://stackoverflow.com/questions/22634691/apache-tomcat-catalina-as-maven-dependency-for-cors-filter – javabrett

Antwort

9

Der Server wird Gläser ablehnen, die bereits zur Laufzeit des Servers gehören (tomcat - **. Jar, servlet * .jar, ...). Versuchen Sie, diese CORS-Filter statt:

pom.xml

<dependency> 
<groupId>com.thetransactioncompany</groupId> 
<artifactId>cors-filter</artifactId> 
<version>2.4</version> 
</dependency> 

web.xml

<filter> 
    <filter-name>CORS</filter-name> 
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>CORS</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
+0

Dies funktionierte, nach meinen Tests. Ich werde diese Antwort akzeptieren, wenn es für diejenigen funktioniert, die die Anwendung auch verwenden – Suppen

+0

diese web.xml Sie beziehen sich auf? Ist es der in tomcat/conf/web.xml? –

+0

Das ist normalerweise der von Ihrem Projekt. – Stefan

1

In meinem Fall die Abhängigkeit Zugabe funktionierte nicht. Es funktionierte, als ich zwei Gläser in den tomcat lib Ordner hinzugefügt, wie unten:

cors-Filter-2.5.jar

Java-Objekt-utils-1.10.jar

0

Obwohl ein Wesen alte Post, das war so hilfreich. Ich kann nicht dankbar genug sein, das zu teilen. Mann, du hast mich vor vielen Tagen des Kampfes gerettet.

Für den Fall, jemand anderes in das gleiche Problem stoßen wird, hier ist das, was ich getan:

  1. Added die Maven-Abhängigkeit zu meinem Projekt pom.xml-Datei: http://mvnrepository.com/artifact/com.thetransactioncompany/cors-filter/2.6
  2. Added der Filter auf meine Web des Projekts.xml /WEB-INF/web.xml Datei wie unten zu lesen und neu gestartet tomcat:
</web-app> 
    <servlet> 
     <servlet-name>Jersey Web Application</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>jersey.config.server.provider.packages</param-name> 
      <param-value>packages</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Jersey Web Application</servlet-name> 
     <url-pattern>/appapi/*</url-pattern> 
    </servlet-mapping> 

    <filter> 
     <filter-name>CORS</filter-name> 
     <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>CORS</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
</web-app> 

Dies scheint perfekt mit Tomcatbediener zu arbeiten, 8 und 9. Wenn die Änderungen werden nicht wirksam werden, starten Sie den IDE "Eclipse " in meinem Fall. Nochmals vielen Dank für die tolle Arbeit Jungs. :)

Verwandte Themen