Я новичок в использовании Swagger Codegen, поэтому я предполагаю, что я делаю что-то совершенно не так. У меня есть удаленный swagger.json, который я использую для создания Java-клиента. Все работает и выглядит хорошо, но примеры использования в readme не ссылаются ни на один ключ API.
У меня нет доступа к удаленному API, который я использую, просто пытаюсь создать хороший Java SDK для взаимодействия с ним.
Это то, что я использую для генерации кода.
java -jar C:/Development/codegen/swagger-codegen-cli.jar generate
-a "client_id:XXXXXXXXXX,client_secret:YYYYYYYYYYYYY"
-i https://BLAH/swagger/v1/swagger.json -l java
-o C:/Development/workspace/JavaClient
-c C:/Development/workspace/JavaClient/java-genconfig.json
Тогда пример, который генерируется в read me, выглядит примерно так ...
public static void main(String[] args) {
BusinessGroupApi apiInstance = new BusinessGroupApi();
Integer businessGroupId = 56; // Integer | The ID of the business group to fetch.
String apiVersion = "1.0"; // String | The requested API version
try {
BusinessGroup result = apiInstance.getBusinessGroupAsync(businessGroupId, apiVersion);
System.out.println(result);
} catch (ApiException e) {
System.err.println("Exception when calling BusinessGroupApi#getBusinessGroupAsync");
e.printStackTrace();
}
}
Примечание на стороне
Когда я пытаюсь запустить пример, я получаю сообщение об ошибке
Failed to connect to localhost/0:0:0:0:0:0:0:1:443
Есть ли какие-то настройки, которые мне нужно установить, чтобы они искали службу в удаленном месте, а не локально?
EDIT
Я понял, что мне нужно изменить их чванство, потому что у них может быть не все в порядке.
Swagger Codegen Version = 2.4.5
swagger.json (исключая пути и определения) Я также скачал их локально и добавил дополнительную информацию, чтобы она генерировала больше информации. Я добавил host, basePath, схемы, потребляет, производит, security и securityDefinitions.
{
"swagger": "2.0",
"info": {
"version": "1.0",
"title": "removed"
},
"host": "apitest.removed.com",
"basePath": "/removed/api",
"schemes": [
"https"
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"security": [
{
"clientId": []
},
{
"clientSecret": []
}
],
"securityDefinitions": {
"clientId": {
"type": "apiKey",
"in": "header",
"name": "client_id"
},
"clientSecret": {
"type": "apiKey",
"in": "header",
"name": "client_secret"
}
}
}
Это фактически обновило readme, чтобы посмотреть, как я могу ожидать, что оно будет выглядеть
ApiClient defaultClient = Configuration.getDefaultApiClient();
// Configure API key authorization: client_id
ApiKeyAuth client_id = (ApiKeyAuth) defaultClient.getAuthentication("client_id");
client_id.setApiKey("YOUR API KEY");
// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
//client_id.setApiKeyPrefix("Token");
// Configure API key authorization: client_secret
ApiKeyAuth client_secret = (ApiKeyAuth) defaultClient.getAuthentication("client_secret");
client_secret.setApiKey("YOUR API KEY");
// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
//client_secret.setApiKeyPrefix("Token");
BusinessGroupApi apiInstance = new BusinessGroupApi();
Integer businessGroupId = 56; // Integer | The ID of the business group to fetch.
String apiVersion = "1.0"; // String | The requested API version
try {
BusinessGroup result = apiInstance.getBusinessGroupAsync(businessGroupId, apiVersion);
System.out.println(result);
} catch (ApiException e) {
System.err.println("Exception when calling BusinessGroupApi#getBusinessGroupAsync");
e.printStackTrace();
}
Тем не менее, когда я подключаю свои client_id и client_secret и пытаюсь запустить их, я получаю исключение в потоке "main" java.lang.NullPointerException
в удаленном.Tester.main (Tester.java:18). Я думаю, что у меня могут быть неправильно заданы определения безопасности.
Это не OAuth, но они требуют, чтобы client_id и client_secret передавались в параметрах заголовка.
РЕДАКТИРОВАТЬ 2
Exception when calling BusinessGroupApi#getBusinessGroupAsync
package.client.ApiException:
at package.client.ApiClient.handleResponse(ApiClient.java:927)
at package.client.ApiClient.execute(ApiClient.java:843)
at package.client.api.BusinessGroupApi.getBusinessGroupAsyncWithHttpInfo(BusinessGroupApi.java:148)
at package.client.api.BusinessGroupApi.getBusinessGroupAsync(BusinessGroupApi.java:133)
at Tester.main(Tester.java:30)
Строка 30 -> BusinessGroup result = apiInstance.getBusinessGroupAsync (businessGroupId, apiVersion);
РЕДАКТИРОВАТЬ 3
Я включил отладку с
defaultClient.setDebugging(true);
Похоже, что это работает, но по некоторым причинам мне не нравятся мои client_id и client_secret, несмотря на то, что они оба были теми, что я использовал в почтальоне.
--> GET <removed>/api/api/businessGroups/56?api-version=1.0 HTTP/1.1
Accept: application/json
client_secret: <removed>
client_id: <removed>
User-Agent: Swagger-Codegen/1.0-SNAPSHOT/java
--> END GET
<-- HTTP/1.1 403 (393ms)
Content-Length: 80
Content-Type: application/json
Date: Mon, 10 Jun 2019 20:05:07 GMT
QL-LB-Appliance: <removed>
QL-LB-Pool: <removed>
QL-LB-Server: <removed>
OkHttp-Sent-Millis: <removed>
OkHttp-Received-Millis: <removed>
{ "error": "invalid_client", "description": "wrong client_id or client_secret" }
<-- END HTTP (80-byte body)
Exception when calling BusinessGroupApi#getBusinessGroupAsync
<removed>.client.ApiException:
at <removed>.client.ApiClient.handleResponse(ApiClient.java:927)
at <removed>.client.ApiClient.execute(ApiClient.java:843)
at <removed>.client.api.BusinessGroupApi.getBusinessGroupAsyncWithHttpInfo(BusinessGroupApi.java:148)
at <removed>.client.api.BusinessGroupApi.getBusinessGroupAsync(BusinessGroupApi.java:133)
at Tester.main(Tester.java:32)