From 4792c649610d8aa1682ee66e3cf836d5e5fb59e1 Mon Sep 17 00:00:00 2001 From: Roman Kisel Date: Mon, 14 Jul 2025 13:42:08 +0300 Subject: [PATCH 1/2] Publish to Central Portal fix --- build.gradle | 10 +++++ ...typeCentralPortalUploadRepositoryTask.java | 39 +++++++++---------- java/dfp-math/build.gradle | 9 ----- java/dfp/build.gradle | 9 ----- 4 files changed, 29 insertions(+), 38 deletions(-) diff --git a/build.gradle b/build.gradle index 6bba0aaa..f23cbfc0 100644 --- a/build.gradle +++ b/build.gradle @@ -32,3 +32,13 @@ allprojects { project.ext.set("javaPrefix", "com_epam_deltix_dfp_NativeImpl_") project.ext.set("javaMathPrefix", "com_epam_deltix_dfpmath_NativeMathImpl_") } + +def rUser = findProperty('SONATYPE_NEXUS_USERNAME') ?: System.getenv('SONATYPE_NEXUS_USERNAME') ?: "FakeUser" +def rPass = findProperty('SONATYPE_NEXUS_PASSWORD') ?: System.getenv('SONATYPE_NEXUS_PASSWORD') ?: "FakePass" + +tasks.register('uploadArtifactsToCentralPortal', com.epam.deltix.buildsrc.SonatypeCentralPortalUploadRepositoryTask) { + portalUsername.set(rUser) + portalPassword.set(rPass) + groupId.set('com.epam.deltix') + snapshotRelease.set(!version.endsWith("SNAPSHOT")) +} diff --git a/buildSrc/src/main/java/com/epam/deltix/buildsrc/SonatypeCentralPortalUploadRepositoryTask.java b/buildSrc/src/main/java/com/epam/deltix/buildsrc/SonatypeCentralPortalUploadRepositoryTask.java index e448cf1f..ee9bfd4d 100644 --- a/buildSrc/src/main/java/com/epam/deltix/buildsrc/SonatypeCentralPortalUploadRepositoryTask.java +++ b/buildSrc/src/main/java/com/epam/deltix/buildsrc/SonatypeCentralPortalUploadRepositoryTask.java @@ -108,10 +108,9 @@ public void run() throws IOException, InterruptedException { } String userNameAndPassword = portalUsername.get() + ":" + portalPassword.get(); - String basicAuth = Base64.getEncoder().encodeToString(userNameAndPassword.getBytes(StandardCharsets.US_ASCII)); - String bearer = "Bearer " + basicAuth; - + String bearer = Base64.getEncoder().encodeToString(userNameAndPassword.getBytes(StandardCharsets.US_ASCII)); URI apiUri = URI.create(CENTRAL_PORTAL_OSSRH_API_URI); + String repositoryKey = findOpenRepository(apiUri, bearer); uploadRepositoryToPortal(apiUri, bearer, repositoryKey); dropRepository(apiUri, bearer, repositoryKey); @@ -123,27 +122,26 @@ private String findOpenRepository(URI apiUri, String bearer) throws IOException conn.setConnectTimeout(CONNECTION_TIMEOUT); conn.setReadTimeout(CONNECTION_TIMEOUT); conn.setRequestMethod("GET"); - conn.setRequestProperty("Authorization", bearer); + conn.setRequestProperty("Authorization", "Bearer " + bearer); int status = conn.getResponseCode(); String body = readBody(conn); - if (status != 200) { throw new IllegalStateException("Failed to query repositories: " + "status=" + status + ", response=" + body); } - final JSONArray repositories = new JSONObject(body).getJSONArray("repositories"); + JSONArray repositories = new JSONObject(body).getJSONArray("repositories"); if (repositories.isEmpty()) { throw new IllegalStateException("No open repositories found!"); } String repositoryKey = null; - final String group = groupId.get(); + String group = groupId.get(); for (int i = 0; i < repositories.length(); i++) { - final JSONObject repo = (JSONObject) repositories.get(i); + JSONObject repo = (JSONObject) repositories.get(i); if ("open".equals(repo.getString("state"))) { - final String key = repo.getString("key"); + String key = repo.getString("key"); if (key.contains(group)) { repositoryKey = key; break; @@ -163,13 +161,12 @@ private static void uploadRepositoryToPortal(URI apiUri, String bearer, String r conn.setConnectTimeout(CONNECTION_TIMEOUT); conn.setReadTimeout(CONNECTION_TIMEOUT); conn.setRequestMethod("POST"); - conn.setRequestProperty("Authorization", bearer); + conn.setRequestProperty("Authorization", "Bearer " + bearer); conn.setDoOutput(true); - conn.getOutputStream().close(); // no body + conn.getOutputStream().close(); int status = conn.getResponseCode(); String body = readBody(conn); - if (status != 200) { throw new IllegalStateException("Failed to upload repository: repository_key=" + repositoryKey + ", status=" + status + ", response=" + body); } @@ -181,11 +178,10 @@ private static void dropRepository(URI apiUri, String bearer, String repositoryK conn.setConnectTimeout(CONNECTION_TIMEOUT); conn.setReadTimeout(CONNECTION_TIMEOUT); conn.setRequestMethod("DELETE"); - conn.setRequestProperty("Authorization", bearer); + conn.setRequestProperty("Authorization", "Bearer " + bearer); int status = conn.getResponseCode(); String body = readBody(conn); - if (status != 204) { throw new IllegalStateException("Failed to drop repository: repository_key=" + repositoryKey + ", status=" + status + ", response=" + body); } @@ -195,17 +191,20 @@ private static String readBody(HttpURLConnection conn) throws IOException { InputStream stream; try { stream = (conn.getResponseCode() < 400) ? conn.getInputStream() : conn.getErrorStream(); - if (stream == null) return ""; + if (stream == null) { + return ""; + } } catch (IOException e) { return ""; } - BufferedReader in = new BufferedReader(new InputStreamReader(stream, StandardCharsets.UTF_8)); + StringBuilder body = new StringBuilder(); - String line; - while ((line = in.readLine()) != null) { - body.append(line); + try (BufferedReader in = new BufferedReader(new InputStreamReader(stream, StandardCharsets.UTF_8))) { + String line; + while ((line = in.readLine()) != null) { + body.append(line); + } } - in.close(); return body.toString(); } } diff --git a/java/dfp-math/build.gradle b/java/dfp-math/build.gradle index e7a5cd7c..e7b77764 100644 --- a/java/dfp-math/build.gradle +++ b/java/dfp-math/build.gradle @@ -1,5 +1,3 @@ -import com.epam.deltix.buildsrc.SonatypeCentralPortalUploadRepositoryTask - ext.isReleaseVersion = !version.endsWith("SNAPSHOT") apply plugin: 'java' @@ -111,13 +109,6 @@ publishing { } } -tasks.register('uploadArtifactsToCentralPortal', SonatypeCentralPortalUploadRepositoryTask) { - portalUsername.set(rUser) - portalPassword.set(rPass) - groupId.set('com.epam.deltix') - snapshotRelease.set(!isReleaseVersion) -} - if (isReleaseVersion) { signing { def signingKey = findProperty('SIGNING_PRIVATE_KEY') ?: System.getenv('SIGNING_PRIVATE_KEY') ?: "FakeUser" diff --git a/java/dfp/build.gradle b/java/dfp/build.gradle index 4e680789..47f17afb 100644 --- a/java/dfp/build.gradle +++ b/java/dfp/build.gradle @@ -1,5 +1,3 @@ -import com.epam.deltix.buildsrc.SonatypeCentralPortalUploadRepositoryTask - ext.isReleaseVersion = !version.endsWith("SNAPSHOT") apply plugin: 'java' @@ -116,13 +114,6 @@ publishing { } } -tasks.register('uploadArtifactsToCentralPortal', SonatypeCentralPortalUploadRepositoryTask) { - portalUsername.set(rUser) - portalPassword.set(rPass) - groupId.set('com.epam.deltix') - snapshotRelease.set(!isReleaseVersion) -} - if (isReleaseVersion) { signing { def signingKey = findProperty('SIGNING_PRIVATE_KEY') ?: System.getenv('SIGNING_PRIVATE_KEY') ?: "FakeUser" From be523d06ee5d2ce9cbd05e05b90450172e836859 Mon Sep 17 00:00:00 2001 From: Andrei Davydov Date: Thu, 28 Aug 2025 12:16:41 +0300 Subject: [PATCH 2/2] Java: Fix #110: Support boxed Long as a valid object with underlying value for `equals` check. --- .../java/com/epam/deltix/dfp/Decimal64Utils.java | 3 ++- .../test/java/com/epam/deltix/dfp/JavaImplTest.java | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/java/dfp/src/main/java/com/epam/deltix/dfp/Decimal64Utils.java b/java/dfp/src/main/java/com/epam/deltix/dfp/Decimal64Utils.java index 3ac2cd11..16c390b8 100644 --- a/java/dfp/src/main/java/com/epam/deltix/dfp/Decimal64Utils.java +++ b/java/dfp/src/main/java/com/epam/deltix/dfp/Decimal64Utils.java @@ -285,7 +285,8 @@ public static boolean isIdentical(@Decimal final long a, final Object b) { */ public static boolean equals(@Decimal final long a, final Object b) { return (b == null && NULL == a) - || (b instanceof Decimal64 && equals(a, ((Decimal64) b).value)); + || (b instanceof Decimal64 && equals(a, ((Decimal64) b).value)) + || (b instanceof Long && equals(a, (long) b)); } /** diff --git a/java/dfp/src/test/java/com/epam/deltix/dfp/JavaImplTest.java b/java/dfp/src/test/java/com/epam/deltix/dfp/JavaImplTest.java index 3807fa79..a267b71a 100644 --- a/java/dfp/src/test/java/com/epam/deltix/dfp/JavaImplTest.java +++ b/java/dfp/src/test/java/com/epam/deltix/dfp/JavaImplTest.java @@ -13,6 +13,8 @@ import java.math.MathContext; import java.math.RoundingMode; import java.security.SecureRandom; +import java.util.HashMap; +import java.util.Map; import java.util.Random; import static com.epam.deltix.dfp.Decimal64Utils.*; @@ -1099,4 +1101,15 @@ public void issue91ToFloatString() throws IOException { } } } + + @Test + public void issue110BoxedEquals() { + Map cache = new HashMap<>(); + @Decimal long val = Decimal64Utils.fromDouble(0.5); + cache.put("val", val); + @Decimal long val2 = Decimal64Utils.fromDouble(0.5); + assertTrue(val2 == cache.get("val")); + assertTrue(Decimal64Utils.compareTo(val2, cache.get("val")) == 0); + assertTrue(Decimal64Utils.equals(val2, cache.get("val"))); + } }