From 15ca8184a268156d2d666ca45a6870d003ccb2e7 Mon Sep 17 00:00:00 2001 From: "Mark S. Lewis" Date: Sun, 20 Sep 2026 15:30:34 +0100 Subject: [PATCH] Update dependencies for CVE-2026-8763, CVE-2026-13506 Signed-off-by: Mark S. Lewis --- build.gradle | 42 +++++++----- fabric-chaincode-docker/Dockerfile | 12 ++-- fabric-chaincode-docker/build.gradle | 7 +- .../build.gradle | 2 +- fabric-chaincode-shim/build.gradle | 58 ++++++++-------- .../execution/JSONTransactionSerializer.java | 1 + .../fabric/contract/routing/TxFunction.java | 3 +- .../routing/impl/ContractDefinitionImpl.java | 2 +- .../fabric/shim/ChaincodeBase.java | 3 +- .../fabric/shim/ledger/KeyModification.java | 4 +- .../traces/impl/OpenTelemetryProperties.java | 18 +++-- .../org/hyperledger/fabric/LoggingTest.java | 5 +- .../fabric/shim/ChaincodeBaseTest.java | 55 ++++++---------- gradle/libs.versions.toml | 66 +++++++++++++++++++ 14 files changed, 179 insertions(+), 99 deletions(-) create mode 100644 gradle/libs.versions.toml diff --git a/build.gradle b/build.gradle index f89af50f2..7d4fd6e90 100644 --- a/build.gradle +++ b/build.gradle @@ -5,10 +5,10 @@ */ plugins { - id "com.github.ben-manes.versions" version "0.54.0" - id "com.diffplug.spotless" version "8.4.0" - id "com.gradleup.nmcp.aggregation" version "1.5.0" - id "com.gradleup.nmcp" version "1.5.0" apply false + alias(libs.plugins.versions) + alias(libs.plugins.spotless) + alias(libs.plugins.nmcp.aggregation) + alias(libs.plugins.nmcp) apply false } version = '2.5.11' @@ -37,8 +37,8 @@ dependencies { } allprojects { - apply plugin: "com.diffplug.spotless" - apply plugin: "com.github.ben-manes.versions" + apply(plugin: libs.plugins.spotless.get().pluginId) + apply(plugin: libs.plugins.versions.get().pluginId) repositories { mavenCentral() @@ -52,6 +52,12 @@ allprojects { endWithNewline() } } + + tasks.named("dependencyUpdates").configure { + checkConstraints = true + gradleReleaseChannel = 'current' + revision = 'release' + } } subprojects { @@ -67,17 +73,17 @@ subprojects { } dependencies { - implementation 'commons-cli:commons-cli:1.11.0' - implementation 'commons-logging:commons-logging:1.3.6' + implementation(libs.commons.cli) + implementation(libs.commons.logging) - testImplementation platform('org.junit:junit-bom:6.0.3') - testImplementation 'org.junit.jupiter:junit-jupiter' - testRuntimeOnly 'org.junit.platform:junit-platform-launcher' - testImplementation 'org.assertj:assertj-core:3.27.7' - testImplementation 'org.mockito:mockito-core:5.23.0' - testImplementation 'uk.org.webcompere:system-stubs-jupiter:2.1.8' + testImplementation platform(libs.junit.bom) + testImplementation(libs.junit.jupiter) + testRuntimeOnly(libs.junit.platform.launcher) + testImplementation(libs.assertj) + testImplementation(libs.mockito.core) + testImplementation(libs.system.stubs.jupiter) - testImplementation 'org.hamcrest:hamcrest-library:3.0' + testImplementation(libs.hamcrest) } test { @@ -86,9 +92,11 @@ subprojects { spotless { java { - removeUnusedImports() - palantirJavaFormat().formatJavadoc(true) + forbidWildcardImports() formatAnnotations() + palantirJavaFormat().formatJavadoc(true) + removeUnusedImports() + shortenFullyQualifiedTypes() } } } diff --git a/fabric-chaincode-docker/Dockerfile b/fabric-chaincode-docker/Dockerfile index e501cd004..cdec70851 100644 --- a/fabric-chaincode-docker/Dockerfile +++ b/fabric-chaincode-docker/Dockerfile @@ -1,10 +1,12 @@ -ARG JAVA_IMAGE=eclipse-temurin:25-jdk +ARG JAVA_IMAGE=eclipse-temurin:25.0.4_7-jdk FROM ${JAVA_IMAGE} AS builder +ENV DEBIAN_FRONTEND=noninteractive + RUN apt-get update \ - && apt-get install -y curl zip unzip -RUN curl -s "https://get.sdkman.io" | bash + && apt-get install --yes curl zip unzip +RUN curl --fail --show-error --silent "https://get.sdkman.io" | bash SHELL ["/bin/bash", "-c"] @@ -23,14 +25,14 @@ ENV PATH="/opt/maven/bin:/opt/gradle/bin:${PATH}" # Coping libs, scripts and sources COPY build/distributions/ /root/ -#Creating folders structure +# Create folders structure RUN mkdir -p \ /root/chaincode-java/chaincode/src \ /root/chaincode-java/chaincode/build/out \ /root/chaincode-java/shim-src/fabric-chaincode-integration-test \ /root/chaincode-java/shim-src/fabric-chaincode-docker -#Making scripts runnable +# Make scripts runnable RUN chmod +x /root/chaincode-java/start /root/chaincode-java/build.sh # Build protos and shim jar and installing them to maven local and gradle cache diff --git a/fabric-chaincode-docker/build.gradle b/fabric-chaincode-docker/build.gradle index d381a4f16..5ced43118 100644 --- a/fabric-chaincode-docker/build.gradle +++ b/fabric-chaincode-docker/build.gradle @@ -5,7 +5,7 @@ */ plugins { - id 'com.bmuschko.docker-remote-api' version '10.0.0' + alias(libs.plugins.docker.remote.api) } repositories { @@ -54,6 +54,11 @@ tasks.register('copyAllDeps', Copy) { from project.getParent().file("settings.gradle") into('build/distributions/chaincode-java/shim-src/') } + + copy { + from project.getParent().file("gradle/libs.versions.toml") + into('build/distributions/chaincode-java/shim-src/gradle/') + } } tasks.register('buildImage', DockerBuildImage) { diff --git a/fabric-chaincode-integration-test/build.gradle b/fabric-chaincode-integration-test/build.gradle index dc4ceeac6..4b07fafd5 100644 --- a/fabric-chaincode-integration-test/build.gradle +++ b/fabric-chaincode-integration-test/build.gradle @@ -1,7 +1,7 @@ dependencies { implementation project(':fabric-chaincode-docker') implementation project(':fabric-chaincode-shim') - implementation 'org.json:json:20251224' + implementation(libs.json) } diff --git a/fabric-chaincode-shim/build.gradle b/fabric-chaincode-shim/build.gradle index 2e4e8f030..2df7e0091 100644 --- a/fabric-chaincode-shim/build.gradle +++ b/fabric-chaincode-shim/build.gradle @@ -9,11 +9,11 @@ plugins { id 'signing' id 'jacoco' id 'pmd' - id 'com.gradleup.nmcp' + alias(libs.plugins.nmcp) } pmd { - toolVersion = '7.24.0' + toolVersion = libs.versions.pmd.get() ruleSetFiles = files('../pmd-ruleset.xml') ruleSets = [] // explicitly set to empty to avoid using the default configuration ignoreFailures = false @@ -31,33 +31,33 @@ tasks.withType(Test).configureEach { } dependencies { - implementation platform('com.google.protobuf:protobuf-bom:4.34.1') - implementation platform('io.grpc:grpc-bom:1.81.0') - implementation platform('io.opentelemetry:opentelemetry-bom:1.62.0') - implementation platform("org.bouncycastle:bc-jdk18on-bom:1.84") - - implementation 'org.hyperledger.fabric:fabric-protos:0.3.7' - implementation 'org.bouncycastle:bcpkix-jdk18on' - implementation 'org.bouncycastle:bcprov-jdk18on' - implementation 'io.github.classgraph:classgraph:4.8.184' - implementation 'com.github.erosb:everit-json-schema:1.14.6' - implementation 'org.json:json:20251224' - implementation 'com.google.protobuf:protobuf-java-util' - - implementation 'io.grpc:grpc-netty-shaded' - implementation 'io.grpc:grpc-protobuf' - implementation 'io.grpc:grpc-stub' - testImplementation 'io.grpc:grpc-inprocess' - - implementation 'io.opentelemetry:opentelemetry-api' - implementation 'io.opentelemetry.proto:opentelemetry-proto:1.10.0-alpha' - implementation 'io.opentelemetry:opentelemetry-sdk' - implementation 'io.opentelemetry:opentelemetry-sdk-extension-autoconfigure' - implementation 'io.opentelemetry:opentelemetry-sdk-trace' - implementation 'io.opentelemetry:opentelemetry-exporter-otlp' - implementation 'io.opentelemetry:opentelemetry-extension-trace-propagators' - implementation 'io.opentelemetry.semconv:opentelemetry-semconv:1.41.1' - implementation 'io.opentelemetry.instrumentation:opentelemetry-grpc-1.6:2.27.0-alpha' + implementation platform(libs.protobuf.bom) + implementation platform(libs.grpc.bom) + implementation platform(libs.opentelemetry.bom) + implementation platform(libs.bouncycastle.bom) + + implementation(libs.fabric.protos) + implementation(libs.bouncycastle.pkix) + implementation(libs.bouncycastle.prov) + implementation(libs.classgraph) + implementation(libs.json.schema) + implementation(libs.json) + implementation(libs.protobuf.util) + + implementation(libs.grpc.netty.shaded) + implementation(libs.grpc.protobuf) + implementation(libs.grpc.stub) + testImplementation(libs.grpc.inprocess) + + implementation(libs.opentelemetry.api) + implementation(libs.opentelemetry.exporter) + implementation(libs.opentelemetry.grpc) + implementation(libs.opentelemetry.proto) + implementation(libs.opentelemetry.sdk) + implementation(libs.opentelemetry.sdk.autoconfigure) + implementation(libs.opentelemetry.sdk.trace) + implementation(libs.opentelemetry.semconv) + implementation(libs.opentelemetry.trace.propagators) } sourceSets { diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/JSONTransactionSerializer.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/JSONTransactionSerializer.java index c6dd1b927..cbe5e5551 100644 --- a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/JSONTransactionSerializer.java +++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/JSONTransactionSerializer.java @@ -44,6 +44,7 @@ public class JSONTransactionSerializer implements SerializerInterface { * @return Byte buffer */ @Override + @SuppressWarnings("PMD.ReturnEmptyCollectionRatherThanNull") public byte[] toBuffer(final Object value, final TypeSchema ts) { LOGGER.debug(() -> "Schema to convert is " + ts); byte[] buffer = null; diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/TxFunction.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/TxFunction.java index 392419fae..032bf09c9 100644 --- a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/TxFunction.java +++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/TxFunction.java @@ -7,6 +7,7 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.lang.reflect.Parameter; import java.util.List; import org.hyperledger.fabric.contract.ContractInterface; import org.hyperledger.fabric.contract.metadata.TypeSchema; @@ -64,7 +65,7 @@ ContractInterface getContractInstance() Class getReturnType(); /** @return Parameter array */ - java.lang.reflect.Parameter[] getParameters(); + Parameter[] getParameters(); /** @return Submit or Evaluate */ TransactionType getType(); diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/ContractDefinitionImpl.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/ContractDefinitionImpl.java index 8df5f3ab9..c4650f1bd 100644 --- a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/ContractDefinitionImpl.java +++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/ContractDefinitionImpl.java @@ -47,7 +47,7 @@ public ContractDefinitionImpl(final Class cl) { this.name = annotationName; } - isDefault = (cl.getAnnotation(Default.class) != null); + isDefault = cl.getAnnotation(Default.class) != null; contractAnnotation = cl.getAnnotation(Contract.class); contractClz = cl; diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeBase.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeBase.java index b0831498a..78b3eb341 100644 --- a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeBase.java +++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeBase.java @@ -30,6 +30,7 @@ import java.util.Base64; import java.util.Locale; import java.util.Properties; +import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.LogRecord; import java.util.logging.Logger; @@ -284,7 +285,7 @@ public String format(final LogRecord record) { } }; - for (final java.util.logging.Handler handler : rootLogger.getHandlers()) { + for (final Handler handler : rootLogger.getHandlers()) { handler.setLevel(ALL); handler.setFormatter(formatter); } diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ledger/KeyModification.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ledger/KeyModification.java index 868c4af5c..a45629116 100644 --- a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ledger/KeyModification.java +++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ledger/KeyModification.java @@ -6,6 +6,8 @@ package org.hyperledger.fabric.shim.ledger; +import java.time.Instant; + /** * QueryResult for history query. Holds a transaction ID, value, timestamp, and delete marker which resulted from a * history query. @@ -38,7 +40,7 @@ public interface KeyModification { * * @return timestamp */ - java.time.Instant getTimestamp(); + Instant getTimestamp(); /** * Returns the deletion marker. diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/OpenTelemetryProperties.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/OpenTelemetryProperties.java index da954aee6..96cf759c2 100644 --- a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/OpenTelemetryProperties.java +++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/OpenTelemetryProperties.java @@ -35,12 +35,14 @@ final class OpenTelemetryProperties implements ConfigProperties { } @Override - @Nullable public String getString(final String name) { + @Nullable + public String getString(final String name) { return config.get(name); } @Override - @Nullable public Boolean getBoolean(final String name) { + @Nullable + public Boolean getBoolean(final String name) { String value = config.get(name); if (value == null || value.isEmpty()) { return null; @@ -49,7 +51,8 @@ final class OpenTelemetryProperties implements ConfigProperties { } @Override - @Nullable public Integer getInt(final String name) { + @Nullable + public Integer getInt(final String name) { String value = config.get(name); if (value == null || value.isEmpty()) { return null; @@ -62,7 +65,8 @@ final class OpenTelemetryProperties implements ConfigProperties { } @Override - @Nullable public Long getLong(final String name) { + @Nullable + public Long getLong(final String name) { String value = config.get(name); if (value == null || value.isEmpty()) { return null; @@ -75,7 +79,8 @@ final class OpenTelemetryProperties implements ConfigProperties { } @Override - @Nullable public Double getDouble(final String name) { + @Nullable + public Double getDouble(final String name) { String value = config.get(name); if (value == null || value.isEmpty()) { return null; @@ -88,7 +93,8 @@ final class OpenTelemetryProperties implements ConfigProperties { } @Override - @Nullable public Duration getDuration(final String name) { + @Nullable + public Duration getDuration(final String name) { String value = config.get(name); if (value == null || value.isEmpty()) { return null; diff --git a/fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/LoggingTest.java b/fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/LoggingTest.java index 98c5dde8b..8ea03c732 100644 --- a/fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/LoggingTest.java +++ b/fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/LoggingTest.java @@ -12,6 +12,7 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.logging.Level; +import java.util.logging.Logger; import org.hamcrest.CoreMatchers; import org.junit.jupiter.api.Test; @@ -55,8 +56,8 @@ void testFormatError() { @Test void testSetLogLevel() { - final java.util.logging.Logger l = java.util.logging.Logger.getLogger("org.hyperledger.fabric.test"); - final java.util.logging.Logger another = java.util.logging.Logger.getLogger("acme.wibble"); + final Logger l = Logger.getLogger("org.hyperledger.fabric.test"); + final Logger another = Logger.getLogger("acme.wibble"); final Level anotherLevel = another.getLevel(); Logging.setLogLevel("debug"); diff --git a/fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/ChaincodeBaseTest.java b/fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/ChaincodeBaseTest.java index 894c60fea..bad2cc959 100644 --- a/fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/ChaincodeBaseTest.java +++ b/fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/ChaincodeBaseTest.java @@ -21,6 +21,7 @@ import java.util.logging.Logger; import org.hyperledger.fabric.metrics.Metrics; import org.hyperledger.fabric.protos.peer.ChaincodeMessage; +import org.hyperledger.fabric.shim.Chaincode.Response; import org.hyperledger.fabric.shim.chaincode.EmptyChaincode; import org.hyperledger.fabric.traces.Traces; import org.junit.jupiter.api.Assertions; @@ -40,32 +41,24 @@ final class ChaincodeBaseTest { @Test void testNewSuccessResponseEmpty() { - final org.hyperledger.fabric.shim.Chaincode.Response response = ResponseUtils.newSuccessResponse(); - assertThat(response.getStatus()) - .as("Response status") - .isEqualTo(org.hyperledger.fabric.shim.Chaincode.Response.Status.SUCCESS); + final Response response = ResponseUtils.newSuccessResponse(); + assertThat(response.getStatus()).as("Response status").isEqualTo(Chaincode.Response.Status.SUCCESS); assertThat(response.getMessage()).as("Response message").isNull(); assertThat(response.getPayload()).as("Response payload").isNull(); } @Test void testNewSuccessResponseWithMessage() { - final org.hyperledger.fabric.shim.Chaincode.Response response = - ResponseUtils.newSuccessResponse("Simple message"); - assertThat(response.getStatus()) - .as("Response status") - .isEqualTo(org.hyperledger.fabric.shim.Chaincode.Response.Status.SUCCESS); + final Response response = ResponseUtils.newSuccessResponse("Simple message"); + assertThat(response.getStatus()).as("Response status").isEqualTo(Chaincode.Response.Status.SUCCESS); assertThat(response.getMessage()).as("Response message").isEqualTo("Simple message"); assertThat(response.getPayload()).as("Response payload").isNull(); } @Test void testNewSuccessResponseWithPayload() { - final org.hyperledger.fabric.shim.Chaincode.Response response = - ResponseUtils.newSuccessResponse("Simple payload".getBytes(Charset.defaultCharset())); - assertThat(response.getStatus()) - .as("Response status") - .isEqualTo(org.hyperledger.fabric.shim.Chaincode.Response.Status.SUCCESS); + final Response response = ResponseUtils.newSuccessResponse("Simple payload".getBytes(Charset.defaultCharset())); + assertThat(response.getStatus()).as("Response status").isEqualTo(Chaincode.Response.Status.SUCCESS); assertThat(response.getMessage()).as("Response message").isNull(); assertThat(response.getPayload()) .as("Response payload") @@ -74,11 +67,9 @@ void testNewSuccessResponseWithPayload() { @Test void testNewSuccessResponseWithMessageAndPayload() { - final org.hyperledger.fabric.shim.Chaincode.Response response = + final Response response = ResponseUtils.newSuccessResponse("Simple message", "Simple payload".getBytes(Charset.defaultCharset())); - assertThat(response.getStatus()) - .as("Response status") - .isEqualTo(org.hyperledger.fabric.shim.Chaincode.Response.Status.SUCCESS); + assertThat(response.getStatus()).as("Response status").isEqualTo(Chaincode.Response.Status.SUCCESS); assertThat(response.getMessage()).as("Response message").isEqualTo("Simple message"); assertThat(response.getPayload()) .as("Response payload") @@ -87,32 +78,30 @@ void testNewSuccessResponseWithMessageAndPayload() { @Test void testNewErrorResponseEmpty() { - final org.hyperledger.fabric.shim.Chaincode.Response response = ResponseUtils.newErrorResponse(); + final Response response = ResponseUtils.newErrorResponse(); assertThat(response.getStatus()) .as("Response status") - .isEqualTo(org.hyperledger.fabric.shim.Chaincode.Response.Status.INTERNAL_SERVER_ERROR); + .isEqualTo(Chaincode.Response.Status.INTERNAL_SERVER_ERROR); assertThat(response.getMessage()).as("Response message").isNull(); assertThat(response.getPayload()).as("Response payload").isNull(); } @Test void testNewErrorResponseWithMessage() { - final org.hyperledger.fabric.shim.Chaincode.Response response = - ResponseUtils.newErrorResponse("Simple message"); + final Response response = ResponseUtils.newErrorResponse("Simple message"); assertThat(response.getStatus()) .as("Response status") - .isEqualTo(org.hyperledger.fabric.shim.Chaincode.Response.Status.INTERNAL_SERVER_ERROR); + .isEqualTo(Chaincode.Response.Status.INTERNAL_SERVER_ERROR); assertThat(response.getMessage()).as("Response message").isEqualTo("Simple message"); assertThat(response.getPayload()).as("Response payload").isNull(); } @Test void testNewErrorResponseWithPayload() { - final org.hyperledger.fabric.shim.Chaincode.Response response = - ResponseUtils.newErrorResponse("Simple payload".getBytes(Charset.defaultCharset())); + final Response response = ResponseUtils.newErrorResponse("Simple payload".getBytes(Charset.defaultCharset())); assertThat(response.getStatus()) .as("Response status") - .isEqualTo(org.hyperledger.fabric.shim.Chaincode.Response.Status.INTERNAL_SERVER_ERROR); + .isEqualTo(Chaincode.Response.Status.INTERNAL_SERVER_ERROR); assertThat(response.getMessage()).as("Response message").isNull(); assertThat(response.getPayload()) .as("Response payload") @@ -121,11 +110,11 @@ void testNewErrorResponseWithPayload() { @Test void testNewErrorResponseWithMessageAndPayload() { - final org.hyperledger.fabric.shim.Chaincode.Response response = + final Response response = ResponseUtils.newErrorResponse("Simple message", "Simple payload".getBytes(Charset.defaultCharset())); assertThat(response.getStatus()) .as("Response status") - .isEqualTo(org.hyperledger.fabric.shim.Chaincode.Response.Status.INTERNAL_SERVER_ERROR); + .isEqualTo(Chaincode.Response.Status.INTERNAL_SERVER_ERROR); assertThat(response.getMessage()).as("Response message").isEqualTo("Simple message"); assertThat(response.getPayload()) .as("Response payload") @@ -134,22 +123,20 @@ void testNewErrorResponseWithMessageAndPayload() { @Test void testNewErrorResponseWithException() { - final org.hyperledger.fabric.shim.Chaincode.Response response = - ResponseUtils.newErrorResponse(new Exception("Simple exception")); + final Response response = ResponseUtils.newErrorResponse(new Exception("Simple exception")); assertThat(response.getStatus()) .as("Response status") - .isEqualTo(org.hyperledger.fabric.shim.Chaincode.Response.Status.INTERNAL_SERVER_ERROR); + .isEqualTo(Chaincode.Response.Status.INTERNAL_SERVER_ERROR); assertThat(response.getMessage()).as("Response message").isEqualTo("Unexpected error"); assertThat(response.getPayload()).as("Response payload").isNull(); } @Test void testNewErrorResponseWithChaincodeException() { - final org.hyperledger.fabric.shim.Chaincode.Response response = - ResponseUtils.newErrorResponse(new ChaincodeException("Chaincode exception")); + final Response response = ResponseUtils.newErrorResponse(new ChaincodeException("Chaincode exception")); assertThat(response.getStatus()) .as("Response status") - .isEqualTo(org.hyperledger.fabric.shim.Chaincode.Response.Status.INTERNAL_SERVER_ERROR); + .isEqualTo(Chaincode.Response.Status.INTERNAL_SERVER_ERROR); assertThat(response.getMessage()).as("Response message").isEqualTo("Chaincode exception"); assertThat(response.getPayload()).as("Response payload").isNull(); } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 000000000..e35655099 --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,66 @@ +[versions] +assertj = "3.27.7" +bouncycastle = "1.86.1" +classgraph = "4.8.195" +commons-cli = "1.11.0" +commons-logging = "1.4.0" +docker-remote-api = "10.0.0" +fabric-protos = "0.3.7" +grpc = "1.84.0" +hamcrest = "3.0" +junit = "6.1.3" +json = "20260814" +json-schema = "1.14.6" +mockito = "5.23.0" +nmcp = "1.6.2" +opentelemetry = "1.66.0" +opentelemetry-grpc = "2.31.1-alpha" +opentelemetry-proto = "1.11.0-alpha" +opentelemetry-semconv = "1.44.0" +pmd = "7.27.0" +protobuf = "4.36.2" +spotless = "8.10.2" +system-stubs-jupiter = "2.1.8" +versions = "0.64.0" + +[libraries] +assertj = { module = "org.assertj:assertj-core", version.ref = "assertj" } +bouncycastle-bom = { module = "org.bouncycastle:bc-jdk18on-bom", version.ref = "bouncycastle" } +bouncycastle-pkix = { module = "org.bouncycastle:bcpkix-jdk18on" } +bouncycastle-prov = { module = "org.bouncycastle:bcprov-jdk18on" } +classgraph = { module = "io.github.classgraph:classgraph", version.ref = "classgraph" } +commons-cli = { module = "commons-cli:commons-cli", version.ref = "commons-cli" } +commons-logging = { module = "commons-logging:commons-logging", version.ref = "commons-logging" } +fabric-protos = { module = "org.hyperledger.fabric:fabric-protos", version.ref = "fabric-protos" } +grpc-bom = { module = "io.grpc:grpc-bom", version.ref = "grpc" } +grpc-inprocess = { module = "io.grpc:grpc-inprocess" } +grpc-netty-shaded = { module = "io.grpc:grpc-netty-shaded" } +grpc-protobuf = { module = "io.grpc:grpc-protobuf" } +grpc-stub = { module = "io.grpc:grpc-stub" } +hamcrest = { module = "org.hamcrest:hamcrest-library", version.ref = "hamcrest" } +junit-bom = { module = "org.junit:junit-bom", version.ref = "junit" } +junit-jupiter = { module = "org.junit.jupiter:junit-jupiter" } +junit-platform-launcher = { module = "org.junit.platform:junit-platform-launcher" } +json = { module = "org.json:json", version.ref = "json" } +json-schema = { module = "com.github.erosb:everit-json-schema", version.ref = "json-schema" } +mockito-core = { module = "org.mockito:mockito-core", version.ref = "mockito" } +opentelemetry-api = { module = "io.opentelemetry:opentelemetry-api" } +opentelemetry-bom = { module = "io.opentelemetry:opentelemetry-bom", version.ref = "opentelemetry" } +opentelemetry-exporter = { module = "io.opentelemetry:opentelemetry-exporter-otlp" } +opentelemetry-grpc = { module = "io.opentelemetry.instrumentation:opentelemetry-grpc-1.6", version.ref = "opentelemetry-grpc" } +opentelemetry-proto = { module = "io.opentelemetry.proto:opentelemetry-proto", version.ref = "opentelemetry-proto" } +opentelemetry-sdk = { module = "io.opentelemetry:opentelemetry-sdk" } +opentelemetry-sdk-autoconfigure = { module = "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure" } +opentelemetry-sdk-trace = { module = "io.opentelemetry:opentelemetry-sdk-trace" } +opentelemetry-semconv = { module = "io.opentelemetry.semconv:opentelemetry-semconv", version.ref = "opentelemetry-semconv" } +opentelemetry-trace-propagators = { module = "io.opentelemetry:opentelemetry-extension-trace-propagators" } +protobuf-bom = { module = "com.google.protobuf:protobuf-bom", version.ref = "protobuf" } +protobuf-util = { module = "com.google.protobuf:protobuf-java-util" } +system-stubs-jupiter = { module = "uk.org.webcompere:system-stubs-jupiter", version.ref = "system-stubs-jupiter" } + +[plugins] +docker-remote-api = { id = "com.bmuschko.docker-remote-api", version.ref = "docker-remote-api" } +nmcp = { id = "com.gradleup.nmcp", version.ref = "nmcp" } +nmcp-aggregation = { id = "com.gradleup.nmcp.aggregation", version.ref = "nmcp" } +spotless = { id = "com.diffplug.spotless", version.ref = "spotless" } +versions = { id = "io.github.ben-manes.versions", version.ref = "versions" }