Error in V3 API

Please help me resolving this error. My app was working fine till 22 august. i have upgraded to v3 but still i am not able to resolve this error. please tell me what i have to change in this file so that it starts working.

My MarketFeederClient is :-

public class  {

    public interface MarketDataListener {
        void onMarketDataReceived(String data);
    }

    private final MarketDataListener listener;
    private final Context context;
    private WebSocketClient client;

    public MarketFeederClient(Context context, String accessToken, MarketDataListener listener) {
        this.listener = listener;
        this.context = context;
        connectToMarketFeed(accessToken);
    }

    private void connectToMarketFeed(String accessToken) {
        new Thread(() -> {
            try {
                // Close any existing WebSocket connection
                if (client != null && client.isOpen()) {
                    try {
                        client.closeBlocking();
                    } catch (Exception ignore) {
                    }
                    client = null;
                }

                // Authenticate and get a fresh one-time WebSocket URI
                ApiClient authenticatedClient = authenticateApiClient(accessToken);
                URI serverUri = getFreshAuthorizedWebSocketUri(authenticatedClient);
                Log.d("MarketFeederClient", "Fresh WS URI: " + serverUri);

                // Create and connect new WebSocket
                client = createWebSocketClient(serverUri);
                client.connectBlocking(); // Ensure connection completes

            } catch (Exception e) {
                Log.e("MarketFeederClient", "Error connecting to feed", e);
            }
        }).start();
    }

    public void close() {
        if (client != null && client.isOpen()) {
            try {
                client.closeBlocking();
            } catch (Exception e) {
                e.printStackTrace();
            }
            client = null;
        }
    }

    private ApiClient authenticateApiClient(String upstoxToken) {
        ApiClient defaultClient = Configuration.getDefaultApiClient();
        OAuth oAuth = (OAuth) defaultClient.getAuthentication("OAUTH2");
        oAuth.setAccessToken(upstoxToken);
        return defaultClient;
    }

    private URI getFreshAuthorizedWebSocketUri(ApiClient authenticatedClient) throws ApiException {
        WebsocketApi websocketApi = new WebsocketApi(authenticatedClient);
        WebsocketAuthRedirectResponse response = websocketApi.getMarketDataFeedAuthorize("3.0"); // V3 endpoint
        return URI.create(response.getData().getAuthorizedRedirectUri());
    }

    private WebSocketClient createWebSocketClient(URI serverUri) {
        return new WebSocketClient(serverUri) {
            @Override
            public void onOpen(ServerHandshake handshakedata) {
                Log.d("MarketFeederClient", "WebSocket Opened");
                sendSubscriptionRequest(this);
            }

            @Override
            public void onMessage(String message) {
                if (listener != null) listener.onMarketDataReceived(message);
            }

            @Override
            public void onMessage(ByteBuffer bytes) {
                handleBinaryMessage(bytes);
            }

            @Override
            public void onClose(int code, String reason, boolean remote) {
                if (listener != null)
                    listener.onMarketDataReceived("Connection closed: " + reason);
            }

            @Override
            public void onError(Exception ex) {
                Log.e("MarketFeederClient", "WebSocket Error", ex);
            }
        };
    }

    private void sendSubscriptionRequest(WebSocketClient client) {
        JsonObject requestObject = constructSubscriptionRequest();
        client.send(requestObject.toString().getBytes(StandardCharsets.UTF_8));
    }

    private JsonObject constructSubscriptionRequest() {
        JsonObject dataObject = new JsonObject();
        dataObject.addProperty("mode", "full");

        List<String> instrumentKeys = new ArrayList<>();
        SharedPreferences sharedPreferences = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
        String callKey = sharedPreferences.getString(KEY_CALL_KEY, "");
        String putKey = sharedPreferences.getString(KEY_PUT_KEY, "");

        if (!callKey.isEmpty()) instrumentKeys.add(callKey);
        if (!putKey.isEmpty()) instrumentKeys.add(putKey);

        Log.d("MarketFeederClient", "callKey: " + callKey);
        Log.d("MarketFeederClient", "putKey: " + putKey);

        // Always include Nifty 50
        instrumentKeys.add("NSE_INDEX|Nifty 50");

        JsonArray instrumentKeysArray = new Gson().toJsonTree(instrumentKeys).getAsJsonArray();
        dataObject.add("instrumentKeys", instrumentKeysArray);

        JsonObject mainObject = new JsonObject();
        mainObject.addProperty("guid", UUID.randomUUID().toString());
        mainObject.addProperty("method", "sub");
        mainObject.add("data", dataObject);

        return mainObject;
    }

    private void handleBinaryMessage(ByteBuffer bytes) {
        try {
            MarketDataFeed.FeedResponse feedResponse = MarketDataFeed.FeedResponse.parseFrom(bytes.array());
            String jsonFormat = JsonFormat.printer().print(feedResponse);
            if (listener != null) listener.onMarketDataReceived(jsonFormat);
        } catch (InvalidProtocolBufferException e) {
            Log.e("MarketFeederClient", "Binary parse error", e);
        }
    }
}

and it keeps showing this error.

2025-08-28 07:02:08.627 MarketFeederClient com.devdroid.realtime

Error connecting to feed (Ask Gemini)
com.upstox.ApiException: Gone
at com.upstox.ApiClient.handleResponse(ApiClient.java:936)
at com.upstox.ApiClient.execute(ApiClient.java:852)
at io.swagger.client.api.WebsocketApi.getMarketDataFeedAuthorizeWithHttpInfo(WebsocketApi.java:295)
at io.swagger.client.api.WebsocketApi.getMarketDataFeedAuthorize(WebsocketApi.java:281)
at com.devdroid.realtime.upstox.MarketFeederClient.getFreshAuthorizedWebSocketUri(MarketFeederClient.java:101)
at com.devdroid.realtime.upstox.MarketFeederClient.lambda$connectToMarketFeed$0$com-devdroid-realtime-upstox-MarketFeederClient(MarketFeederClient.java:68)
at com.devdroid.realtime.upstox.MarketFeederClient$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
at java.lang.Thread.run(Thread.java:1012)

Hi @ABHISHEK_7210231, please refer for Websocket V3 example codes

thank you soo much, it really helps me debug my problem.

1 Like