Swagger Codegen не генерирует API Key пример в своей документации - PullRequest
0 голосов
/ 10 июня 2019

Я новичок в использовании 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)
...