2017-07-19 13 views
5

Sau khi cập nhật Java 8u141, ứng dụng bắt đầu java web của tôi, chạy bởi jnlp ngừng hoạt động. Không tải xuống ứng dụng. Và ném những ngoại lệ dưới đây. Ai đó có thể giúp tôi?Java Web Bắt đầu không hoạt động sau khi cập nhật Java 8u141 - java.lang.SecurityException: mất tiêu hóa cho org/apache/commons/httpclient

com.sun.deploy.net.JARSigningException: Could not verify resource signature: http://www.example.com/myjar.jar 
at com.sun.deploy.security.JarVerifier.authenticateJarEntry(Unknown Source) 
at com.sun.deploy.security.EnhancedJarVerifier.validate(Unknown Source) 
at com.sun.deploy.cache.CacheEntry.processJar(Unknown Source) 
at com.sun.deploy.cache.CacheEntry.access$2700(Unknown Source) 
at com.sun.deploy.cache.CacheEntry$7.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at com.sun.deploy.cache.CacheEntry.writeFileToDisk(Unknown Source) 
at com.sun.deploy.cache.CacheEntry.writeFileToDisk(Unknown Source) 
at com.sun.deploy.cache.Cache.downloadResourceToTempFile(Unknown Source) 
at com.sun.deploy.cache.Cache.downloadResourceToCache(Unknown Source) 
at com.sun.deploy.net.DownloadEngine.actionDownload(Unknown Source) 
at com.sun.deploy.net.DownloadEngine.downloadResource(Unknown Source) 
at com.sun.deploy.cache.ResourceProviderImpl.getResource(Unknown Source) 
at com.sun.deploy.cache.ResourceProviderImpl.getResource(Unknown Source) 
at com.sun.javaws.LaunchDownload$DownloadTask.call(Unknown Source) 
at java.util.concurrent.FutureTask.run(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 

khác:

java.lang.SecurityException: digest missing for org/apache/commons/httpclient 
at sun.security.util.ManifestEntryVerifier.verify(Unknown Source) 
at java.util.jar.JarVerifier.processEntry(Unknown Source) 
at java.util.jar.JarVerifier.update(Unknown Source) 
at java.util.jar.JarVerifier$VerifierStream.<init>(Unknown Source) 
at java.util.jar.JarFile.getInputStream(Unknown Source) 
at com.sun.deploy.security.JarVerifier.authenticateJarEntry(Unknown Source) 
at com.sun.deploy.security.EnhancedJarVerifier.validate(Unknown Source) 
at com.sun.deploy.cache.CacheEntry.processJar(Unknown Source) 
at com.sun.deploy.cache.CacheEntry.access$2700(Unknown Source) 
at com.sun.deploy.cache.CacheEntry$7.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at com.sun.deploy.cache.CacheEntry.writeFileToDisk(Unknown Source) 
at com.sun.deploy.cache.CacheEntry.writeFileToDisk(Unknown Source) 
at com.sun.deploy.cache.Cache.downloadResourceToTempFile(Unknown Source) 
at com.sun.deploy.cache.Cache.downloadResourceToCache(Unknown Source) 
at com.sun.deploy.net.DownloadEngine.actionDownload(Unknown Source) 
at com.sun.deploy.net.DownloadEngine.downloadResource(Unknown Source) 
at com.sun.deploy.cache.ResourceProviderImpl.getResource(Unknown Source) 
at com.sun.deploy.cache.ResourceProviderImpl.getResource(Unknown Source) 
at com.sun.javaws.LaunchDownload$DownloadTask.call(Unknown Source) 
at java.util.concurrent.FutureTask.run(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 

Trả lời

5

tôi quản lý để giải quyết vấn đề này cùng ngày hôm qua. Đây là những gì đã hiệu quả đối với tôi:

  1. Sử dụng 7-Zip để mở bình chưa ký gốc, đang ném JARSigningException. Có lẽ là một ý tưởng tốt để tạo một bản sao của lọ đầu tiên trong trường hợp bất cứ điều gì đi sai.
  2. Mở thư mục META-INF và sao chép MANIFEST.MF vào máy tính của bạn.
  3. Mở bản sao MANIFEST.MF trong trình chỉnh sửa văn bản. Tìm một dòng có nội dung như "Tên: org/apache/commons/httpclient". Có thể có một vài dòng như thế này, tùy thuộc vào cái bình. Bên dưới dòng này có thể là các dòng khác như "Nhà cung cấp-Nhà cung cấp: ...", "Đặc tả-Tiêu đề: ...", v.v. Trong mọi trường hợp, xóa tất cả các dòng "Tên: ..." và tất cả các dòng tiếp theo trong mỗi khối.
  4. Lưu tệp và thay thế MANIFEST.MF hiện có trong bình bằng phiên bản đã chỉnh sửa. 7-Zip cho phép các tập tin được thay thế bên trong các lọ tại chỗ.
  5. Ký lại vào bình và triển khai.

Dường như khi bình được ký tên, dòng "Tên:" trong tệp kê khai có thể được bật lên ở giữa các lớp đã ký, mà giờ đây có vẻ như là vấn đề với việc phát hành Java 8u141. tốt trước đây.

+2

Bạn chỉ cần đảm bảo rằng "Tên:" kết thúc bằng/như được mô tả trong https://docs.oracle.com/javase/tutorial/deployment/jar/packageman.html –

+0

Cảm ơn cgull, đó chính xác là giải pháp cho sai lầm của tôi. –

+0

@WillT Đúng đối với các gói (không dành cho các lớp học). – mbee

1

Tôi đã gặp sự cố tương tự với thư viện commons-httpclient-3.1.jar. Trên thực tế tôi tin rằng đó là một lỗi trong trang web bắt đầu, như Nó đã làm việc trước và nó hoạt động với truy cập sớm 8u152. Giải pháp tôi mô tả here!

+1

Mặc dù tôi đồng ý liên quan đến Lỗi Java, tôi chỉ sử dụng "cơ hội" này để cập nhật lên org.apache.httpcomponents-httpclient- .jar là "máy chủ lưu trữ mới" "của mã này (xem https://mvnrepository.com/artifact/commons-httpclient/commons-httpclient) phiên bản 3.1 cũ là từ năm 2007 và không được hỗ trợ thêm ... – Rainer

+0

Tôi đồng ý với Rainer. Đây là kết thúc của tuyên bố cuộc sống: http://hc.apache.org/httpclient-3.x/ Tôi đi cho httpcomponents một bởi vì nó chứa thông báo. Ngay cả khi cách giải quyết tồn tại cho 3.1 hiện tại, ai biết điều gì đến trong tương lai ... –

0

Sự cố được quan sát thấy trong tệp JAR đã ký có tệp kê khai chứa thông tin phiên bản gói [1] và không có dấu "/" trong tên gói (ví dụ: Tên: org/apache/xml/resolver). Trong khi chúng tôi cố gắng giải quyết vấn đề này, tạm thời, người dùng có thể giải quyết vấn đề như sau:

LƯU Ý: Chúng tôi khuyên bạn chỉ nên sử dụng giải pháp này nếu nhà phân phối tệp JAR có thể "ký lại" các tập tin.

  1. Trích xuất nội dung của tệp JAR đã ký (ví dụ: jar xf jar-file).
  2. Sửa đổi tệp META-INF/MANIFEST.MF và thêm dấu "/" vào tên của gói (ví dụ: Tên: org/apache/xml/resolver /).
  3. Xóa các tệp chữ ký hiện tại (ví dụ: rm -f META-INF/.SF META-INF/ .RSA META-INF/*. DSA).
  4. Tạo lại tệp JAR (e, g .: jar cfm jar-tệp (các) tệp đầu vào META-INF/MANIFEST.MF).

GHI CHÚ: Bạn phải sử dụng tiện ích bình. Các công cụ tạo jar khác có thể giới thiệu lại vấn đề.

  1. Đăng ký lại tệp JAR.

[1] https://docs.oracle.com/javase/8/docs/technotes/guides/versioning/spec/versioning2.html#wp91706

Nguồn: http://www.oracle.com/technetwork/java/javase/8u141-relnotes-3720385.html#KnownIssues

0

Lỗi này được đề cập như là một phần của lỗi JDK-8184993 và sửa chữa sẽ có sẵn trong một phiên bản out-of-chu kỳ của JDK 8u144, dự kiến ​​sẽ được phát hành vào các giờ sau đó của ngày 26 tháng 7.

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