2011-10-18 10 views
14

Tôi muốn sử dụng Mojarra 2.1 với Tomcat 7, vì vậy tôi đã thêm các phụ thuộc sau vào tệp pom của mình :java.lang.ClassFormatError: Thuộc tính mã không có trong phương thức không phải là bản địa hoặc trừu tượng trong tệp lớp javax/faces/webapp/FacesServlet

<dependency> 
     <groupId>com.sun.faces</groupId> 
     <artifactId>jsf-api</artifactId> 
     <version>2.1.2</version> 
    </dependency> 

    <dependency> 
     <groupId>com.sun.faces</groupId> 
     <artifactId>jsf-impl</artifactId> 
     <version>2.1.2</version> 
    </dependency> 

Tuy nhiên, khi tôi đã cố gắng để bắt đầu Tomcat, tôi đã theo ngoại lệ:

org.apache.catalina.LifecycleException: Failed to start component [StandardServer[8007]] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:152) 
    at org.apache.catalina.startup.Catalina.start(Catalina.java:621) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:322) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:450) 
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardService[Catalina]] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:152) 
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:727) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148) 
    ... 7 more 
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:152) 
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148) 
    ... 9 more 
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:152) 
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1033) 
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:291) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148) 
    ... 11 more 
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/myapp]] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:152) 
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1033) 
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:774) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148) 
    ... 14 more 
Caused by: java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/faces/webapp/FacesServlet 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:616) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2820) 
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1150) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523) 
    at com.sun.faces.config.FacesInitializer.<clinit>(FacesInitializer.java:107) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:247) 
    at org.apache.catalina.startup.ContextConfig.getServletContainerInitializer(ContextConfig.java:1543) 
    at org.apache.catalina.startup.ContextConfig.processServletContainerInitializers(ContextConfig.java:1466) 
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1285) 
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:896) 
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:322) 
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) 
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5103) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148) 
    ... 17 more 

như thế nào điều này gây ra và làm thế nào tôi có thể giải quyết nó?

Dưới đây là web.xml tập tin của tôi mà có thể chứa các nguyên nhân của vấn đề:

<?xml version="1.0" encoding="UTF-8"?> 

<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
     version="3.0"> 

    <display-name>appName</display-name> 

    <listener> 
    <listener-class> 
     org.springframework.web.context.ContextLoaderListener 
    </listener-class> 
    </listener> 

    <listener> 
    <listener-class> 
     org.springframework.web.context.request.RequestContextListener 
    </listener-class> 
    </listener> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
     classpath:META-INF/spring/context.xml 
     classpath:META-INF/spring/security.xml 
     </param-value> 

    </context-param> 


    <context-param> 
    <param-name>javax.faces.PROJECT_STAGE</param-name> 
    <param-value>Development</param-value> 
    </context-param> 

    <welcome-file-list> 
    <welcome-file>customers</welcome-file> 
    </welcome-file-list> 

    <context-param> 
    <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description> 
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
    <param-value>server</param-value> 
    </context-param> 

    <context-param> 
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name> 
    <param-value>resources.application</param-value> 
    </context-param> 

    <listener> 
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class> 
    </listener> 

    <context-param> 
    <param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name> 
    <param-value>true</param-value> 
    </context-param> 

    <!-- Spring Security --> 
    <filter> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <filter-class> 
      org.springframework.web.filter.DelegatingFilterProxy 
     </filter-class> 
    </filter> 

    <filter-mapping> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 


    <filter> 
     <filter-name>Pretty Filter</filter-name> 
     <filter-class>com.ocpsoft.pretty.PrettyFilter</filter-class> 
    </filter> 

    <filter-mapping> 
    <filter-name>Pretty Filter</filter-name> 
     <url-pattern>/*</url-pattern> 
     <dispatcher>FORWARD</dispatcher> 
     <dispatcher>REQUEST</dispatcher> 
     <dispatcher>ERROR</dispatcher> 
    </filter-mapping> 


    <servlet> 
    <servlet-name>Resource Servlet</servlet-name> 
    <servlet-class>com.icesoft.faces.webapp.CompatResourceServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>Resource Servlet</servlet-name> 
    <url-pattern>/xmlhttp/*</url-pattern> 
    </servlet-mapping> 

    <servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>/faces/*</url-pattern> 
    </servlet-mapping> 

</web-app> 
+0

Bạn có thể muốn theo dõi chủ đề này: http://stackoverflow.com/questions/7806986/maven-dependecies-for-mojarra-2-1 Người khác hôm nay cũng gặp vấn đề tương tự với Maven và classpath sự ô nhiễm. – BalusC

+0

Bản sao có thể có của [java.lang.ClassFormatError: Thuộc tính mã không có trong phương thức không phải là bản địa hoặc trừu tượng trong tệp lớp javax/faces/webapp/FacesServlet] (http://stackoverflow.com/questions/8081234/java-lang- classformaterror-absent-code-attribute-in-method-that-is-not-native-o) – BalusC

Trả lời

7

Tôi có cùng một vấn đề, và nó seams bằng cách nào đó để

<groupId>javax</groupId> 
<artifactId>javaee-web-api</artifactId> 

hoặc

<groupId>javax</groupId> 
<artifactId>javaee-api</artifactId> 

sau khi đặt chúng thành phạm vi cung cấp (hoặc xóa chúng ở tất cả khi bạn khởi động một máy chủ trong thử nghiệm maven) nó sta rts làm việc cho tôi.

@Xem Blog này: j ava.lang.ClassFormatError : Absent Code attribute in method that is not native or abstract in class file … - Nó thảo luận vấn đề cho javax.persistence.GenerationType nhưng tôi nghĩ bạn và tôi đã gặp phải vấn đề tương tự.

7

Thay đổi:

<dependency> 
    <groupId>com.sun.faces</groupId> 
    <artifactId>jsf-impl</artifactId> 
    <version>2.1.2</version> 
</dependency> 

Để:

<dependency> 
    <groupId>org.glassfish</groupId> 
    <artifactId>javax.faces</artifactId> 
    <version>2.1.6</version> 
</dependency> 
+0

Tôi cũng vậy ... Triển khai JSF này hoạt động trong Tomcat –

16

Tôi có vấn đề tương tự như bạn và phát hiện ra sự thay đổi đó từ servlet-api để javax.servlet.api sẽ khắc phục sự cố. Hy vọng điều này giúp đỡ. Xin lưu ý rằng, tôi đang sử dụng Juno Eclipse, Tomcat 7, Dynamic Web Module 3.0 và JDK 1.7.

<dependency> 
    <groupId>com.sun.faces</groupId> 
    <artifactId>jsf-api</artifactId> 
    <version>2.1.13</version> 
</dependency> 
<dependency> 
    <groupId>com.sun.faces</groupId> 
    <artifactId>jsf-impl</artifactId> 
    <version>2.1.13</version> 
</dependency> 
<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
    <version>3.0.1</version> 
</dependency> 
3

Tôi đã giao dịch với tất cả các cá được nhúng và giải quyết vấn đề này.

<dependency> 
     <groupId>org.glassfish.main.extras</groupId> 
     <artifactId>glassfish-embedded-all</artifactId> 
     <version>3.1.2.2</version> 
     <scope>provided</scope> 
    </dependency>