Kezdőoldal » Számítástechnika » Programozás » Java paraméterátadás?

Java paraméterátadás?

Figyelt kérdés

Csináltam a HttpURLConnection köré egy saját kis osztályt, ami egy sorra redukálja le az egészet, így nekem csak az URL-t meg egy-két dolgot kell beírnom, a többit elintézi az osztályt. Nem érdekes, hogy néz ki, a lényeg, hogy az osztályban van egy conn nevű változóm, ami HttpURLConnection vagy HttpsURLConnection lesz attól függően, hogy az url protokoll micsoda.


HttpURLConnection conn;

if (targetURL.getProtocol() == "http") {

________conn = (HttpURLConnection) targetURL.openConnection();

} else {

________conn = (HttpsURLConnection) targetURL.openConnection();

};


Tehát ha a protokoll http, akkor HttpURLConnection típussá lesz castolva a targetURL.openConnection által visszadott URLConnection, ha pedig a protokoll https, akkor HttpsURLConnection-é. A HttpsURLConnection ősztálya a HttpURLConnection, ezért ez így le is fordul. De futásnál hibát ír ki ("Exception in thread "main" java.lang.ClassCastException: class sun.net.www.protocol.http.HttpURLConnection cannot be cast to class javax.net.ssl.HttpsURLConnection (sun.net.www.protocol.http.HttpURLConnection and javax.net.ssl.HttpsURLConnection are in module java.base of loader 'bootstrap'").


Ilyenkor mi van? Csinálnom kell egy külön osztályt http-re és https-re is?



2022. jan. 25. 11:33
 1/3 anonim ***** válasza:
stackoverflow-n rákerestél már?
2022. jan. 25. 13:32
Hasznos számodra ez a válasz?
 2/3 A kérdező kommentje:

Igen, de mindenkinek az a problémája, hogy HttpsURLConnection-t próbál használni http kapcsolathoz, vagy épp fordítva. Én pedig azt szeretném, ha mindkét típusú kapcsolatot tudná kezelni az osztályom az átadott URL alapján.


Alighanem az lesz a megoldás, hogy csinálok egy absztrakt WebRequest osztályt, származtatok belőle egy HttpRequest és egy HttpsRequest osztályt, és ha az URL-ben http van, akkor HttpRequest osztályt példányosítok, ha pedig https, akkor HttpsRequest osztály. Vagy megcsinálhatom interface-szel is.

De biztos van ennél jobb megoldás.

2022. jan. 25. 13:51
 3/3 A kérdező kommentje:

Igazából megoldottam úgy, hogy a conn-t HttpURLConnection-nek deklaráltam:


HttpURLConnection conn;


Az URL függvényében döntöm el, hogy miként példányosítom:


if (targetURL.getProtocol().equals("https")) {

____conn = (HttpsURLConnection) targetURL.openConnection();

} else {

____conn = (HttpURLConnection) targetURL.openConnection();

};


Mivel a HttpURLConnection a HttpsURLConnection szülője, így ez működik. És annál az egyetlen egy hívásnál, ami csak a HttpsURLConnection osztályban létező metódust hív, castolok:


if (targetURL.getProtocol().equals("https")) {

____((HttpsURLConnection) conn).setHostnameVerifier(new HostnameVerifier() {

________public boolean verify(String s, SSLSession sslSession) {

____________return true;

____________}

____});

};


Végső soron ez egy működő megoldás, de ha véletlenül http a protokoll és valamiért ráfut a setRequestMethod metódusra, olyan hibát dob, hogy öröm nézni...

2022. jan. 25. 15:02

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!