looking for some solutions? You are welcome.

SOLVED: @Retryable is not working when call from a method

Shilpi:

below is my application class, the flow is like DEToken class from here and fro DEToken i am call RestConnection where i have @retryable method.

@SpringBootApplication
@EnableRetry 
public class SpringBootTrfficApplication implements CommandLineRunner{  
enter code here
@Autowired
DEToken deToken;

@Autowired
SyncService syncService;
public static void main(String[] args) {
    SpringApplication.run(SpringBootTrfficApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
    deToken.getToken();
        }
}

DEToken class: from getToken i am calling RestConnect where i have @Retrable method

@Service
public class DEToken {
private Logger logger = LogManager.getLogger(getClass());

@Autowired
RestConnection restConnection;

@Autowired
private Environment env;

public String accessToken;

public void getToken() {
    System.out.println("hello from get token");
    //String getJsonPayload = "{\"Query\":{\"RegisterExtensionWithDE\":{\"pid\": \"\",\"providerInsName\":"+ env.getProperty("provider.ins")+"}}}";
    //String str = restConnection.restPost(env.getProperty("rest.de.url"), getJsonPayload);

    try {
    String getJsonPayload = "{\"Query\":{\"RegisterExtensionWithDE\":{\"pid\": \"\",\"providerInsName\":"+ env.getProperty("provider.ins")+"}}}";
    StringBuffer tokenResult = restConnection.restPost(env.getProperty("rest.de.url"), getJsonPayload);
    System.out.println(tokenResult);
    JSONObject xmlJSONObj = XML.toJSONObject(tokenResult.toString());
    JSONObject registration = new JSONObject();
    if (xmlJSONObj.has("Registration")){
        registration  = xmlJSONObj.getJSONObject("Registration");
        if (registration.has("accessToken")){
            accessToken = registration.get("accessToken").toString();
        }
        else
            logger.info("no accessToken from DE");

    }
    else
        logger.info("no Registration object from DE");

    }
    catch (Exception e) {
        logger.error("Exception while fetching accesstoken from DE ");
        logger.error(e.getMessage());
    }
}

}

my rest connection class where i have retryable method.

@Service
public class RestConnection {

private Logger logger = LogManager.getLogger(getClass());

@Autowired
private Environment env;

public void setBaseUrl(String value, String ip){
    //baseUrl = value;
    HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> hostname.equals(ip));
}
    /*
     * Rest post call
      */

@Retryable(value = {IOException.class, ConnectException.class}, maxAttempts = 4, backoff = @Backoff(5000))
public StringBuffer restPost(String restUrl, String payload) {
    StringBuffer sb = new StringBuffer();
    HttpURLConnection  conn = null;
    try{
        URL url = new URL( restUrl);
        String protocol = url.getProtocol();
        if(protocol.toLowerCase().equals("http")){
            conn = (HttpURLConnection)url.openConnection();
        }else if(protocol.toLowerCase().equals("https")){
            //setTrustedCert();
            conn = (HttpsURLConnection)url.openConnection();
        }else{
            logger.info("Protocol is neither HTTP nor HTTPS");
        }
        conn.setDoOutput(true);
        conn.setDoInput(true);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setRequestProperty("Accept", "application/json");
        conn.setRequestProperty("version", env.getProperty("de.version"));
        conn.setRequestProperty("accessToken", env.getProperty("access.token"));
        conn.setRequestProperty("requestHost", env.getProperty("server.de.host"));
        conn.setRequestProperty("requestPort", env.getProperty("server.port"));
        conn.setRequestProperty("requestProtocol", env.getProperty("server.de.protocol"));
        PrintWriter pout = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "UTF-8"), true);
        pout.print(payload);
        pout.flush();
        pout.close();

        InputStream isi = conn.getInputStream();
        InputStreamReader isr = new InputStreamReader(isi);
        int numCharsRead1;
        char[] charArray1 = new char[1024];

        while ((numCharsRead1 = isr.read(charArray1)) > 0) {
            sb.append(charArray1, 0, numCharsRead1);
        }
        isr.close();
        isi.close();
    }catch (MalformedURLException e) {
        logger.error("MalformedURLException in restAccessTokenPOST..." + e.getMessage());
        //e.printStackTrace();
    } catch (IOException e) {
        logger.error("IOException in restAccessTokenPOST..." + e.getMessage());
        e.printStackTrace();
    }catch (Exception e) {
        logger.error("Exception in restAccessTokenPOST..." + e.getMessage());
        e.printStackTrace();
    }       
    finally{
        if(null != conn)
            conn.disconnect();
    }
    return sb;

}

@Recover
public String helpHere(ConnectException cause) {

        System.out.println("Recovery place! ConnectException");
        return "Hello";
}

@Recover
public String helpHere(IOException cause) {

        System.out.println("Recovery place! ArithmeticException");
        return "Hello";
}
@Recover
public String helpHere(Exception cause ) {

        System.out.println("Recovery place! Exception");
        return "Hello";
}

@Recover
public String helpHere() {
        System.out.println("Recovery place! Exception");
        return "Hello";
}

@Recover
public String helpHere(Throwable cause) {

        System.out.println("Recovery place! Throwable");
        return "Hello";
}

}

Any help would be appriciated..



Posted in S.E.F
via StackOverflow & StackExchange Atomic Web Robots
Share:

No comments:

Recent