我正在用Java创建一个应用程序并使用jGit(继续到how to authorize an user using jGit)。目前我能够隔离异常,如果用户提供无效凭证,我会得到not authorized
,如果用户无法访问所声明的回购,我会得repository not found
。现在我的问题是,用户正在进行身份验证,因为用户无权访问repo,第二个异常被抛出。但是在这里我想在另一个类中处理它,即我希望这个类只处理用户的身份验证。以下是我的代码
import java.io.File;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;
public class AuthenticateanUser {
public static void main(String[] args) throws Exception {
final String REMOTE_URL = "https://myRepo.git";
// prepare a new folder for the cloned repository
File localPath = File.createTempFile("TestGitRepository", "");
localPath.delete();
// then clone
try (Git result = Git.cloneRepository().setURI(REMOTE_URL)
.setCredentialsProvider(new UsernamePasswordCredentialsProvider("myId", "myPwd"))
.setDirectory(localPath).call()) {
System.out.println("Having repository: " + result.status());
} catch (Exception e) {
if (e.getMessage().toLowerCase().contains("repository not found"))
System.out.println("Exception Repo not found");
else if (e.getMessage().toLowerCase().contains("not authorized"))
System.out.println("Exception Invalid Credentials");
else
System.out.println(e);
}
}
}
请让我知道我哪里出错了,我该如何解决这个问题。
由于
答案 0 :(得分:0)
您应该链接异常而不能使用顶级异常类。克隆时会抛出GitAPIException。您可以先尝试捕获可能的案例,让主要的Exception处理休息。
public static <R>R handleClone(String uri,File local,boolean bare,Function<Git,R> fn){
try {
Git g=Git.cloneRepository().setURI(uri).setBare(bare).setDirectory(local).call();
return handle(g,fn);
}
catch ( GitAPIException e) {
throw new IllegalStateException(e);
}
}
异常链接示例:
catch ( IOException e) {
return new Status(IStatus.ERROR,GitActivator.PI_GIT,"Error cloning git repository",e);
}
catch ( CoreException e) {
return e.getStatus();
}
catch ( GitAPIException e) {
return getGitAPIExceptionStatus(e,"Error cloning git repository");
}
catch ( JGitInternalException e) {
return getJGitInternalExceptionStatus(e,"Error cloning git repository");
}
catch ( Exception e) {
return new Status(IStatus.ERROR,GitActivator.PI_GIT,"Error cloning git repository",e);
}
return Status.OK_STATUS;
}