changeset 769:b6d113ee35ae

Fixed javac version 20 compiler warnings. The java.net.URL(String) constructor is deprecated since version 20. It needs to be replaced by: java.net.URI(String).toURL() and some extra Exception catching.
author Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
date Thu, 06 Jul 2023 18:28:10 +0200 (21 months ago)
parents a80c21fe7bb2
children 1b9fe515f574
files SQLSTATEs src/main/java/org/monetdb/jdbc/MonetPreparedStatement.java src/main/java/org/monetdb/jdbc/MonetResultSet.java src/main/java/org/monetdb/jdbc/types/URL.java tests/JDBC_API_Tester.java
diffstat 5 files changed, 60 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/SQLSTATEs
+++ b/SQLSTATEs
@@ -24,9 +24,9 @@ 0AM34 Java generics not supported
 
 22M28 invalid BLOB format
 22M29 invalid inet format
-22M30 invalid url format
-22M31 invalid uuid format
-22M32 invalid json format
+22M30 invalid URL format
+22M31 invalid UUID format
+22M32 invalid JSON format
 
 2BM37 dependent objects still exist
 2DM30 autocommit mode active
--- a/src/main/java/org/monetdb/jdbc/MonetPreparedStatement.java
+++ b/src/main/java/org/monetdb/jdbc/MonetPreparedStatement.java
@@ -1887,8 +1887,10 @@ public class MonetPreparedStatement
 						try {
 							// also check if x represents a valid url string to prevent
 							// failing exec #(..., ...) calls which destroy the prepared statement, see bug 6351
-							java.net.URL url_obj = new java.net.URL(x);
-						} catch (java.net.MalformedURLException mue) {
+							// Note: as of Java version 20 java.net.URL(String) constructor is deprecated.
+							// https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/net/URL.html#%3Cinit%3E(java.lang.String)
+							java.net.URL url_obj = new java.net.URI(x).toURL();
+						} catch (java.net.URISyntaxException | java.net.MalformedURLException mue) {
 							throw new SQLDataException("Conversion of string: " + x + " to parameter data type " + paramMonetdbType + " failed. " + mue.getMessage(), "22M30");
 						}
 						castprefix = "url ";
