【问题标题】:Fail to catch Exception捕捉异常失败
【发布时间】:2012-03-30 19:41:44
【问题描述】:

我正在使用 SVNKit,我发现测试服务器身份验证的唯一方法是使用 SVNRepository 类的方法 testConnection()

该方法不返回布尔值,而是抛出异常。

public abstract void testConnection()
                         throws SVNException

问题是,我得到了一个coldfusion错误,而不是被捕获:

这是我的代码:

        clientManager = CreateObject("java", "org.tmatesoft.svn.core.wc.SVNClientManager").newInstance();

        authManagerJO = CreateObject("java", "org.tmatesoft.svn.core.wc.SVNWCUtil").
                createDefaultAuthenticationManager(ARGUMENTS.username, JavaCast("String", ARGUMENTS.password));
        authManagerJO.setAuthenticationForced(true);
        clientManager.setAuthenticationManager(authManagerJO); 
        svnDavRepoFactory = CreateObject("java", "org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory").setup();
        repositoryUrlJO = CreateObject("java", "org.tmatesoft.svn.core.SVNURL").parseURIDecoded(APPLICATION.svn_repository_audifiles);
        svnRepository = clientManager.createRepository(repositoryUrlJO, true);
        try{
            svnRepository.testConnection();
        }
        catch (Exception e){
            svnRepository = "";
        }

【问题讨论】:

  • 注意:如果登录成功,该方法不会失败。只有在抛出异常时才会失败(用户名/密码错误)。
  • 使用catch( Throwable e )时是否也会出现这种情况?
  • @Robin catch (Throwable e) 也失败了。
  • @FrancisP:声称在“SVNKitHelper.cfc”中——这不是普通的Java吗?我以前没有发现。也许这就是关键……
  • @Jon Skeet:不,它是 ColdFusion 组件使用的 java 对象。也许,try..catch 语法在我的 <cfscript> 标记中无效。

标签: java exception-handling coldfusion coldfusion-8 svnkit


【解决方案1】:

嗯,它完全有可能抛出一个不是Exception 的异常——另一种Throwable。你可以捕捉Throwable,虽然那会很苛刻......捕捉它一次,记录确切的异常类型然后捕捉那个是合理的......

【讨论】:

  • 另外,您可以检查 API 并准确找出它抛出的 Throwable 类型,然后捕获它(或那些)。
  • @jpm:当然,假设它已记录在案 - 如果它是未经检查的异常,则可能不是...
  • 我会假设测试连接的方法(并且不返回布尔值)将具有唯一使其有用的记录。再说一次,我有点乐观。
  • @jpm:我希望他们会使用 either 已检查异常 RuntimeException 的子类,但显然情况并非如此...
  • @FrancisP - 异常类的完整路径,例如 org.tmatesoft.svn.core.SVNExceptionjava.lang.Exception
【解决方案2】:

您是否尝试捕获 Any 而不是 Exception

这样,您一定会捕获所有内容,即使异常不是像 Jon 提议的 Exception

【讨论】:

  • 成功了! Exception 不是可识别的 ColdFusion 类型。 Any 是用于对象的类型。
【解决方案3】:

catch (any e) {
    write dump(e);
    abort;
}

然后你会看到实际的错误。

【讨论】:

    猜你喜欢
    • 2012-01-10
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    相关资源
    最近更新 更多