提问人:lucky 提问时间:11/16/2023 最后编辑:lucky 更新时间:11/16/2023 访问量:39
方法抛出“javax.net.ssl.SSLException”异常
Method threw 'javax.net.ssl.SSLException' exception
问:
我编写了一个 JUnit 来测试调用以下 getAuthToken 的方法之一
public String getAuthToken() throws URISyntaxException, IOException, InterruptedException {
String formBody = String.format("grant_type=client_credentials&client_id=%s&client_secret=%s&scope=%s",
URLEncoder.encode(clientId, StandardCharsets.UTF_8),
URLEncoder.encode(clientSecret, StandardCharsets.UTF_8),
URLEncoder.encode(scope, StandardCharsets.UTF_8));
HttpRequest authRequest = HttpRequest.newBuilder()
.uri(new URI(epimTokenUri))
.header("Content-Type", "application/x-www-form-urlencoded")
.POST(HttpRequest.BodyPublishers.ofString(formBody))
.build();
HttpResponse<String> authResponse = client.send(authRequest, HttpResponse.BodyHandlers.ofString());
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(authResponse.body());
return jsonNode.get("access_token").asText();
}
为此,我使用 WireMock。以下是用于获取令牌的 WireMock 的映射
{
"request": {
"method": "POST",
"url": "/.default/token"
},
"response": {
"status": 200,
"jsonBody": {
"access_token": "testToken",
"expires_in": 3600,
"refresh_expires_in": 0,
"token_type": "Bearer",
"not-before-policy": 0,
"scope": "https://localhost:9082/.default"
},
"headers": {
"Content-Type": "application/x-www-form-urlencoded"
}
}
}
这给出了错误,因为方法抛出了“javax.net.ssl.SSLException”异常。在生产线上HttpResponse<String> authResponse = client.send(authRequest, HttpResponse.BodyHandlers.ofString());
谁能帮我解决这个问题?这里出了什么问题,或者用任何其他方式来模拟这个方法在我的 JUnit 中使用?以下是完整的 stackTrace
答:
0赞
lucky
11/16/2023
#1
在我的 test.yaml 文件中,tokenURI 带有 https,因此它需要我没有通过 WireMock 提供的证书。我用http替换了它,它通过了。解决此问题的另一种方法是使用证书设置 WireMock 以接受 SSL。
评论
exception.printStackTrace()