java.lang.RuntimeException: ERROR: Failed to recov

2019-06-17 03:29发布

I just had this error message from one of my users. (IE8, Java 1.6.20 ). It is from an applet which receives instructions from Javascript and executes certain processes on the client.

RangeError
java.lang.RuntimeException: ERROR: Failed to recover corrupt cache entry
at com.sun.deploy.cache.CacheEntry.recover
at com.sun.deploy.cache.CacheEntry.getSignerMap
at com.sun.deploy.cache.CachedJarFile.getSignerMap
at com.sun.deploy.cache.CachedJarFile.access$100
....

Any iddeas what could be causing this?

2条回答
\"骚年 ilove
2楼-- · 2019-06-17 04:06

It might be this bug. If so the workaround would appear to be to clear the java cache and try again.

查看更多
在下西门庆
3楼-- · 2019-06-17 04:15

I have experienced this problem at java1.8_0.31 and Only workaround I found so far that put packed jars (pack.gz) to same directory with your jar(s). When tracing the servlet i see that

JnlpDownloadServlet(3): Request: /MyWeb/signed.jnlp
JnlpDownloadServlet(3): User-Agent: JNLP/1.7.0 javaws/11.31.2.13 (<internal>) Java/1.8.0_31
JnlpDownloadServlet(4): DownloadRequest[path=/signed.jnlp encoding=gzip isPlatformRequest=false]
JnlpDownloadServlet(4): Basic Protocol lookup
JnlpDownloadServlet(4): JnlpResource: JnlpResource[WAR Path: /signed.jnlp lastModified=Wed Feb 11 09:13:42 EET 2015]]
JnlpDownloadServlet(3): Resource returned: /signed.jnlp
JnlpDownloadServlet(4): SupportQuery in Href: true
JnlpDownloadServlet(4): lastModified: 1423638822000 Wed Feb 11 09:13:42 EET 2015
JnlpDownloadServlet(3): Request: /MyWeb/GUIJars/signed/main.jar?version-id=1.101
JnlpDownloadServlet(3): User-Agent: JNLP/1.7.0 javaws/11.31.2.13 (<internal>) Java/1.8.0_31
JnlpDownloadServlet(4): DownloadRequest[path=/GUIJars/signed/main.jar encoding=pack200-gzip,gzip query=version-id=1.101 version=1.101 isPlatformRequest=false]
JnlpDownloadServlet(4): Version-based/Extension based lookup
JnlpDownloadServlet(4): JnlpResource: JnlpResource[WAR Path: /GUIJars/signed/main__V1.101.jar versionId=1.101 name=main.jar lastModified=Fri Feb 13 16:28:36 EET 2015] returnVersionId=1.101]
JnlpDownloadServlet(3): Resource returned: /GUIJars/signed/main__V1.101.jar
JnlpDownloadServlet(4): Real resource returned: JnlpResource[WAR Path: /GUIJars/signed/main__V1.101.jar versionId=1.101 name=main.jar lastModified=Fri Feb 13 16:28:36 EET 2015] returnVersionId=1.101]

And at client side when tracing log is shown that

