2011-07-19 33 views
25
  • tomcat 7.0.16
  • Java 1.6.0_22
  • CentOS 5,6

Tôi chỉ chuyển web.xml để servlet 3.0 (từ một ứng dụng đang chạy 2.4 trước đây) và bây giờ tôi đang nhìn thấy những lỗi sau (quay về khai thác gỗ tốt cho org.apache.tomcat.util):Tomcat 7 - Servlet 3.0: không hợp lệ thẻ byte trong hồ bơi liên tục

mtyson FINE: Scanning JAR [file:/usr/java/jdk1.6.0_22/jre/lib/ext/jcharset.jar] from classpath 
mtyson Jul 19, 2011 10:04:40 AM org.apache.catalina.startup.HostConfig deployDirectory 
mtyson SEVERE: Error deploying web application directory ROOT 
mtyson org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 60 

CẬP NHẬT: Chỉ cần thử tomcat 7.0.19 - cùng một kết quả

Trả lời

23

Nó có thể không phải là vấn đề của bạn, nhưng tôi là same as this one - phiên bản cũ của com.ibm.icu:icu4j. Tôi giải quyết vấn đề bằng cách thay đổi bằng cách xây dựng cấu hình để loại trừ các phụ thuộc transitive cũ hơn và rõ ràng phụ thuộc vào phiên bản mới nhất (4.8).

+1

Cảm ơn James, điều này làm việc cho tôi. Tôi thêm Maven cấu hình dưới đây. –

2

Tôi nghĩ rằng đây là một lỗi phân tích cú pháp web.xml nộp bản thân mình

Sử dụng các công trình này cho tôi ...

<web-app version="2.5" 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"> 

<session-config> <tracking-mode>COOKIE</tracking-mode> </session-config>

Thông báo việc sử dụng các phiên bản = "2.5 "với lược đồ web-app_3_0.xsd và sự hiện diện của chế độ theo dõi cấu hình phiên chỉ là một phần của thông số 3.0 không phải là 2.5 (AFAIK)

2

Điều này đã được bật là một bình jasper không tương thích được bao gồm trong bản dựng, xung đột với jasper.jar trong tomcat 7.

+1

Chính xác vấn đề của tôi, cảm ơn. Tất cả tôi cần phải làm là nâng cấp Tomcat 7. –

18

Cảm ơn James A Wilson for your answer - cập nhật icu4j như bạn đã đề xuất làm việc cho tôi và cho phép tôi giữ phiên bản = "3.0" trong web.xml (mà tôi thích cho thời gian dài).

icu4j 2.6.1 là phiên bản không hoạt động, nâng cấp lên phiên bản NEXT 3.4.4 sẽ giải quyết vấn đề này. Tôi đã không đi đến phiên bản mới nhất của icu4j (49.1) bởi vì nó là 4MB lớn hơn phiên bản 3.4.4.

Dưới đây là một đoạn cấu hình Maven để khóa trong phiên bản phụ thuộc bắc cầu của bạn (mà không cần thêm một sự phụ thuộc rõ ràng):

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>com.ibm.icu</groupId> 
      <artifactId>icu4j</artifactId> 
      <version>3.4.4</version> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 
27

Thêm

metadata-complete="true" 

để web.xml của bạn nên sắp xếp vấn đề

<web-app version="3.0" 
     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" 
     metadata-complete="true"> 

Điều này cho phép tomcat không quét lớp học cho chú thích: http://www.tomcatexpert.com/blog/2011/10/12/how-use-fragments-and-annotations-configure-your-web-application

+1

Đề xuất tuyệt vời - cái này làm việc cho tôi ... – ProfVersaggi

+1

điều này làm gì chính xác? (+1 btw, khi nó hoạt động) – NimChimpsky

+4

Hãy nhớ rằng bằng cách làm điều này, bạn ** đã thắng ' t ** có thể sử dụng chú thích. –

2

Tôi đã gặp phải vấn đề tương tự ngay hôm nay. Trong trường hợp của tôi, sự phụ thuộc đang đến thông qua com.google.code.findbugs: chú thích: jar: 1.3.8. Điều đó có nghĩa là thư viện này chỉ được sử dụng tại thời gian xây dựng, để sử dụng chú thích để tắt một số cảnh báo tìm kiếm. Trong trường hợp này, thay vì thay đổi phiên bản, nó là an toàn để chỉ cần thay đổi phạm vi phụ thuộc và không mất nhiều thư viện trong thời gian chạy:

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>com.ibm.icu</groupId> 
      <artifactId>icu4j</artifactId> 
      <scope>provided</scope> 
     </dependency> 
     .... 
1

tôi đã phải đối mặt với cùng một vấn đề từ một tuần và được giải quyết bằng cách đơn giản thay thế icu4j .2.1.jar tập tin với phiên bản mới nhất của jar.

0

Trong phiên bản 2.6.1. com.ibm.icu.impl.data.LocaleElements_zh__PINYIN.class không hợp lệ. Giải pháp duy nhất là cập nhật, các giải pháp khác chỉ là giải pháp.

Nó có thể được kiểm tra bằng cách chạy thử nghiệm sau đây trong dự án của bạn (được cung cấp ICU-xxxjar là trên classpath của bạn):

@Test public void testValidityOfLocaleElements_zh__PINYINJar() throws ClassNotFoundException { getClass().forName("com.ibm.icu.impl.data.LocaleElements_zh__PINYIN"); }

0

Chúng tôi đã bắt đầu nhận được lỗi rất giống với một thay đổi nhỏ để ứng dụng của chúng tôi mà không cần nâng cấp lên các phụ thuộc Java, Tomcat hoặc dự án. Chúng tôi có icu4j 2.6.1

Sau khi dành thời gian khá đáng kể và cố gắng nâng cấp icu4j lên các phiên bản mới hơn (chúng tôi nhận thấy và thấy rằng các phiên bản icu từ 4.8.x đến 49.xx, 50.xx v.v., ai đó phải có chất béo trong khi xây dựng 4.9.0), chúng tôi tìm thấy vấn đề.

Thay đổi nhỏ của chúng tôi đã gửi một lớp mới (Loại A) được ánh xạ tới ngủ đông. Hibernate khởi tạo khi chúng ta khởi động WAR và kiểm tra các đối tượng liên tục chống lại ánh xạ của chúng. Đã xảy ra là một lớp khác mà là một enum (lớp B) với cùng tên và cùng một gói trong codebase của chúng tôi. Khi chúng tôi đã sửa lớp trùng lặp đó, sự cố đã biến mất.

Các vấn đề liên quan