Search code examples
javaeclipsesvnclassloaderinternal

What caused the java.lang.InternalError (it extends VirtualMachineError)


When I tried to do SVN synchronize I got this error. I wonder why it has happen, any ideas? It works great after restarting eclipse, but I wonder what could cause it and how its possible that the jar was not found.

!ENTRY org.eclipse.team.svn.core.svnnature 4 0 2011-12-09 14:22:15.534
!MESSAGE SVN: '0x00000107: Synchronizing' operation finished with error
!SUBENTRY 1 org.eclipse.team.svn.core.svnnature 4 0 2011-12-09 14:22:15.534
!MESSAGE Synchronize operation failed.
!STACK 0
java.lang.InternalError
    at sun.misc.URLClassPath$JarLoader.getResource(URLClassPath.java:755)
    at sun.misc.URLClassPath.getResource(URLClassPath.java:169)
    at sun.misc.URLClassPath.getResource(URLClassPath.java:221)
    at java.lang.ClassLoader.getBootstrapResource(ClassLoader.java:1151)
    at java.lang.ClassLoader.getResource(ClassLoader.java:1000)
    at java.lang.ClassLoader.getResource(ClassLoader.java:998)
    at java.lang.ClassLoader.getSystemResource(ClassLoader.java:1101)
    at javax.crypto.SunJCE_b.i(DashoA13*..)
    at javax.crypto.SunJCE_b.g(DashoA13*..)
    at javax.crypto.SunJCE_b$1.run(DashoA13*..)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.crypto.SunJCE_b.<clinit>(DashoA13*..)
    at javax.crypto.KeyAgreement.getInstance(DashoA13*..)
    at com.sun.net.ssl.internal.ssl.JsseJce.getKeyAgreement(JsseJce.java:241)
    at com.sun.net.ssl.internal.ssl.JsseJce.isEcAvailable(JsseJce.java:158)
    at com.sun.net.ssl.internal.ssl.CipherSuite$KeyExchange.isAvailable(CipherSuite.java:271)
    at com.sun.net.ssl.internal.ssl.CipherSuite.isAvailable(CipherSuite.java:143)
    at com.sun.net.ssl.internal.ssl.CipherSuiteList.buildAvailableCache(CipherSuiteList.java:210)
    at com.sun.net.ssl.internal.ssl.CipherSuiteList.getDefault(CipherSuiteList.java:233)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.init(SSLSocketImpl.java:508)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.<init>(SSLSocketImpl.java:451)
    at com.sun.net.ssl.internal.ssl.SSLSocketFactoryImpl.createSocket(SSLSocketFactoryImpl.java:56)
    at org.tmatesoft.svn.core.internal.util.SVNSocketFactory.createSSLSocket(SVNSocketFactory.java:73)
    at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.connect(HTTPConnection.java:186)
    at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:327)
    at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:275)
    at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:263)
    at org.tmatesoft.svn.core.internal.io.dav.DAVConnection.exchangeCapabilities(DAVConnection.java:516)
    at org.tmatesoft.svn.core.internal.io.dav.DAVConnection.open(DAVConnection.java:98)
    at org.tmatesoft.svn.core.internal.io.dav.DAVRepository.openConnection(DAVRepository.java:999)
    at org.tmatesoft.svn.core.internal.io.dav.DAVRepository.getRepositoryUUID(DAVRepository.java:146)
    at org.tmatesoft.svn.core.wc.SVNBasicClient.createRepository(SVNBasicClient.java:342)
    at org.tmatesoft.svn.core.wc.SVNBasicClient.createRepository(SVNBasicClient.java:330)
    at org.tmatesoft.svn.core.wc.SVNStatusClient.doStatus(SVNStatusClient.java:338)
    at org.tmatesoft.svn.core.javahl.SVNClientImpl.status(SVNClientImpl.java:300)
    at org.tmatesoft.svn.core.javahl.SVNClientImpl.status(SVNClientImpl.java:282)
    at org.polarion.team.svn.connector.svnkit.SVNKitConnector.status(SVNKitConnector.java:341)
    at org.eclipse.team.svn.core.extension.factory.ThreadNameModifier.status(ThreadNameModifier.java:608)
    at org.eclipse.team.svn.core.operation.local.RemoteStatusOperation$2.run(RemoteStatusOperation.java:147)
    at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doSubTask(ProgressMonitorUtility.java:118)
    at org.eclipse.team.svn.core.operation.AbstractActionOperation.protectStep(AbstractActionOperation.java:154)
    at org.eclipse.team.svn.core.operation.AbstractActionOperation.protectStep(AbstractActionOperation.java:149)
    at org.eclipse.team.svn.core.operation.local.RemoteStatusOperation.runImpl(RemoteStatusOperation.java:145)
    at org.eclipse.team.svn.core.operation.AbstractActionOperation.run(AbstractActionOperation.java:81)
    at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doTask(ProgressMonitorUtility.java:104)
    at org.eclipse.team.svn.core.operation.CompositeOperation.runImpl(CompositeOperation.java:95)
    at org.eclipse.team.svn.core.operation.AbstractActionOperation.run(AbstractActionOperation.java:81)
    at org.eclipse.team.svn.core.operation.LoggedOperation.run(LoggedOperation.java:39)
    at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doTask(ProgressMonitorUtility.java:104)
    at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doTaskExternal(ProgressMonitorUtility.java:90)
    at org.eclipse.team.svn.core.synchronize.AbstractSVNSubscriber.findChanges(AbstractSVNSubscriber.java:314)
    at org.eclipse.team.svn.core.synchronize.AbstractSVNSubscriber$UpdateStatusOperation$2.run(AbstractSVNSubscriber.java:349)
    at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doSubTask(ProgressMonitorUtility.java:118)
    at org.eclipse.team.svn.core.operation.AbstractActionOperation.protectStep(AbstractActionOperation.java:154)
    at org.eclipse.team.svn.core.operation.AbstractActionOperation.protectStep(AbstractActionOperation.java:149)
    at org.eclipse.team.svn.core.synchronize.AbstractSVNSubscriber$UpdateStatusOperation.runImpl(AbstractSVNSubscriber.java:347)
    at org.eclipse.team.svn.core.operation.AbstractActionOperation.run(AbstractActionOperation.java:81)
    at org.eclipse.team.svn.core.operation.LoggedOperation.run(LoggedOperation.java:39)
    at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doTask(ProgressMonitorUtility.java:104)
    at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doTaskExternal(ProgressMonitorUtility.java:90)
    at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doTaskExternal(ProgressMonitorUtility.java:81)
    at org.eclipse.team.svn.core.synchronize.AbstractSVNSubscriber.refresh(AbstractSVNSubscriber.java:186)
    at org.eclipse.team.svn.core.synchronize.UpdateSubscriber.refresh(UpdateSubscriber.java:73)
    at org.eclipse.team.core.subscribers.Subscriber.refresh(Subscriber.java:466)
    at org.eclipse.team.core.subscribers.SubscriberMergeContext.refresh(SubscriberMergeContext.java:85)
    at org.eclipse.team.core.mapping.provider.SynchronizationContext.refresh(SynchronizationContext.java:109)
    at org.eclipse.team.internal.ui.synchronize.RefreshModelParticipantJob.doRefresh(RefreshModelParticipantJob.java:69)
    at org.eclipse.team.internal.ui.synchronize.RefreshParticipantJob.run(RefreshParticipantJob.java:309)
    at org.eclipse.team.internal.ui.synchronize.RefreshModelParticipantJob.run(RefreshModelParticipantJob.java:117)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Caused by: java.io.FileNotFoundException: /usr/lib/jvm/java-6-sun-1.6.0.20/jre/lib/jce.jar
    at sun.misc.URLClassPath$JarLoader.getJarFile(URLClassPath.java:644)
    at sun.misc.URLClassPath$JarLoader.access$600(URLClassPath.java:540)
    at sun.misc.URLClassPath$JarLoader$1.run(URLClassPath.java:607)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.misc.URLClassPath$JarLoader.ensureOpen(URLClassPath.java:599)
    at sun.misc.URLClassPath$JarLoader.getResource(URLClassPath.java:753)
    ... 69 more

no, it always works. just one time it did not.


Solution

  • Looking at the JDK source code of sun.misc.URLClassPath and sun.misc.FileURLMapper, there is code in FileURLMapper.exists() that does the following:

    public boolean exists() {
        String path = getPath();
        File f = new File (path);
        return f.exists();
    }
    

    Assuming nothing crazy has happened like the jce.jar file was actually deleted (such as through upgrading version of Java while Eclipse is running), the File.exists() call might fail because of some other reason (out of memory / file descriptors possibly? On Unix file.exists() eventually calls the stat/stat64 function)