--- a/src/main/java/org/monetdb/jdbc/MonetResultSet.java
+++ b/src/main/java/org/monetdb/jdbc/MonetResultSet.java
@@ -2463,9 +2463,11 @@ public class MonetResultSet
 			}
 			lastReadWasNull = false;
 			try {
-				return new URL(val);
-			} catch (java.net.MalformedURLException e) {
-				throw new SQLException(e.getMessage(), "M1M05");
+				// Note: as of Java version 20 java.net.URL(String) constructor is deprecated.
+				// https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/net/URL.html#%3Cinit%3E(java.lang.String)
+				return new java.net.URI(val).toURL();
+			} catch (java.net.URISyntaxException | java.net.MalformedURLException e) {
+				throw new SQLException(e.getMessage(), "22M30");
 			}
 		} catch (IndexOutOfBoundsException e) {
 			throw newSQLInvalidColumnIndexException(columnIndex);
--- a/src/main/java/org/monetdb/jdbc/types/URL.java
+++ b/src/main/java/org/monetdb/jdbc/types/URL.java
@@ -8,6 +8,7 @@
 
 package org.monetdb.jdbc.types;
 
+import java.sql.SQLDataException;
 import java.sql.SQLException;
 
 /**
@@ -15,13 +16,23 @@ import java.sql.SQLException;
  * It represents an URL, that is, a well-formed string conforming to RFC2396.
  */
 public final class URL implements java.sql.SQLData {
+	/** String url */
 	private String url;
 
+	/**
+	 * String getSQLTypeName()
+	 * @return String the type name
+	 */
 	@Override
 	public String getSQLTypeName() {
 		return "url";
 	}
 
+	/**
+	 * void readSQL(final java.sql.SQLInput stream, final String typeName)
+	 * @param stream a java.sql.SQLInput stream
+	 * @param typeName the type name
+	 */
 	@Override
 	public void readSQL(final java.sql.SQLInput stream, final String typeName) throws SQLException {
 		if (!"url".equals(typeName))
@@ -29,16 +40,29 @@ public final class URL implements java.s
 		url = stream.readString();
 	}
 
+	/**
+	 * void writeSQL(final java.sql.SQLOutput stream)
+	 * @param stream a java.sql.SQLOutput stream
+	 */
 	@Override
 	public void writeSQL(final java.sql.SQLOutput stream) throws SQLException {
 		stream.writeString(url);
 	}
 
+	/**
+	 * String toString()
+	 * @return String the url string
+	 */
 	@Override
 	public String toString() {
 		return url;
 	}
 
+	/**
+	 * void fromString(final String newurl)
+	 * @param newurl the new url string
+	 * @throws Exception when conversion of newurl string to URI or URL object fails
+	 */
 	public void fromString(final String newurl) throws Exception {
 		if (newurl == null) {
 			url = newurl;
@@ -46,23 +70,36 @@ public final class URL implements java.s
 		}
 
 		// parse the newurl on validity
-		new java.net.URL(newurl);
-		// if above doesn't fail (throws an Exception), it is fine
+		// Note: as of Java version 20 java.net.URL(String) constructor is deprecated.
+		// https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/net/URL.html#%3Cinit%3E(java.lang.String)
+		new java.net.URI(newurl).toURL();
+		// if above doesn't fail (throws an java.net.URISyntaxException | java.net.MalformedURLException), it is fine
 		url = newurl;
 	}
 
-	public java.net.URL getURL() throws SQLException {
+	/**
+	 * java.net.URL getURL()
+	 * @return URL an url object
+	 * @throws SQLDataException when conversion of url string to URL object fails
+	 */
+	public java.net.URL getURL() throws SQLDataException {
 		if (url == null)
 			return null;
 
 		try {
-			return new java.net.URL(url);
-		} catch (java.net.MalformedURLException mue) {
-			throw new java.sql.SQLDataException("data is not a valid URL: " + mue.getMessage(), "22M30");
+			// Note: as of java 20 java.net.URL(String) constructor is deprecated.
+			// https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/net/URL.html#%3Cinit%3E(java.lang.String)
+			return new java.net.URI(url).toURL();
+		} catch (java.net.URISyntaxException | java.net.MalformedURLException mue) {
+			throw new SQLDataException("data is not a valid URL: " + mue.getMessage(), "22M30");
 		}
 	}
 
-	public void setURL(final java.net.URL nurl) throws Exception {
+	/**
+	 * void setURL(final java.net.URL nurl)
+	 * @param nurl a java.net.URL object
+	 */
+	public void setURL(final java.net.URL nurl) {
 		url = nurl.toString();
 	}
 }
--- a/tests/JDBC_API_Tester.java
+++ b/tests/JDBC_API_Tester.java
@@ -3245,8 +3245,8 @@ final public class JDBC_API_Tester {
 			cstmt.setDouble(2, 3.02);
 			cstmt.setString(4, "Tree");
 			try {
-				cstmt.setURL(6, new java.net.URL("https://www.monetdb.org/"));
-			} catch (java.net.MalformedURLException mfue) {
+				cstmt.setURL(6, new java.net.URI("https://www.monetdb.org/").toURL());
+			} catch (java.net.URISyntaxException | java.net.MalformedURLException mfue) {
 				sb.append("Invalid URL: ").append(mfue.getMessage()).append("\n");
 			}
 			cstmt.execute();
@@ -5776,8 +5776,8 @@ final public class JDBC_API_Tester {
 			pstmt.setObject(3, "[3.1415E-06]");
 			pstmt.setNull(4, 0);
 			try {
-				pstmt.setURL(5, new java.net.URL("https://www.cwi.nl/"));
-			} catch (java.net.MalformedURLException mfe) {
+				pstmt.setURL(5, new java.net.URI("https://www.cwi.nl/").toURL());
+			} catch (java.net.URISyntaxException | java.net.MalformedURLException mfe) {
 				sb.append(mfe).append("\n");
 			}
 			sb.append("Inserting row ").append(row).append("\n");