如何解决IOException in get API Call AzureDevOps
我想调用 AZDO 到 get a TestPlan,但是当我尝试时,它返回一个 IOException,我不明白为什么
String testSuiteURI = "https://dev.azure.com/" +organization +"/" + project + "/_apis/testplan/Plans/" + planId + "?api-version=6.0-preview.1";
HttpGet httpGet = new HttpGet(testSuiteURI);
try {
CloseableHttpClient httpClient = HttpClients.custom().setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE).setSSLContext(getSslContext()).build();
httpGet.setHeader(HttpHeaders.CONTENT_TYPE,"application/json");
httpGet.setHeader(HttpHeaders.AUTHORIZATION,"Bearer " + accessToken);
//instantiate the response handler
ResponseHandler<String> responseHandler = new MyResponseHandler();
String response = httpClient.execute(httpGet,responseHandler);
httpClient.close();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}
这里是堆栈跟踪
DEBUG [org.apache.http.client.protocol.RequestAddCookies] CookieSpec 选择:默认 DEBUG [org.apache.http.client.protocol.RequestAuthCache] 未在上下文中设置身份验证缓存 DEBUG [org.apache.http.impl.conn.PoolingHttpClientConnectionManager] 连接请求:[路由:{s}->https://dev.azure.com:443][总保持活动:0;分配的路由:0 of 2;分配总数:20 个中的 0 个] DEBUG [org.apache.http.impl.conn.PoolingHttpClientConnectionManager] 连接租用:[id: 0][route: {s}->https://dev.azure.com:443][total keep alive: 0;分配的路线:2 个中的 1 个;分配总数:20 个中的 1 个] 调试 [org.apache.http.impl.execchain.MainClientExec] 打开连接 {s}->https://dev.azure.com:443 调试 [org.apache.http.impl.conn.DefaultHttpClientConnectionOperator] 连接到 dev.azure.com/13.107.42.20:443 调试 [org.apache.http.conn.ssl.SSLConnectionSocketFactory] 连接套接字到 dev.azure.com/13.107.42.20:443 超时 0 调试 [org.apache.http.impl.conn.DefaultManagedHttpClientConnection] http-outgoing-0:关闭连接 DEBUG [org.apache.http.impl.execchain.MainClientExec] 连接被丢弃 DEBUG [org.apache.http.impl.conn.PoolingHttpClientConnectionManager] 连接发布:[id: 0][route: {s}->https://dev.azure.com:443][total keep alive: 0;分配的路由:0 of 2;分配总数:20 个中的 0 个] 信息 [org.apache.http.impl.execchain.RetryExec] 处理对 {s}->https://dev.azure.com:443 的请求时捕获的 I/O 异常 (java.net.SocketException):不允许操作 DEBUG [org.apache.http.impl.execchain.RetryExec] 不允许操作
解决方法
可以参考this thread用java调用azure devops REST api。以下代码使用 devops REST api 获取工作项:
package com.restapi.sample;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;
import java.util.Scanner;
import org.apache.commons.codec.binary.Base64;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
public class ResApiMain {
static String ServiceUrl = "https://dev.azure.com/<your_org>/";
static String TeamProjectName = "your_team_project_name";
static String UrlEndGetWorkItemById = "/_apis/wit/workitems/";
static Integer WorkItemId = 1208;
static String PAT = "your_pat";
public static void main(String[] args) {
try {
String AuthStr = ":" + PAT;
Base64 base64 = new Base64();
String encodedPAT = new String(base64.encode(AuthStr.getBytes()));
URL url = new URL(ServiceUrl + TeamProjectName + UrlEndGetWorkItemById + WorkItemId.toString());
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestProperty("Authorization","Basic " + encodedPAT);
System.out.println("URL - " + url.toString());
System.out.println("PAT - " + encodedPAT);
con.setRequestMethod("GET");
int status = con.getResponseCode();
if (status == 200){
String responseBody;
try (Scanner scanner = new Scanner(con.getInputStream())) {
responseBody = scanner.useDelimiter("\\A").next();
System.out.println(responseBody);
}
try {
Object obj = new JSONParser().parse(responseBody);
JSONObject jo = (JSONObject) obj;
String WIID = (String) jo.get("id").toString();
Map<String,String> fields = (Map<String,String>) jo.get("fields");
System.out.println("WorkItemId - " + WIID);
System.out.println("WorkItemTitle - " + fields.get("System.Title"));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
con.disconnect();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。