I build a Java Swing application in Java 8. So I try to use a contact a RestWebService in https, this is the code:
public boolean sincronizzaArticoli(List<Articoli> lista){
try {
Propr p = new Propr();
Properties properties= p.getProps();
//
ArticoliWebBody body = new ArticoliWebBody();
body.setSuffisso(properties.getProperty("prefissoTabella"));
body.setArticoli(lista);
//
URL url;
URLConnection urlConnection;
DataOutputStream outStream;
DataInputStream inStream;
String uriString = properties.getProperty("sitoRemoto");
uriString = uriString.substring(0, uriString.lastIndexOf('/'))+"/WebApi.php/saveArticoli";
url = new URL(uriString);
urlConnection = url.openConnection();
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);
urlConnection.setUseCaches(false);
urlConnection.setRequestProperty("Content-Type", "application/json");
urlConnection.setRequestProperty("Accept", "application/json");
((HttpURLConnection) urlConnection).setRequestMethod("POST");
Gson gson = new Gson();
String jsonString = gson.toJson(body);
//System.out.println(jsonString);
// Create I/O streams
try(OutputStream os = urlConnection.getOutputStream()) {
byte[] input = jsonString.getBytes("utf-8");
os.write(input, 0, input.length);
}
inStream = new DataInputStream(urlConnection.getInputStream());
// Send request
// Get Response
// - For debugging purposes only!
String buffer;
while((buffer = inStream.readLine()) != null) {
// Close I/O streams
inStream.close();
if(buffer.contains("ok"))
return true;
else{
log.information("errore: " );
log.information(buffer);
}
return false;
}
return false;
}
catch(Exception ex) {
System.out.println("Exception cought:n"+ ex.toString());
log.logStackTrace(ex);
}
return false;
}
If I try to run this code, I received the following error:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
DEBUG [pool-2-thread-1] (MyLog4J.java:42) - javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.ssl.Alerts.getSSLException(Unknown Source)
at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source)
at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
at sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source)
at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source)
at sun.security.ssl.Handshaker.processLoop(Unknown Source)
at sun.security.ssl.Handshaker.process_record(Unknown Source)
at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(Unknown Source)
at prove.HTTPRequest.sincronizzaArticoli(HTTPRequest.java:58)
at Backup.PanelChiusuraGiornata$1.doInBackground(PanelChiusuraGiornata.java:473)
at Backup.PanelChiusuraGiornata$1.doInBackground(PanelChiusuraGiornata.java:1)
at javax.swing.SwingWorker$1.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at javax.swing.SwingWorker.run(Unknown Source)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.validator.PKIXValidator.doBuild(Unknown Source)
at sun.security.validator.PKIXValidator.engineValidate(Unknown Source)
at sun.security.validator.Validator.validate(Unknown Source)
at sun.security.ssl.X509TrustManagerImpl.validate(Unknown Source)
at sun.security.ssl.X509TrustManagerImpl.checkTrusted(Unknown Source)
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
... 23 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)
at java.security.cert.CertPathBuilder.build(Unknown Source)
... 29 more
How can I do to bypass this error? I should be able to execute this application on different computer