-1
public class Ussd {

    private static Logger logger = LogManager.getLogger(Ussd.class);
    private  static  String query;

    public static void ussdMessages(RoutingContext routingContext){
        String codeService = routingContext.getBodyAsJson().getString("codeService");
        query=getServiceQuery(codeService);
        System.out.println("Query : "+query);
    }

    public  static String  getServiceQuery(String codeService){
        JsonObject params = new JsonObject();
        params.put("QUERY", Queries.DB_SELECT_SERVICE_QUERY);
        params.put("PARAMS", new JsonArray().add(codeService));
        System.out.println(params);
        DB.select(params, res -> {
            if (res.succeeded()) {
               query = res.result().getJsonArray("results").getJsonArray(0).getString(0);
                System.out.println(query);
            } else {
                query = res.cause().getMessage();
            }
        });
        return query;
    }
}

The method getServiceQuery returns my exact result and I stock it into static query but after recall inside method ussdMesages, it returns null from the first request using Postman. For the second request, it returns the correct result. I don't know why.

marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
OLH
  • 194
  • 3
  • 12

1 Answers1

1

Your getServiceQuery method does async work(DB.select), so in your case you are returning the query before it getting processed. Change the return type of the function from String to Future.

public class Ussd {

    private static Logger logger = LogManager.getLogger(Ussd.class);
    private  static  String query;

    public static void ussdMessages(RoutingContext routingContext){
        String codeService = routingContext.getBodyAsJson().getString("codeService");
        getServiceQuery(codeService).setHandler(r -> {
                System.out.println("query : "+r.result());
            });
    }

    public static Future<String> getServiceQuery(String codeService){
        Future<String> future = Future.future();
        JsonObject params = new JsonObject();
        params.put("QUERY", Queries.DB_SELECT_SERVICE_QUERY);
        params.put("PARAMS", new JsonArray().add(codeService));
        System.out.println(params);
        DB.select(params, res -> {
            if (res.succeeded()) {
               query = res.result().getJsonArray("results").getJsonArray(0).getString(0);
                System.out.println(query);
                future.complete(query);
            } else {
                future.fail(res.cause().getMessage());
            }
        });
        return future;
    }
}
marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
Niraj Chauhan
  • 7,677
  • 12
  • 46
  • 78