sun.net.www.protocol.https.HttpsURLConnectionImpl cannot be cast to sun.net.www.protocol.http.HttpURLConnection

10,846

Solution 1

@KarolDowbecki's analysis was in the right direction.

Instead of sun.net.www.protocol.http.HttpURLConnection; HttpURLConnection should be resolved through:

import java.net.HttpURLConnection;

I was able to execute your program which produces the following output:

size of all link and images list81
https://makemysushi.com/404#navigation
https://makemysushi.com/
https://makemysushi.com/
https://makemysushi.com/sushi-university
https://makemysushi.com/sushi-recipes
https://makemysushi.com/sushi-essentials
https://makemysushi.com/store
https://www.facebook.com/Makemysushi/
https://www.instagram.com/explore/tags/makemysushi/
https://plus.google.com/+Makemysushi
mailto:[email protected]   // <-- this href attribute is of MailToURLConnection type raising the java.lang.ClassCastException which can't be casted to HttpURLConnection type
.
.
.
https://makemysushi.com/Sushi-share/contact-us
https://makemysushi.com/Sushi-share/about-us
null
null
null
null
size of activelink list77
https://makemysushi.com/404#navigation----Not Found
https://makemysushi.com/----OK
https://makemysushi.com/----OK
https://makemysushi.com/sushi-university----OK
https://makemysushi.com/sushi-recipes----OK
https://makemysushi.com/sushi-essentials----OK
https://makemysushi.com/store----OK
https://www.facebook.com/Makemysushi/----OK
https://www.instagram.com/explore/tags/makemysushi/----OK
https://plus.google.com/+Makemysushi----OK
Exception in thread "main" java.lang.ClassCastException: sun.net.www.protocol.mailto.MailToURLConnection cannot be cast to java.net.HttpURLConnection
    at demo.TestMakeMySushi.main(TestMakeMySushi.java:48)

Reason

The List activelist contains an element:

<a href="mailto:[email protected]" target="_blank"><i id="social-em" class="fa fa-envelope-square fa-3x social"></i></a>

When you are trying to establish a connection through the href attribute mailto:[email protected] as in:

HttpURLConnection connection = (HttpURLConnection) new URL(activelist.get(j).getAttribute("href")).openConnection();

A successful connection cannot be established as MailToURLConnection object can't be casted to HttpURLConnection object and raises java.lang.ClassCastException

Solution 2

Change your import statement for HttpURLConnection class from import sun.net.www.protocol.http.HttpURLConnection; to import java.net.HttpURLConnection;.

You are not supposed to use sun packages and classes in your application code. They are internal to JVM.

Share:
10,846
Ashwini Pandey
Author by

Ashwini Pandey

Updated on June 26, 2022

Comments

  • Ashwini Pandey
    Ashwini Pandey almost 2 years

    i am using selenium library for testing purpose. But the following code giving me class cast exception. i have googled this exception but didn't get the solution. i am confused in Https connetion and http connetion. help me to solve this exception. thank you

    import java.io.IOException;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.concurrent.TimeUnit;
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.chrome.ChromeDriver;
    import sun.net.www.protocol.http.HttpURLConnection;
    
    
    public class TestMakeMySushi {
    
      private static final String HttpURLConnection = null;
    
       public static void main(String[] args) throws InterruptedException, MalformedURLException, IOException {
    
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\Dev-24\\Downloads\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.manage().window().maximize();
        driver.manage().deleteAllCookies();
        driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
        driver.manage().timeouts().implicitlyWait(40, TimeUnit.SECONDS);
        driver.get("https://www.makemysushi.com/404?");
    
        List<WebElement> linklist = driver.findElements(By.tagName("a"));
        linklist.addAll(driver.findElements(By.tagName("img")));
        System.out.println("size of all link and images list" + linklist.size());
        List<WebElement> activelist = new ArrayList<WebElement>();
    
        for (int i = 0; i < linklist.size(); i++) {
            System.out.println(linklist.get(i).getAttribute("href"));
            if (linklist.get(i).getAttribute("href") != null && (!linklist.get(i).getAttribute("href").contains("javascript"))) {
                activelist.add(linklist.get(i));
            }
        }
    
    
        System.out.println("size of activelink list" + activelist.size());
    
    
        for (int j = 0; j < activelist.size(); j++) {
    
            HttpURLConnection connection = (HttpURLConnection) new URL(activelist.get(j).getAttribute("href")).openConnection();
            connection.connect();
            String response = connection.getResponseMessage();
            connection.disconnect();
            System.out.println(activelist.get(j).getAttribute("href") + "----" + response);
        }
    }
    }
    

    Exception that i am facing

    Exception in thread "main" java.lang.ClassCastException:   sun.net.www.protocol.https.HttpsURLConnectionImpl cannot be cast to sun.net.www.protocol.http.HttpURLConnection
    at TestMakeMySushi.main(TestMakeMySushi.java:76)
    C:\Users\Dev-24\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
    
  • Ashwini Pandey
    Ashwini Pandey over 5 years
    still getting the Exception in thread "main" java.lang.ClassCastException: sun.net.www.protocol.mailto.MailToURLConnection cannot be cast to java.net.HttpURLConnection at TestMakeMySushi.main(TestMakeMySushi.java:57)
  • Karol Dowbecki
    Karol Dowbecki over 5 years
    MailToURLConnection is not a HttpURLConnection, it's a java.net.URLConnection. Pay attention to class hierarchy, you can't side step it.
  • undetected Selenium
    undetected Selenium over 5 years
    @AshwiniPandey Glad to be able to help you !!! Upvote the answer if this/any answer is/was helpful to you for the benefit of the future readers.