我有以下源代码:
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/