network: ResponseCode for http://mydomain.com.tr/MyWeb/GUIJars/signed/main.jar?version-id=1.101 : 200
network: Encoding for http://mydomain.com.tr/MyWeb/GUIJars/signed/main.jar?version-id=1.101 : gzip
network: Server response: (length: -1, lastModified: Fri Feb 13 16:28:36 EET 2015, downloadVersion: 1.101, mimeType: application/java-archive)
network: Created version ID: 1.101
network: Created version ID: 1.101
network: Created version ID: 1.101
network: Cache entry not found [url: http://mydomain.com.tr/MyWeb/GUIJars/signed/main.jar, version: 1.101]
network: Downloading resource: http://mydomain.com.tr/MyWeb/GUIJars/signed/main.jar?version-id=1.101
    Content-Length: -1
    Content-Encoding: gzip
network: Wrote URL http://mydomain.com.tr/MyWeb/GUIJars/signed/main.jar?version-id=1.101 to File C:\myCache\MyWeb\6.0\33\5a0dab21-647c684d-1.101--temp
network: Disconnect connection to http://mydomain.com.tr/MyWeb/GUIJars/signed/main.jar?version-id=1.101
network: Cache: Enable a new CacheEntry: http://mydomain.com.tr/MyWeb/GUIJars/signed/main.jar
network: Downloaded http://mydomain.com.tr/MyWeb/GUIJars/signed/main.jar: C:\myCache\MyWeb\6.0\33\5a0dab21-647c684d-1.101-
cache: Adding MemoryCache entry: http://mydomain.com.tr/MyWeb/GUIJars/signed/main.jar
java.util.zip.ZipException: error in opening zip file
    at java.util.zip.ZipFile.open(Native Method)
    at java.util.zip.ZipFile.<init>(Unknown Source)
    at java.util.zip.ZipFile.<init>(Unknown Source)
    at java.util.jar.JarFile.<init>(Unknown Source)
    at java.util.jar.JarFile.<init>(Unknown Source)
    at com.sun.deploy.security.EnhancedJarVerifier.validate(Unknown Source)
    at com.sun.deploy.cache.CacheEntry.getJarSigningData(Unknown Source)
    at com.sun.deploy.cache.CacheEntry.getCodeSigners(Unknown Source)
    at com.sun.deploy.ref.CodeRef.getCodeSigners(Unknown Source)
    at com.sun.deploy.security.ruleset.RuleId.contains(Unknown Source)
    at com.sun.deploy.security.ruleset.DRSHelper.findRule(Unknown Source)
    at com.sun.deploy.security.ruleset.DeploymentRuleSet.getDRS(Unknown Source)
    at com.sun.deploy.security.ruleset.DeploymentRuleSet.findDRS(Unknown Source)
    at com.sun.javaws.jnl.LaunchDesc.getMainDeploymentRuleSet(Unknown Source)
    at com.sun.javaws.jnl.LaunchDesc.getMatchImpl(Unknown Source)
    at com.sun.javaws.jnl.LaunchDesc.getJREMatcher(Unknown Source)
    at com.sun.javaws.Launcher.prepareLaunchFile(Unknown Source)
    at com.sun.javaws.Launcher.prepareAllResources(Unknown Source)
    at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
    at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
    at com.sun.javaws.Launcher.launch(Unknown Source)
    at com.sun.javaws.Main.launchApp(Unknown Source)
    at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
    at com.sun.javaws.Main.access$000(Unknown Source)
    at com.sun.javaws.Main$1.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
cache: Trying to recover cache entry for http://mydomain.com.tr/MyWeb/GUIJars/signed/main.jar
cache: MemoryCache: removed entry http://mydomain.com.tr/MyWeb/GUIJars/signed/main.jar
network: Remove cache entry: http://mydomain.com.tr/MyWeb/GUIJars/signed/main.jar
network: Cache entry not found [url: http://mydomain.com.tr/MyWeb/GUIJars/signed/main.jar, version: 1.101]
java.lang.RuntimeException: ERROR: Recovery got null entry
    at com.sun.deploy.cache.CacheEntry.recover(Unknown Source)
    at com.sun.deploy.cache.CacheEntry.getJarSigningData(Unknown Source)
    at com.sun.deploy.cache.CacheEntry.getCodeSigners(Unknown Source)
    at com.sun.deploy.ref.CodeRef.getCodeSigners(Unknown Source)
    at com.sun.deploy.security.ruleset.RuleId.contains(Unknown Source)
    at com.sun.deploy.security.ruleset.DRSHelper.findRule(Unknown Source)
    at com.sun.deploy.security.ruleset.DeploymentRuleSet.getDRS(Unknown Source)
    at com.sun.deploy.security.ruleset.DeploymentRuleSet.findDRS(Unknown Source)
    at com.sun.javaws.jnl.LaunchDesc.getMainDeploymentRuleSet(Unknown Source)
    at com.sun.javaws.jnl.LaunchDesc.getMatchImpl(Unknown Source)
    at com.sun.javaws.jnl.LaunchDesc.getJREMatcher(Unknown Source)
    at com.sun.javaws.Launcher.prepareLaunchFile(Unknown Source)
    at com.sun.javaws.Launcher.prepareAllResources(Unknown Source)
    at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
    at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
    at com.sun.javaws.Launcher.launch(Unknown Source)
    at com.sun.javaws.Main.launchApp(Unknown Source)
    at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
    at com.sun.javaws.Main.access$000(Unknown Source)
    at com.sun.javaws.Main$1.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source) 

Client behaves coming plain jar file as packed and gziped jar. Maybe need to examine HTTP Header to why client do that.

查看更多
登录 后发表回答