AuthTicketsHelper.getTicket() returns null



我的公司使用Perforce进行版本控制,我正在编写使用p4java自动化Perforce使用的软件。我遇到了一个问题,即使我正在传递有效信息以使用计算机上的p4tickets文件,我的代码也无法连接到Perforce服务器。

首先,我登录以通过运行"p4login"来获得p4ticket,该操作创建了~/.p4ctickets文件。但是,当我运行使用p4java使用p4ticket文件进行连接的程序时,它会返回null。

AuthTicket auth = AuthTicketsHelper.getTicket(username, serverAddr, p4TicketsFilePath);
// auth == null

我已经仔细检查了我传递的用户名是否与我使用"p4login"时的$P4USER环境变量匹配,以及serverAddr是否与我的$P4PORT引用的主机名匹配。p4TicketsFilePath也存在,并且是p4tickets文件的正确路径,该文件包含我的票证,但尚未过期。我正在寻找getTicket仍然返回null的原因。

您可以通过从AuthTicketsHelper复制源代码并插入打印语句来调试此问题。这是我的记录器:

private static final Logger logger = LoggerFactory.getLogger(YourClass.class);

(如果您没有记录器,您可以使用String.format("…%s…%s")执行System.out.println()。)然后,复制这个代码。

AuthTicket auth;
{
    AuthTicket foundTicket = null;
    String serverAddress = serverAddr;
    String ticketsFilePath = p4TicketsFilePath;
    String userName = username;
    if (serverAddress != null) {
        logger.info("P4TICKETS 1");
        if (serverAddress.indexOf(':') == -1) {
            serverAddress += "localhost:" + serverAddress;
            logger.info("P4TICKETS 2");
        }
        for (AuthTicket ticket : AuthTicketsHelper.getTickets(ticketsFilePath)) {
            logger.info("P4TICKETS 3 {} - {} - {} - {}", serverAddress, ticket.getServerAddress(), userName, ticket.getUserName());
            if (serverAddress.equals(ticket.getServerAddress())
                    && (userName == null || userName.equals(ticket
                            .getUserName()))) {
                logger.info("P4TICKETS 4");
                foundTicket = ticket;
                break;
            }
        }
        logger.info("P4TICKETS 5");
    }
    auth = foundTicket;
}

按照输出中的代码路径查看出了什么问题。在我的例子中,服务器名称是代码中的主机名,但我的.p4tickets文件有一个服务器名称的IP地址。

相关内容

  • 没有找到相关文章

最新更新