java - Sonar-ws-client 返回 401 错误,即使我可以在 UI 中执行搜索

标签 java sonarqube

我有以下源代码:

package com.sample.sonar.report;

import org.sonar.wsclient.Host;
import org.sonar.wsclient.Sonar;
import org.sonar.wsclient.SonarClient;
import org.sonar.wsclient.connectors.HttpClient4Connector;
import org.sonar.wsclient.services.*;
import org.sonar.wsclient.issue.*;
import java.util.List;


public class App {
   public static void main(String args[]) {

    try {



        String url = "http://sample.url.com:9000";
        String login = "userid";
        String password = "password";


        SonarClient client = SonarClient.create(url);
        client.builder().login(login);
        client.builder().password(password);


        IssueQuery query = IssueQuery.create();
        query.rules("S1081");
        query.languages("c");
        IssueClient issueClient = client.issueClient();
        System.out.println("About to Run query\n");
        Issues issues = issueClient.find(query);
        System.out.println("Ran query\n");
        List<Issue> issueList = issues.list();

        for (int i = 0; i < issueList.size(); i++) {
           System.out.println(issueList.get(i).projectKey() + " " +
                              issueList.get(i).componentKey() + " " +
                              issueList.get(i).line() + " " +
                              issueList.get(i).ruleKey() + " " +
                              issueList.get(i).severity() + " " +
                              issueList.get(i).message());
         }

    } catch (Exception ex) {
      System.out.println(ex);
    }
  }
}

虽然我可以登录 Sonar 并搜索结果,但我收到以下运行时错误

org.sonar.wsclient.base.HttpException: Error 401 on http://sample.url.com:9000/api/issues/search?languages=c&rules=S1081

我相信这是一个 401 错误,映射到未经授权。我是否缺少某种超出我正在做的事情的身份验证?提前致谢。

最佳答案

SonarClient#builder() 是一个静态方法,每次调用时都会返回一个新的构建器实例。所以基本上,当你写:

SonarClient client = SonarClient.create(url);
client.builder().login(login);
client.builder().password(password);

您正在一个 Builder 对象上设置登录名,在另一个 Builder 对象上设置密码,并且对其中任何一个对象不执行任何操作。

您使用的对象是由 SonarClient#create(String url) 方法创建的 SonarClient,它实际上没有登录名或密码,因此是 401 HTTP错误。

你应该写的是:

SonarClient client = SonarClient.builder()
      .url(url)
      .login(login)
      .password(password)
      .build();

关于java - Sonar-ws-client 返回 401 错误,即使我可以在 UI 中执行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31882971/

相关文章:

java - 为什么ServiceLoader总是重新实例化服务?

java - HMAC 一个 php 字节数组

java - Golang - gomobile 基本脚本编译错误

sonarqube - 无法执行 Sonar : Caused by: Java heap space

testing - api/tests 的替代品是什么?

SonarQube 不保存设置

amazon-web-services - 如何增加 AWS ECS fargate 中的 vm.max_map_count?

java - RMI:如何将服务器端和客户端类放置到网络可访问的位置?

java - 将 Mat 中的图像转换为 BufferedImage

javascript - Sonar 扫描仪 - 错误 : Failed to parse file with espree parser in module mode