5

I am trying to use a third party api in the project where the way to access those apis are provide in swagger

When i generate the client using swagger and try to use in my local i am getting the error has

io.swagger.client.ApiException: java.net.SocketTimeoutException: connect timed out
    at io.swagger.client.ApiClient.execute(ApiClient.java:973)
    at io.swagger.client.api.PlatformApi.getAppsWithHttpInfo(PlatformApi.java:729)
    at io.swagger.client.api.PlatformApi.getApps(PlatformApi.java:716)
    at io.swagger.client.api.testSample.getNodesTest(testSample.java:16)
    at io.swagger.client.api.testSample.main(testSample.java:29)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Caused by: java.net.SocketTimeoutException: connect timed out
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at com.squareup.okhttp.internal.Platform.connectSocket(Platform.java:120)
    at com.squareup.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:141)
    at com.squareup.okhttp.internal.io.RealConnection.connect(RealConnection.java:112)
    at com.squareup.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:184)
    at com.squareup.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:126)
    at com.squareup.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:95)
    at com.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:281)
    at com.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:224)
    at com.squareup.okhttp.Call.getResponse(Call.java:286)
    at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:243)
    at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:205)
    at com.squareup.okhttp.Call.execute(Call.java:80)
    at io.swagger.client.ApiClient.execute(ApiClient.java:969)
    ... 9 more

i am trying to use one of the method from the generated client as shown below

package io.swagger.client.api;

import com.squareup.okhttp.OkHttpClient;
import io.swagger.client.ApiClient;
import io.swagger.client.ApiException;
import io.swagger.client.Configuration;
import io.swagger.client.model.AppModel;
import io.swagger.client.model.NodeModel;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

public class testSample {
    private final PlatformApi api = new PlatformApi();
    public void getNodesTest() throws ApiException {
        List<AppModel> response = api.getApps();
        System.out.print("------------------------inside testsample------------------------");
        System.out.print(response);
    }

    public static void main(String args[]){
        testSample t1=new testSample();
        System.out.print("------------------------inside main------------------------");
        try{
            ApiClient defaultApiClient = Configuration.getDefaultApiClient();
            ApiClient apiClient = t1.api.getApiClient();
            System.out.println(defaultApiClient);
            System.out.println(apiClient);
            t1.getNodesTest();
        }
        catch(Exception e){
            System.out.println("inside exeption");
            e.printStackTrace();
        }



    }
}

Please provide some suggestion how to use the generated java client from swagger in local

dhana lakshmi
  • 847
  • 1
  • 12
  • 29

2 Answers2

11

I hope these helps someone;

DefaultApi defaultApi = new DefaultApi();
ApiClient apiClient = new ApiClient();
apiClient.setBasePath("http://....");
apiClient.addDefaultHeader("Authorization", "bearer TOKEN");
OkHttpClient httpClient = apiClient.getHttpClient();
httpClient.setConnectTimeout(60, TimeUnit.SECONDS);
httpClient.setReadTimeout(60, TimeUnit.SECONDS);
httpClient.setWriteTimeout(60, TimeUnit.SECONDS);
defaultApi.setApiClient(apiClient);

SomeModel var1 = defaultApi.getNodesTest();

generator sample command;

> java -jar swagger-codegen-cli-2.2.2.jar generate -l java -o myModule --library okhttp-gson -i http://..../swagger

to download jar file;

http://central.maven.org/maven2/io/swagger/swagger-codegen-cli/

for more info;

https://github.com/swagger-api/swagger-codegen

kaya
  • 724
  • 10
  • 24
  • I was using apiClient.setConnectTimeout(60) and was getting a SocketTimeoutException. @kaya tipped me to the problem, which is the fact that ApiClient defaults TimeUnit to milliseconds. Calling the method on httpClient, as kaya does, or refactoring my timeout into milliseconds both work fine. Thanks. – Stephen Johns Jun 22 '18 at 14:38
2

The error below suggests that the Java API client couldn't connect to the API server:

io.swagger.client.ApiException: java.net.SocketTimeoutException: connect timed out

I would suggest you to verify the Swagger/OpenAPI spec to ensure it has a proper host setting, e.g.

host: petstore.swagger.io

e.g. https://github.com/swagger-api/swagger-codegen/blob/master/modules/swagger-codegen/src/test/resources/2_0/petstore.yaml#L12

Ref: Swagger 2.0 spec: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#swagger-object

William Cheng
  • 10,137
  • 5
  • 54
  • 79