main 5cd4f4588b58 cached
334 files
953.0 KB
234.0k tokens
1482 symbols
1 requests
Download .txt
Showing preview only (1,066K chars total). Download the full file or copy to clipboard to get everything.
Repository: hyperledger/fabric-chaincode-java
Branch: main
Commit: 5cd4f4588b58
Files: 334
Total size: 953.0 KB

Directory structure:
gitextract_fa6p6lwj/

├── .github/
│   ├── dependabot.yml
│   ├── settings.yml
│   └── workflows/
│       ├── pull_request.yml
│       ├── push.yml
│       ├── release.yml
│       ├── scan.yml
│       ├── schedule.yml
│       ├── scheduled-scan.yml
│       └── test.yml
├── .gitignore
├── CHANGELOG.md
├── CODEOWNERS
├── CODE_OF_CONDUCT.md
├── COMPATIBILITY.md
├── CONTRIBUTING.md
├── LICENSE
├── MAINTAINERS.md
├── Makefile
├── README.md
├── RELEASING.md
├── SECURITY.md
├── build.gradle
├── docs/
│   ├── 404.md
│   ├── _config.yml
│   ├── _includes/
│   │   ├── footer.html
│   │   ├── header.html
│   │   └── javadocs.html
│   └── index.md
├── examples/
│   ├── fabric-contract-example-as-service/
│   │   ├── Dockerfile
│   │   ├── README.md
│   │   ├── build.gradle
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── org/
│   │       │           └── example/
│   │       │               └── contract/
│   │       │                   ├── MyAsset.java
│   │       │                   └── MyAssetContract.java
│   │       └── test/
│   │           └── java/
│   │               └── org/
│   │                   └── example/
│   │                       └── MyAssetContractTest.java
│   ├── fabric-contract-example-gradle/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── build.gradle
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── org/
│   │       │           └── example/
│   │       │               ├── MyAsset.java
│   │       │               └── MyAssetContract.java
│   │       └── test/
│   │           └── java/
│   │               └── org/
│   │                   └── example/
│   │                       └── MyAssetContractTest.java
│   ├── fabric-contract-example-gradle-kotlin/
│   │   ├── .fabricignore
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   ├── gradle/
│   │   │   └── wrapper/
│   │   │       ├── gradle-wrapper.jar
│   │   │       └── gradle-wrapper.properties
│   │   ├── gradlew
│   │   ├── gradlew.bat
│   │   ├── settings.gradle.kts
│   │   └── src/
│   │       ├── main/
│   │       │   └── kotlin/
│   │       │       └── org/
│   │       │           └── example/
│   │       │               ├── MyAsset.kt
│   │       │               └── MyAssetContract.kt
│   │       └── test/
│   │           └── kotlin/
│   │               └── org/
│   │                   └── example/
│   │                       └── MyAssetContractTest.kt
│   ├── fabric-contract-example-maven/
│   │   ├── .gitignore
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── org/
│   │       │           └── example/
│   │       │               ├── MyAsset.java
│   │       │               └── MyAssetContract.java
│   │       └── test/
│   │           └── java/
│   │               └── org/
│   │                   └── example/
│   │                       └── MyAssetContractTest.java
│   └── ledger-api/
│       ├── .gitignore
│       ├── README.md
│       ├── build.gradle
│       └── src/
│           └── main/
│               └── java/
│                   └── org/
│                       └── example/
│                           ├── LedgerAPIContract.java
│                           └── MyAsset.java
├── fabric-chaincode-docker/
│   ├── .gitignore
│   ├── Dockerfile
│   ├── README.md
│   ├── build.gradle
│   ├── build.sh
│   └── start
├── fabric-chaincode-integration-test/
│   ├── .gitignore
│   ├── build.gradle
│   ├── chaincodebootstrap.gradle
│   └── src/
│       ├── contracts/
│       │   ├── bare-gradle/
│       │   │   ├── build.gradle
│       │   │   └── src/
│       │   │       └── main/
│       │   │           ├── java/
│       │   │           │   └── org/
│       │   │           │       └── hyperledger/
│       │   │           │           └── fabric/
│       │   │           │               └── example/
│       │   │           │                   └── BareGradle.java
│       │   │           └── resources/
│       │   │               └── config.props
│       │   ├── bare-maven/
│       │   │   ├── .gitignore
│       │   │   ├── pom.xml
│       │   │   └── src/
│       │   │       └── main/
│       │   │           ├── java/
│       │   │           │   └── org/
│       │   │           │       └── hyperledger/
│       │   │           │           └── fabric/
│       │   │           │               └── example/
│       │   │           │                   └── BareMaven.java
│       │   │           └── resources/
│       │   │               └── config.props
│       │   ├── fabric-ledger-api/
│       │   │   ├── build.gradle
│       │   │   ├── gradle/
│       │   │   │   └── wrapper/
│       │   │   │       ├── gradle-wrapper.jar
│       │   │   │       └── gradle-wrapper.properties
│       │   │   ├── gradlew
│       │   │   ├── gradlew.bat
│       │   │   ├── settings.gradle
│       │   │   └── src/
│       │   │       └── main/
│       │   │           └── java/
│       │   │               └── org/
│       │   │                   └── hyperledger/
│       │   │                       └── fabric/
│       │   │                           └── example/
│       │   │                               └── AllLedgerAPI.java
│       │   ├── fabric-shim-api/
│       │   │   ├── build.gradle
│       │   │   ├── gradle/
│       │   │   │   └── wrapper/
│       │   │   │       ├── gradle-wrapper.jar
│       │   │   │       └── gradle-wrapper.properties
│       │   │   ├── gradlew
│       │   │   ├── gradlew.bat
│       │   │   ├── settings.gradle
│       │   │   └── src/
│       │   │       └── main/
│       │   │           ├── java/
│       │   │           │   └── org/
│       │   │           │       └── hyperledger/
│       │   │           │           └── fabric/
│       │   │           │               └── example/
│       │   │           │                   ├── AllAPI.java
│       │   │           │                   └── EndorsementCC.java
│       │   │           └── resources/
│       │   │               └── config.props
│       │   └── wrapper-maven/
│       │       ├── .gitignore
│       │       ├── .mvn/
│       │       │   └── wrapper/
│       │       │       ├── maven-wrapper.jar
│       │       │       └── maven-wrapper.properties
│       │       ├── mvnw
│       │       ├── mvnw.cmd
│       │       ├── pom.xml
│       │       └── src/
│       │           └── main/
│       │               ├── java/
│       │               │   └── org/
│       │               │       └── hyperledger/
│       │               │           └── fabric/
│       │               │               └── example/
│       │               │                   └── WrapperMaven.java
│       │               └── resources/
│       │                   └── config.props
│       └── test/
│           ├── java/
│           │   └── org/
│           │       └── hyperleder/
│           │           └── fabric/
│           │               └── shim/
│           │                   └── integration/
│           │                       ├── contractinstall/
│           │                       │   └── ContractInstallTest.java
│           │                       ├── ledgertests/
│           │                       │   └── LedgerIntegrationTest.java
│           │                       ├── shimtests/
│           │                       │   ├── SACCIntegrationTest.java
│           │                       │   └── SBECCIntegrationTest.java
│           │                       └── util/
│           │                           ├── Bash.java
│           │                           ├── Command.java
│           │                           ├── Docker.java
│           │                           ├── DockerCompose.java
│           │                           ├── FabricState.java
│           │                           ├── InvokeHelper.java
│           │                           └── Peer.java
│           └── resources/
│               ├── docker-compose-microfab.yaml
│               └── scripts/
│                   ├── ccutils.sh
│                   ├── collection_config.json
│                   └── mfsetup.sh
├── fabric-chaincode-shim/
│   ├── build.gradle
│   ├── javabuild.sh
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── org/
│       │   │       └── hyperledger/
│       │   │           └── fabric/
│       │   │               ├── Logger.java
│       │   │               ├── Logging.java
│       │   │               ├── contract/
│       │   │               │   ├── ClientIdentity.java
│       │   │               │   ├── Context.java
│       │   │               │   ├── ContextFactory.java
│       │   │               │   ├── ContractInterface.java
│       │   │               │   ├── ContractRouter.java
│       │   │               │   ├── ContractRuntimeException.java
│       │   │               │   ├── annotation/
│       │   │               │   │   ├── Contact.java
│       │   │               │   │   ├── Contract.java
│       │   │               │   │   ├── DataType.java
│       │   │               │   │   ├── Default.java
│       │   │               │   │   ├── Info.java
│       │   │               │   │   ├── License.java
│       │   │               │   │   ├── Property.java
│       │   │               │   │   ├── Serializer.java
│       │   │               │   │   ├── Transaction.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── execution/
│       │   │               │   │   ├── ExecutionFactory.java
│       │   │               │   │   ├── ExecutionService.java
│       │   │               │   │   ├── InvocationRequest.java
│       │   │               │   │   ├── JSONTransactionSerializer.java
│       │   │               │   │   ├── SerializerInterface.java
│       │   │               │   │   ├── impl/
│       │   │               │   │   │   ├── ContractExecutionService.java
│       │   │               │   │   │   ├── ContractInvocationRequest.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── metadata/
│       │   │               │   │   ├── MetadataBuilder.java
│       │   │               │   │   ├── TypeSchema.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── package-info.java
│       │   │               │   ├── routing/
│       │   │               │   │   ├── ContractDefinition.java
│       │   │               │   │   ├── DataTypeDefinition.java
│       │   │               │   │   ├── ParameterDefinition.java
│       │   │               │   │   ├── PropertyDefinition.java
│       │   │               │   │   ├── RoutingRegistry.java
│       │   │               │   │   ├── TransactionType.java
│       │   │               │   │   ├── TxFunction.java
│       │   │               │   │   ├── TypeRegistry.java
│       │   │               │   │   ├── impl/
│       │   │               │   │   │   ├── ContractDefinitionImpl.java
│       │   │               │   │   │   ├── DataTypeDefinitionImpl.java
│       │   │               │   │   │   ├── ParameterDefinitionImpl.java
│       │   │               │   │   │   ├── PropertyDefinitionImpl.java
│       │   │               │   │   │   ├── RoutingRegistryImpl.java
│       │   │               │   │   │   ├── SerializerRegistryImpl.java
│       │   │               │   │   │   ├── TxFunctionImpl.java
│       │   │               │   │   │   ├── TypeRegistryImpl.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   └── package-info.java
│       │   │               │   └── systemcontract/
│       │   │               │       ├── SystemContract.java
│       │   │               │       └── package-info.java
│       │   │               ├── ledger/
│       │   │               │   ├── Collection.java
│       │   │               │   ├── Ledger.java
│       │   │               │   ├── impl/
│       │   │               │   │   ├── LedgerImpl.java
│       │   │               │   │   └── package-info.java
│       │   │               │   └── package-info.java
│       │   │               ├── metrics/
│       │   │               │   ├── Metrics.java
│       │   │               │   ├── MetricsProvider.java
│       │   │               │   ├── TaskMetricsCollector.java
│       │   │               │   ├── impl/
│       │   │               │   │   ├── DefaultProvider.java
│       │   │               │   │   ├── NullProvider.java
│       │   │               │   │   └── package-info.java
│       │   │               │   └── package-info.java
│       │   │               ├── overview.html
│       │   │               ├── package-info.java
│       │   │               ├── shim/
│       │   │               │   ├── Chaincode.java
│       │   │               │   ├── ChaincodeBase.java
│       │   │               │   ├── ChaincodeException.java
│       │   │               │   ├── ChaincodeServer.java
│       │   │               │   ├── ChaincodeServerProperties.java
│       │   │               │   ├── ChaincodeStub.java
│       │   │               │   ├── ChatChaincodeWithPeer.java
│       │   │               │   ├── GrpcServer.java
│       │   │               │   ├── NettyChaincodeServer.java
│       │   │               │   ├── NettyGrpcServer.java
│       │   │               │   ├── ResponseUtils.java
│       │   │               │   ├── ext/
│       │   │               │   │   └── sbe/
│       │   │               │   │       ├── StateBasedEndorsement.java
│       │   │               │   │       ├── impl/
│       │   │               │   │       │   ├── StateBasedEndorsementFactory.java
│       │   │               │   │       │   ├── StateBasedEndorsementImpl.java
│       │   │               │   │       │   ├── StateBasedEndorsementUtils.java
│       │   │               │   │       │   └── package-info.java
│       │   │               │   │       └── package-info.java
│       │   │               │   ├── impl/
│       │   │               │   │   ├── ChaincodeInvocationTask.java
│       │   │               │   │   ├── ChaincodeMessageFactory.java
│       │   │               │   │   ├── ChaincodeSupportClient.java
│       │   │               │   │   ├── InvocationStubImpl.java
│       │   │               │   │   ├── InvocationTaskExecutor.java
│       │   │               │   │   ├── InvocationTaskManager.java
│       │   │               │   │   ├── KeyModificationImpl.java
│       │   │               │   │   ├── KeyValueImpl.java
│       │   │               │   │   ├── QueryResultsIteratorImpl.java
│       │   │               │   │   ├── QueryResultsIteratorWithMetadataImpl.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── ledger/
│       │   │               │   │   ├── CompositeKey.java
│       │   │               │   │   ├── CompositeKeyFormatException.java
│       │   │               │   │   ├── KeyModification.java
│       │   │               │   │   ├── KeyValue.java
│       │   │               │   │   ├── QueryResultsIterator.java
│       │   │               │   │   ├── QueryResultsIteratorWithMetadata.java
│       │   │               │   │   └── package-info.java
│       │   │               │   └── package-info.java
│       │   │               └── traces/
│       │   │                   ├── Traces.java
│       │   │                   ├── TracesProvider.java
│       │   │                   ├── impl/
│       │   │                   │   ├── DefaultTracesProvider.java
│       │   │                   │   ├── NullProvider.java
│       │   │                   │   ├── OpenTelemetryProperties.java
│       │   │                   │   ├── OpenTelemetryTracesProvider.java
│       │   │                   │   └── package-info.java
│       │   │                   └── package-info.java
│       │   └── resources/
│       │       ├── contract-schema.json
│       │       └── json-schema-draft-04-schema.json
│       └── test/
│           ├── java/
│           │   ├── ChaincodeWithoutPackageTest.java
│           │   ├── EmptyChaincodeWithoutPackage.java
│           │   ├── contract/
│           │   │   ├── Greeting.java
│           │   │   └── SampleContract.java
│           │   └── org/
│           │       └── hyperledger/
│           │           └── fabric/
│           │               ├── LoggerTest.java
│           │               ├── LoggingTest.java
│           │               ├── TestUtil.java
│           │               ├── contract/
│           │               │   ├── AllTypesAsset.java
│           │               │   ├── ChaincodeStubNaiveImpl.java
│           │               │   ├── ClientIdentityTest.java
│           │               │   ├── ContextFactoryTest.java
│           │               │   ├── ContextTest.java
│           │               │   ├── ContractInterfaceTest.java
│           │               │   ├── ContractRouterTest.java
│           │               │   ├── MyType.java
│           │               │   ├── MyType2.java
│           │               │   ├── TransactionExceptionTest.java
│           │               │   ├── execution/
│           │               │   │   ├── ContractExecutionServiceTest.java
│           │               │   │   └── JSONTransactionSerializerTest.java
│           │               │   ├── metadata/
│           │               │   │   ├── MetadataBuilderTest.java
│           │               │   │   └── TypeSchemaTest.java
│           │               │   ├── routing/
│           │               │   │   ├── ContractDefinitionTest.java
│           │               │   │   ├── DataTypeDefinitionTest.java
│           │               │   │   ├── ParameterDefinitionTest.java
│           │               │   │   ├── PropertyDefinitionTest.java
│           │               │   │   ├── TxFunctionTest.java
│           │               │   │   └── TypeRegistryTest.java
│           │               │   └── simplepath/
│           │               │       └── ContractSimplePathTest.java
│           │               ├── ledger/
│           │               │   └── LedgerTest.java
│           │               ├── metrics/
│           │               │   ├── MetricsTest.java
│           │               │   └── impl/
│           │               │       └── DefaultProviderTest.java
│           │               ├── shim/
│           │               │   ├── ChaincodeBaseTest.java
│           │               │   ├── ChaincodeServerImplTest.java
│           │               │   ├── ChaincodeStubTest.java
│           │               │   ├── ChaincodeTest.java
│           │               │   ├── ChatChaincodeWithPeerTest.java
│           │               │   ├── NettyGrpcServerTest.java
│           │               │   ├── chaincode/
│           │               │   │   └── EmptyChaincode.java
│           │               │   ├── ext/
│           │               │   │   └── sbe/
│           │               │   │       ├── StateBasedEndorsementTest.java
│           │               │   │       └── impl/
│           │               │   │           ├── StateBasedEndorsementFactoryTest.java
│           │               │   │           └── StateBasedEndorsementImplTest.java
│           │               │   ├── fvt/
│           │               │   │   └── ChaincodeFVTest.java
│           │               │   ├── impl/
│           │               │   │   ├── ChaincodeMessageFactoryTest.java
│           │               │   │   ├── ChaincodeSupportClientTest.java
│           │               │   │   ├── InnvocationTaskManagerTest.java
│           │               │   │   ├── InvocationStubImplTest.java
│           │               │   │   ├── InvocationTaskManagerTest.java
│           │               │   │   ├── KeyModificationImplTest.java
│           │               │   │   ├── KeyValueImplTest.java
│           │               │   │   └── QueryResultsIteratorWithMetadataImplTest.java
│           │               │   ├── ledger/
│           │               │   │   └── CompositeKeyTest.java
│           │               │   ├── mock/
│           │               │   │   └── peer/
│           │               │   │       ├── ChaincodeMockPeer.java
│           │               │   │       ├── CompleteStep.java
│           │               │   │       ├── DelValueStep.java
│           │               │   │       ├── ErrorResponseStep.java
│           │               │   │       ├── GetHistoryForKeyStep.java
│           │               │   │       ├── GetQueryResultStep.java
│           │               │   │       ├── GetStateByRangeStep.java
│           │               │   │       ├── GetStateMetadata.java
│           │               │   │       ├── GetValueStep.java
│           │               │   │       ├── InvokeChaincodeStep.java
│           │               │   │       ├── PurgeValueStep.java
│           │               │   │       ├── PutStateMetadata.java
│           │               │   │       ├── PutValueStep.java
│           │               │   │       ├── QueryCloseStep.java
│           │               │   │       ├── QueryNextStep.java
│           │               │   │       ├── QueryResultStep.java
│           │               │   │       ├── RegisterStep.java
│           │               │   │       └── ScenarioStep.java
│           │               │   └── utils/
│           │               │       ├── MessageUtil.java
│           │               │       └── TimeoutUtil.java
│           │               └── traces/
│           │                   ├── TracesTest.java
│           │                   └── impl/
│           │                       ├── DefaultProviderTest.java
│           │                       ├── OpenTelemetryPropertiesTest.java
│           │                       ├── OpenTelemetryTracesProviderTest.java
│           │                       └── TestSpanExporterProvider.java
│           └── resources/
│               ├── META-INF/
│               │   └── services/
│               │       └── io.opentelemetry.sdk.autoconfigure.spi.traces.ConfigurableSpanExporterProvider
│               ├── ca.crt
│               ├── client.crt
│               ├── client.crt.enc
│               ├── client.key
│               ├── client.key.enc
│               └── client.key.password-protected
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── pmd-ruleset.xml
├── release_notes/
│   ├── v1.3.0.txt
│   ├── v1.4.0.txt
│   ├── v2.0.0-alpha.txt
│   ├── v2.0.0-beta.txt
│   ├── v2.0.0.txt
│   ├── v2.0.1.txt
│   ├── v2.1.0.txt
│   ├── v2.1.1.txt
│   ├── v2.2.0.txt
│   ├── v2.2.1.txt
│   ├── v2.3.0.txt
│   ├── v2.3.1.txt
│   ├── v2.4.0-beta.txt
│   ├── v2.4.0.txt
│   ├── v2.4.1.txt
│   └── v2.5.0.txt
└── settings.gradle

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/dependabot.yml
================================================
version: 2

multi-ecosystem-groups:
  java:
    schedule:
      interval: daily

updates:
  - package-ecosystem: docker
    directories:
      - "/fabric-chaincode-docker"
      - "/examples/fabric-contract-example-as-service"
    schedule:
      interval: daily

  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: daily

  - package-ecosystem: gradle
    multi-ecosystem-group: java
    patterns:
      - "*"
    directories:
      - "/"
      - "/fabric-chaincode-docker"
      - "/examples/fabric-contract-example-as-service"
      - "/examples/fabric-contract-example-gradle"
      - "/examples/fabric-contract-example-gradle-kotlin"
      - "/examples/ledger-api"
      - "/fabric-chaincode-integration-test"
      - "/fabric-chaincode-integration-test/src/contracts/bare-gradle"
      - "/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api"
      - "/fabric-chaincode-integration-test/src/contracts/fabric-shim-api"
      - "/fabric-chaincode-shim"

  - package-ecosystem: maven
    multi-ecosystem-group: java
    patterns:
      - "*"
    directories:
      - "/examples/fabric-contract-example-maven"
      - "/fabric-chaincode-integration-test/src/contracts/bare-maven"
      - "/fabric-chaincode-integration-test/src/contracts/wrapper-maven"


================================================
FILE: .github/settings.yml
================================================
#
# SPDX-License-Identifier: Apache-2.0
#

repository:
  name: fabric-chaincode-java
  description: Hyperledger Fabric Contract and Chaincode implementation for Java
    https://wiki.hyperledger.org/display/fabric
  homepage: https://jira.hyperledger.org/issues/?jql=project+%3D+FAB+AND+component+%3D+fabric-chaincode-java
  default_branch: main
  has_downloads: true
  has_issues: false
  has_projects: false
  has_wiki: false
  archived: false
  private: false
  allow_squash_merge: false
  allow_merge_commit: true
  allow_rebase_merge: true


================================================
FILE: .github/workflows/pull_request.yml
================================================
# Copyright the Hyperledger Fabric contributors. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

name: Pull request

on:
  pull_request:
    branches:
      - main
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

jobs:
  test:
    uses: ./.github/workflows/test.yml

  scan:
    uses: ./.github/workflows/scan.yml

  pull-request:
    needs: test
    name: Pull request success
    runs-on: ubuntu-latest
    steps:
      - run: "true"


================================================
FILE: .github/workflows/push.yml
================================================
# Copyright the Hyperledger Fabric contributors. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

name: Push

on:
  push:
    branches:
      - main
  workflow_dispatch:

jobs:
  test:
    uses: ./.github/workflows/test.yml


================================================
FILE: .github/workflows/release.yml
================================================
# Copyright the Hyperledger Fabric contributors. All rights reserved.
#
# SPDX-License-Identifier: Apache-2.0

name: Release

on:
  push:
    tags:
      - "v[0-9]+.[0-9]+.[0-9]+"
      - "v[0-9]+.[0-9]+.[0-9]+-*"
  workflow_dispatch:

env:
  IMAGE_NAME: ${{ github.repository_owner }}/fabric-javaenv

jobs:
  publish-github:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
      - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
        with:
          distribution: "temurin"
          java-version: 25
      - uses: gradle/actions/setup-gradle@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6.1.0
      - name: Publish to GitHub Packages
        run: |
          ./gradlew publishAllPublicationsToGitHubRepository
        env:
          ORG_GRADLE_PROJECT_signingKey: ${{ secrets.OSSRH_GPG_SECRET_KEY }}
          ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.OSSRH_GPG_SECRET_KEY_PASSWORD }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  publish-maven:
    runs-on: ubuntu-latest
    permissions:
      contents: read
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
      - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
        with:
          distribution: "temurin"
          java-version: 25
      - uses: gradle/actions/setup-gradle@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6.1.0
      - name: Publish to Maven Central
        run: |
          ./gradlew publishAggregationToCentralPortal
        env:
          ORG_GRADLE_PROJECT_signingKey: ${{ secrets.OSSRH_GPG_SECRET_KEY }}
          ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.OSSRH_GPG_SECRET_KEY_PASSWORD }}
          ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MAVENCENTRAL_USERNAME }}
          ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.MAVENCENTRAL_PASSWORD }}

  docker-build-push:
    name: Push Docker image
    runs-on: ${{ matrix.arch.runner }}
    permissions:
      contents: read
      packages: write
    strategy:
      fail-fast: false
      matrix:
        arch:
          - platform: linux-amd64
            runner: ubuntu-24.04
          - platform: linux-arm64
            runner: ubuntu-24.04-arm
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
      - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
        with:
          distribution: "temurin"
          java-version: 25
      - uses: gradle/actions/setup-gradle@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6.1.0
      - name: Build the dependencies needed for the image
        run: ./gradlew :fabric-chaincode-docker:copyAllDeps
      - name: Get commit timestamp
        run: echo "SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct)" >> "${GITHUB_ENV}"
      - name: Login to GitHub Container Registry
        uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Login to Docker Hub
        uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
        with:
          registry: docker.io
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0
      - name: Build image
        id: build
        uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
        with:
          file: fabric-chaincode-docker/Dockerfile
          context: fabric-chaincode-docker
          outputs: type=registry,"name=${{ format('ghcr.io/{0},docker.io/{0}', env.IMAGE_NAME) }}",push-by-digest=true,name-canonical=true
        env:
          SOURCE_DATE_EPOCH: ${{ env.SOURCE_DATE_EPOCH }}
      - name: Export digest
        run: |
          mkdir -p ${{ runner.temp }}/digests
          digest="${{ steps.build.outputs.digest }}"
          touch "${{ runner.temp }}/digests/${digest#sha256:}"
      - name: Upload digest
        uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
        with:
          name: digest-${{ matrix.arch.platform }}
          path: ${{ runner.temp }}/digests/*
          if-no-files-found: error

  docker-meta:
    needs: docker-build-push
    name: Publish Docker metadata
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    strategy:
      fail-fast: false
      matrix:
        registry:
          - docker.io
          - ghcr.io
    steps:
      - name: Download digests
        uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
        with:
          path: ${{ runner.temp }}/digests
          pattern: digest-*
          merge-multiple: true
      - name: Login to ${{ matrix.registry }}
        uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
        with:
          registry: ${{ matrix.registry }}
          username: ${{ matrix.registry == 'docker.io' && secrets.DOCKERHUB_USERNAME || github.actor }}
          password: ${{ matrix.registry == 'docker.io' && secrets.DOCKERHUB_TOKEN || secrets.GITHUB_TOKEN }}
      - name: Docker metadata
        id: meta
        uses: docker/metadata-action@030e881283bb7a6894de51c315a6bfe6a94e05cf # v6.0.0
        with:
          images: ${{ matrix.registry }}/${{ env.IMAGE_NAME }}
          tags: |
            type=semver,pattern={{version}}
            type=semver,pattern={{major}}.{{minor}}
            type=semver,pattern={{major}}.{{minor}}.{{patch}}
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0
      - name: Create and push manifest list
        working-directory: ${{ runner.temp }}/digests
        run: |
          docker buildx imagetools create $(jq -cr '.tags | map("--tag " + .) | join(" ")' <<< "${DOCKER_METADATA_OUTPUT_JSON}") \
            $(printf '${{ matrix.registry }}/${{ env.IMAGE_NAME }}@sha256:%s ' *)
      - name: Inspect image
        run: docker buildx imagetools inspect '${{ matrix.registry }}/${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.version }}'


================================================
FILE: .github/workflows/scan.yml
================================================
name: "Scheduled vulnerability scan"

on:
  workflow_call:
    inputs:
      ref:
        description: Branch, tag or SHA to scan.
        type: string
        required: false
        default: ""

permissions:
  contents: read

jobs:
  osv-scanner:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with:
          ref: ${{ inputs.ref }}
      # Go needed for scanning of v2.5.5 and earlier
      - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
        with:
          go-version: stable
          cache: false
      - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
        with:
          distribution: temurin
          # Releases v2.5.7 and earlier do not support Java 25
          java-version: 21
      - uses: gradle/actions/setup-gradle@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6.1.0
      - name: Scan
        run: make scan


================================================
FILE: .github/workflows/schedule.yml
================================================
name: Scheduled build

on:
  schedule:
    - cron: "5 4 * * 0"
  workflow_dispatch:

jobs:
  main:
    uses: ./.github/workflows/test.yml


================================================
FILE: .github/workflows/scheduled-scan.yml
================================================
name: "Scheduled vulnerability scan"

on:
  schedule:
    - cron: "20 3 * * *"
  workflow_dispatch:

permissions:
  contents: read

jobs:
  release-version:
    name: Get latest release tag
    runs-on: ubuntu-latest
    outputs:
      tag_name: ${{ steps.tag-name.outputs.value }}
    steps:
      - id: tag-name
        run: echo "value=$(curl --location --silent --fail "https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/latest" | jq --raw-output '.tag_name')" >> "${GITHUB_OUTPUT}"

  scan-release:
    name: Scan ${{ needs.release-version.outputs.tag_name }}
    needs: release-version
    uses: ./.github/workflows/scan.yml
    with:
      ref: ${{ needs.release-version.outputs.tag_name }}

  scan-latest:
    name: Scan latest
    uses: ./.github/workflows/scan.yml


================================================
FILE: .github/workflows/test.yml
================================================
# Copyright the Hyperledger Fabric contributors. All rights reserved.
#
# SPDX-License-Identifier: Apache-2.0

name: Test

on:
  workflow_call:
    inputs:
      ref:
        default: ""
        required: false
        type: string

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with:
          ref: ${{ inputs.ref }}
      - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
        with:
          distribution: temurin
          java-version: 25
      - uses: gradle/actions/setup-gradle@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6.1.0
      - name: Build and Unit test
        run: ./gradlew :fabric-chaincode-shim:build

  intergationtest:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with:
          ref: ${{ inputs.ref }}
      - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
        with:
          distribution: temurin
          java-version: 25
      - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
        with:
          node-version: "lts/*"
      - uses: gradle/actions/setup-gradle@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6.1.0
      - name: Populate chaincode with latest java-version
        run: |
          ./gradlew -I $GITHUB_WORKSPACE/fabric-chaincode-integration-test/chaincodebootstrap.gradle -PchaincodeRepoDir=$GITHUB_WORKSPACE/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/repository publishShimPublicationToFabricRepository
          ./gradlew -I $GITHUB_WORKSPACE/fabric-chaincode-integration-test/chaincodebootstrap.gradle -PchaincodeRepoDir=$GITHUB_WORKSPACE/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/repository publishShimPublicationToFabricRepository
          ./gradlew -I $GITHUB_WORKSPACE/fabric-chaincode-integration-test/chaincodebootstrap.gradle -PchaincodeRepoDir=$GITHUB_WORKSPACE/fabric-chaincode-integration-test/src/contracts/bare-gradle/repository publishShimPublicationToFabricRepository
          ./gradlew -I $GITHUB_WORKSPACE/fabric-chaincode-integration-test/chaincodebootstrap.gradle -PchaincodeRepoDir=$GITHUB_WORKSPACE/fabric-chaincode-integration-test/src/contracts/bare-maven/repository publishShimPublicationToFabricRepository
          ./gradlew -I $GITHUB_WORKSPACE/fabric-chaincode-integration-test/chaincodebootstrap.gradle -PchaincodeRepoDir=$GITHUB_WORKSPACE/fabric-chaincode-integration-test/src/contracts/wrapper-maven/repository publishShimPublicationToFabricRepository
      - name: Ensure that the Peer/weft tools are available
        run: |
          curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/main/scripts/install-fabric.sh | bash -s -- binary
          npm install -g @hyperledger-labs/weft

          # set the path and cfg env var for the rest of the step
          echo "FABRIC_CFG_PATH=$GITHUB_WORKSPACE/config" >> $GITHUB_ENV
          echo "$GITHUB_WORKSPACE/bin" >> $GITHUB_PATH
      - name: versions
        run: |
          peer version
          weft --version
      - name: Integration Tests
        run: ./gradlew :fabric-chaincode-integration-test:build

  docker:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with:
          ref: ${{ inputs.ref }}
      - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
        with:
          distribution: temurin
          java-version: 25
      - uses: gradle/actions/setup-gradle@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6.1.0
      - name: Build Docker image
        run: ./gradlew :fabric-chaincode-docker:buildImage


================================================
FILE: .gitignore
================================================
/.settings/
/.project
*.log
*.swp
.gradletasknamecache
.classpath
**/bin/
/build/
build/*
settings-gradle.lockfile
config/

_cfg
repository

.env

.gradle
/build/
out/
gradle.lockfile
!gradle/wrapper/gradle-wrapper.jar

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### NetBeans ###
nbproject/private/
build/
nbbuild/
dist/
nbdist/
.nb-gradle/

local-config.yaml
gradle.properties
.vscode/

### Jekyll ###
.sass-cache
_site


================================================
FILE: CHANGELOG.md
================================================
# Changelog

Notable changes in each release are documented on the project's [GitHub releases](https://github.com/hyperledger/fabric-chaincode-java/releases) page. Change history from previous releases is retained below.

## v2.5.0
Thu Dec  8 09:02:17 GMT 2022

* [94cfadee](https://github.com/hyperledger/fabric-chaincode-java/commit/94cfadee) Move inactive maintainers to emeritus status
* [37bebee7](https://github.com/hyperledger/fabric-chaincode-java/commit/37bebee7) Adjust to using the Temurin JVM
* [0c9f44fb](https://github.com/hyperledger/fabric-chaincode-java/commit/0c9f44fb) Basic github actions workflow
* [d15f2cd1](https://github.com/hyperledger/fabric-chaincode-java/commit/d15f2cd1) Update pom.xml
* [1fba41b2](https://github.com/hyperledger/fabric-chaincode-java/commit/1fba41b2) Remove unrequired Maven wrapper directory Update Maven wrapper to latest version
* [3a2db82d](https://github.com/hyperledger/fabric-chaincode-java/commit/3a2db82d) Bump version to 2.5.0
* [35eabb0a](https://github.com/hyperledger/fabric-chaincode-java/commit/35eabb0a) PurgePrivateData
* [80a36ee4](https://github.com/hyperledger/fabric-chaincode-java/commit/80a36ee4) Swap to using the published fabric-protos libraries
* [dd551979](https://github.com/hyperledger/fabric-chaincode-java/commit/dd551979) Update MAINTAINERS.md
* [f25df1b6](https://github.com/hyperledger/fabric-chaincode-java/commit/f25df1b6) Add test for Logger.debug
* [d1d093b4](https://github.com/hyperledger/fabric-chaincode-java/commit/d1d093b4) Regular Maintainece Task
* [22c722fe](https://github.com/hyperledger/fabric-chaincode-java/commit/22c722fe) Update README.md
* [2c35c3ed](https://github.com/hyperledger/fabric-chaincode-java/commit/2c35c3ed) JSONPropertyIgnore only works on getter
* [02d1485a](https://github.com/hyperledger/fabric-chaincode-java/commit/02d1485a) Change from RocketChat to Discord
* [5608879e](https://github.com/hyperledger/fabric-chaincode-java/commit/5608879e) Temporarily remove nightly publish & Fix PR build
* [d13d3070](https://github.com/hyperledger/fabric-chaincode-java/commit/d13d3070) Fix transaction serializer usage
* [5388349d](https://github.com/hyperledger/fabric-chaincode-java/commit/5388349d) Remove the log4j dependency

## v2.4.1
Mon Dec 13 11:50:31 GMT 2021

* [bf054cb0](https://github.com/hyperledger/fabric-chaincode-java/commit/bf054cb0) Add a brief example for the -as-a-service
* [f9ada8f5](https://github.com/hyperledger/fabric-chaincode-java/commit/f9ada8f5) Chaincode-as-a-service main bootstrap method

## 2.4.0
Fri Nov 26 08:21:40 GMT 2021

Release 2.4.0 

## v2.4.0-beta
Fri 13 Aug 2021 16:43:31 CEST

* [292c4ebe](https://github.com/hyperledger/fabric-chaincode-java/commit/292c4ebe) Update the build.gradle for publishing

## v2.3.1
Wed 21 Jul 2021 11:20:03 BST

* [6be7a724](https://github.com/hyperledger/fabric-chaincode-java/commit/6be7a724) Integration tests extended
* [66e25ea9](https://github.com/hyperledger/fabric-chaincode-java/commit/66e25ea9) NettyGrpcServer -- support mutual TLS
* [1128e7b2](https://github.com/hyperledger/fabric-chaincode-java/commit/1128e7b2) NettyGrpcServer: logger->LOGGER
* [b7b4ef12](https://github.com/hyperledger/fabric-chaincode-java/commit/b7b4ef12) NettyGrpcServer -- reformat code
* [3a98fc5e](https://github.com/hyperledger/fabric-chaincode-java/commit/3a98fc5e) NettyGrpcServer -- configure ALPN
* [63c12ffa](https://github.com/hyperledger/fabric-chaincode-java/commit/63c12ffa) NettyGrpcServerTest -- improve startAndStopTlsPassword, startAndStopTlsWithoutPassword test cases
* [5046eb79](https://github.com/hyperledger/fabric-chaincode-java/commit/5046eb79) Bump logback-classic in /examples/fabric-contract-example-maven
* [ab2a166d](https://github.com/hyperledger/fabric-chaincode-java/commit/ab2a166d) added tests
* [25706938](https://github.com/hyperledger/fabric-chaincode-java/commit/25706938) Add additional contracts for deployment test
* [e096d4f7](https://github.com/hyperledger/fabric-chaincode-java/commit/e096d4f7) Review ideas
* [7645bb9d](https://github.com/hyperledger/fabric-chaincode-java/commit/7645bb9d) Move to use Maven Wrapper
* [d212e2a7](https://github.com/hyperledger/fabric-chaincode-java/commit/d212e2a7) Upgrade gradle to v7
* [f1d6b7da](https://github.com/hyperledger/fabric-chaincode-java/commit/f1d6b7da) Gradle wrapper updated to the latest version
* [3f190ef5](https://github.com/hyperledger/fabric-chaincode-java/commit/3f190ef5) Transaction metadata tags updated
* [0d0c9280](https://github.com/hyperledger/fabric-chaincode-java/commit/0d0c9280) Update "master" branch references to "main"
* [ca69f15d](https://github.com/hyperledger/fabric-chaincode-java/commit/ca69f15d) Fix link in SECURITY.md
* [4c6cbf47](https://github.com/hyperledger/fabric-chaincode-java/commit/4c6cbf47) Correct condition
* [76c7fe45](https://github.com/hyperledger/fabric-chaincode-java/commit/76c7fe45) Cleanup files
* [70bdd194](https://github.com/hyperledger/fabric-chaincode-java/commit/70bdd194) Add in publishing of the nightly master branch drivers
* [b51eac20](https://github.com/hyperledger/fabric-chaincode-java/commit/b51eac20) Change FABRIC_VERSION to latest tag
* [28dfb24b](https://github.com/hyperledger/fabric-chaincode-java/commit/28dfb24b) fix fabric-contract-example-maven/pom.xml
* [ff48941c](https://github.com/hyperledger/fabric-chaincode-java/commit/ff48941c) Logging Tests Reset Correctly
* [cc31ae01](https://github.com/hyperledger/fabric-chaincode-java/commit/cc31ae01) [FABCJ-214](https://jira.hyperledger.org/browse/FABCJ-214) - Java chaincode gRPC server
* [06f72193](https://github.com/hyperledger/fabric-chaincode-java/commit/06f72193) Fix "build shadowJar" error
* [278e9f8e](https://github.com/hyperledger/fabric-chaincode-java/commit/278e9f8e) [FABCJ-187](https://jira.hyperledger.org/browse/FABCJ-187) Add max inbound msg size configuration
* [bf4f30aa](https://github.com/hyperledger/fabric-chaincode-java/commit/bf4f30aa) Fix javadoc build
* [9e403b6d](https://github.com/hyperledger/fabric-chaincode-java/commit/9e403b6d) Fix JavaDoc link to Compatibility documentation
* [57678eea](https://github.com/hyperledger/fabric-chaincode-java/commit/57678eea) Bump version to 2.3.1
* [91e6001d](https://github.com/hyperledger/fabric-chaincode-java/commit/91e6001d) [FABCJ-290](https://jira.hyperledger.org/browse/FABCJ-290) Add release guide
* [0deb7e0d](https://github.com/hyperledger/fabric-chaincode-java/commit/0deb7e0d) [FABCJ-293](https://jira.hyperledger.org/browse/FABCJ-293) Remove gradle from image
* [2dfe17c1](https://github.com/hyperledger/fabric-chaincode-java/commit/2dfe17c1) [FABCJ-291](https://jira.hyperledger.org/browse/FABCJ-291) Startkey needs additional checks For the open ended query, the start and empty keys are empty from the chaincode. However, in the shim, if the start key is an empty key, it is replaced with 0x01  which is nothing but a namespace for the non-composite key.
* [21d81193](https://github.com/hyperledger/fabric-chaincode-java/commit/21d81193) Update doc links
* [78ed0157](https://github.com/hyperledger/fabric-chaincode-java/commit/78ed0157) [FABCJ-288](https://jira.hyperledger.org/browse/FABCJ-288) fix: simple key end of range
* [90f6c3c2](https://github.com/hyperledger/fabric-chaincode-java/commit/90f6c3c2) Update dependencies
* [526d1cc8](https://github.com/hyperledger/fabric-chaincode-java/commit/526d1cc8) [FABCJ-284](https://jira.hyperledger.org/browse/FABCJ-284) Broken link
* [7f722053](https://github.com/hyperledger/fabric-chaincode-java/commit/7f722053) force rebuild
* [9a42effb](https://github.com/hyperledger/fabric-chaincode-java/commit/9a42effb) [FABCJ-285](https://jira.hyperledger.org/browse/FABCJ-285) Remove incorrect log point
* [c2367768](https://github.com/hyperledger/fabric-chaincode-java/commit/c2367768) Clean up Fabric Version Methodology
* [88da28f6](https://github.com/hyperledger/fabric-chaincode-java/commit/88da28f6) [FAB-17777](https://jira.hyperledger.org/browse/FAB-17777) Create basic settings.yaml
* [a6b00f2d](https://github.com/hyperledger/fabric-chaincode-java/commit/a6b00f2d) [FABCJ-283](https://jira.hyperledger.org/browse/FABCJ-283) Update javadoc 2.x link
* [96fa4d6e](https://github.com/hyperledger/fabric-chaincode-java/commit/96fa4d6e) [FABCJ-283](https://jira.hyperledger.org/browse/FABCJ-283) Update docs to handle new branch
* [ff031f2d](https://github.com/hyperledger/fabric-chaincode-java/commit/ff031f2d) [FABCJ-283](https://jira.hyperledger.org/browse/FABCJ-283) Bump version number to 3.0.0 - in order to not contradict release-2.x branch
* [35a5159d](https://github.com/hyperledger/fabric-chaincode-java/commit/35a5159d) [FABCJ-283](https://jira.hyperledger.org/browse/FABCJ-283) Update docker image version to 2.1
* [67af7977](https://github.com/hyperledger/fabric-chaincode-java/commit/67af7977) [FABCJ-280](https://jira.hyperledger.org/browse/FABCJ-280) Copy chaincode into temporary directory before building
* [e69168cb](https://github.com/hyperledger/fabric-chaincode-java/commit/e69168cb) [FABCJ-276](https://jira.hyperledger.org/browse/FABCJ-276) Access localmspid
* [cc673036](https://github.com/hyperledger/fabric-chaincode-java/commit/cc673036) [FABCN-359](https://jira.hyperledger.org/browse/FABCN-359) Ledger Class
* [f0689360](https://github.com/hyperledger/fabric-chaincode-java/commit/f0689360) [FABCJ-273](https://jira.hyperledger.org/browse/FABCJ-273) Show release-2.0 Javadoc
* [364cae9d](https://github.com/hyperledger/fabric-chaincode-java/commit/364cae9d) [FABCJ-269](https://jira.hyperledger.org/browse/FABCJ-269) Compatibility Matrix
* [89ffb592](https://github.com/hyperledger/fabric-chaincode-java/commit/89ffb592) [FABCJ-273](https://jira.hyperledger.org/browse/FABCJ-273) Prepare next release v2.1.0
* [6c1cdba0](https://github.com/hyperledger/fabric-chaincode-java/commit/6c1cdba0) Java chaincode gRPC server for run external chaincode add NettyGrpcServer with method /Connect for start chat with peer without TLS add example external chaincode

## v2.3.0
Tue  3 Nov 2020 14:20:11 GMT

* [081d5c8](https://github.com/hyperledger/fabric-chaincode-java/commit/081d5c8) Bump version to 2.2.2
* [b494824](https://github.com/hyperledger/fabric-chaincode-java/commit/b494824) [FABCJ-290](https://jira.hyperledger.org/browse/FABCJ-290) Add release guide

## v2.2.1
Wed  7 Oct 2020 16:21:53 BST

* [cef231c](https://github.com/hyperledger/fabric-chaincode-java/commit/cef231c) [FABCJ-293](https://jira.hyperledger.org/browse/FABCJ-293) Remove gradle from image
* [d2643ef](https://github.com/hyperledger/fabric-chaincode-java/commit/d2643ef) Minor Performance Improvements
* [703558c](https://github.com/hyperledger/fabric-chaincode-java/commit/703558c) [FABCJ-291](https://jira.hyperledger.org/browse/FABCJ-291) Startkey needs additional checks For the open ended query, the start and empty keys are empty from the chaincode. However, in the shim, if the start key is an empty key, it is replaced with 0x01  which is nothing but a namespace for the non-composite key.
* [f35ae08](https://github.com/hyperledger/fabric-chaincode-java/commit/f35ae08) Fix tagging of fabric-javaenv image
* [cb31d36](https://github.com/hyperledger/fabric-chaincode-java/commit/cb31d36) Bump version to 2.2.1

## v2.2.0
Thu  2 Jul 11:28:13 BST 2020

* [32c8201](https://github.com/hyperledger/fabric-chaincode-java/commit/32c8201) [FABCJ-289](https://jira.hyperledger.org/browse/FABCJ-289) release: 2.2.0 LTS
* [0948234](https://github.com/hyperledger/fabric-chaincode-java/commit/0948234) [FABCJ-288](https://jira.hyperledger.org/browse/FABCJ-288) fix: simple key end of range
* [8b06be2](https://github.com/hyperledger/fabric-chaincode-java/commit/8b06be2) [FABCJ-286](https://jira.hyperledger.org/browse/FABCJ-286) Prepare 2.1.2

## v2.1.1
Mon 18 May 09:09:24 BST 2020

* [f0f958e](https://github.com/hyperledger/fabric-chaincode-java/commit/f0f958e) [FABCJ-284](https://jira.hyperledger.org/browse/FABCJ-284) Broken docs link
* [b89c464](https://github.com/hyperledger/fabric-chaincode-java/commit/b89c464) [FABCJ-285](https://jira.hyperledger.org/browse/FABCJ-285) Remove incorrect log point
* [93ff6bb](https://github.com/hyperledger/fabric-chaincode-java/commit/93ff6bb) [FABCJ-283](https://jira.hyperledger.org/browse/FABCJ-283) Bump version number to 2.1.1

## v2.1.0
Thu  9 Apr 2020 14:13:36 BST

* [72e6f78](https://github.com/hyperledger/fabric-chaincode-java/commit/72e6f78) [FABCJ-283](https://jira.hyperledger.org/browse/FABCJ-283) Update docker image version
* [54606f8](https://github.com/hyperledger/fabric-chaincode-java/commit/54606f8) [FABCJ-269](https://jira.hyperledger.org/browse/FABCJ-269) Compatibility Matrix

## v2.0.1
Wed  4 Mar 16:38:58 GMT 2020

* [8cb6a25](https://github.com/hyperledger/fabric-chaincode-java/commit/8cb6a25) [FAB-16136](https://jira.hyperledger.org/browse/FAB-16136) Do not run tests in chaincode container
* [3710641](https://github.com/hyperledger/fabric-chaincode-java/commit/3710641) [FABCJ-280](https://jira.hyperledger.org/browse/FABCJ-280) Copy chaincode into temporary directory before building
* [a25a7d6](https://github.com/hyperledger/fabric-chaincode-java/commit/a25a7d6) [FABCJ-276](https://jira.hyperledger.org/browse/FABCJ-276) Access localmspid

## v2.0.0
Fri 24 Jan 10:26:03 GMT 2020

* [659a1c4](https://github.com/hyperledger/fabric-chaincode-java/commit/659a1c4) Port fixes from master branch for Coverage & typos
* [9cf1e6a](https://github.com/hyperledger/fabric-chaincode-java/commit/9cf1e6a) [FABCI-482](https://jira.hyperledger.org/browse/FABCI-482) Update Nexus URL's to Artifactory
* [7ab7145](https://github.com/hyperledger/fabric-chaincode-java/commit/7ab7145) Fix typos in README.md
* [67fdc40](https://github.com/hyperledger/fabric-chaincode-java/commit/67fdc40) [FABCJ-259](https://jira.hyperledger.org/browse/FABCJ-259) Pagination Fix
* [1609425](https://github.com/hyperledger/fabric-chaincode-java/commit/1609425) Update maintainers list
* [1a45e3d](https://github.com/hyperledger/fabric-chaincode-java/commit/1a45e3d) [FABCJ-95](https://jira.hyperledger.org/browse/FABCJ-95) Checkstyle


## v2.0.0-beta
Thu 12 Dec 12:45:44 GMT 2019

* [4a13009](https://github.com/hyperledger/fabric-chaincode-java/commit/4a13009) Add OWASP dependency checks to build
* [44c96d7](https://github.com/hyperledger/fabric-chaincode-java/commit/44c96d7) FABCJ-258 Add latest image tag in AZP pipeline
* [e1d53bf](https://github.com/hyperledger/fabric-chaincode-java/commit/e1d53bf) Remove -SNAPSHOT from package version variable
* [fedc2ef](https://github.com/hyperledger/fabric-chaincode-java/commit/fedc2ef) Improve integration test reliability
* [6fd5507](https://github.com/hyperledger/fabric-chaincode-java/commit/6fd5507) [FABCJ-257] Rationalize examples
* [5d3cd53](https://github.com/hyperledger/fabric-chaincode-java/commit/5d3cd53) [FABCJ-160] Char support
* [e32e404](https://github.com/hyperledger/fabric-chaincode-java/commit/e32e404) [FABCJ-183] Extra properties appear in JSON from Java Objects
* [7f3c4e3](https://github.com/hyperledger/fabric-chaincode-java/commit/7f3c4e3) [FAB-17138](https://jira.hyperledger.org/browse/FAB-17138) Publish docker images to nexus
* [b52d26a](https://github.com/hyperledger/fabric-chaincode-java/commit/b52d26a) [FAB-15634](https://jira.hyperledger.org/browse/FAB-15634) Annotations for Serializer
* [207bd94](https://github.com/hyperledger/fabric-chaincode-java/commit/207bd94) [FAB-17100](https://jira.hyperledger.org/browse/FAB-17100) Default Thread Pool not set correctly
* [f50a4ed](https://github.com/hyperledger/fabric-chaincode-java/commit/f50a4ed) [FAB-16712](https://jira.hyperledger.org/browse/FAB-16712) Disable stalebot
* [ee8a1f4](https://github.com/hyperledger/fabric-chaincode-java/commit/ee8a1f4) Update javadoc location in readme
* [3951dca](https://github.com/hyperledger/fabric-chaincode-java/commit/3951dca) Fix git user email/name config in azure pipeline
* [55ad1b9](https://github.com/hyperledger/fabric-chaincode-java/commit/55ad1b9) Update javadoc build to use Hyperledger Bot
* [4680efc](https://github.com/hyperledger/fabric-chaincode-java/commit/4680efc) Publish javadoc
* [d4981a3](https://github.com/hyperledger/fabric-chaincode-java/commit/d4981a3) Fix the name of the docker image
* [6553ffc](https://github.com/hyperledger/fabric-chaincode-java/commit/6553ffc) Update readme
* [3b029a8](https://github.com/hyperledger/fabric-chaincode-java/commit/3b029a8) Fix the name of the docker image
* [d01eeff](https://github.com/hyperledger/fabric-chaincode-java/commit/d01eeff) Add artifacts to build result
* [3c2c27c](https://github.com/hyperledger/fabric-chaincode-java/commit/3c2c27c) [FAB-16712](https://jira.hyperledger.org/browse/FAB-16712) Update contributing guide
* [d13e0c0](https://github.com/hyperledger/fabric-chaincode-java/commit/d13e0c0) Next steps in publishing
* [75a0bed](https://github.com/hyperledger/fabric-chaincode-java/commit/75a0bed) Next steps in publishing
* [fd2e21a](https://github.com/hyperledger/fabric-chaincode-java/commit/fd2e21a) Next steps in publishing
* [5618de6](https://github.com/hyperledger/fabric-chaincode-java/commit/5618de6) Push the snapshot docker images to nexus
* [5a11c6e](https://github.com/hyperledger/fabric-chaincode-java/commit/5a11c6e) Push the snapshot docker images to nexus
* [4eff463](https://github.com/hyperledger/fabric-chaincode-java/commit/4eff463) [FAB-16315](https://jira.hyperledger.org/browse/FAB-16315) Improved Load Ability
* [11a26ce](https://github.com/hyperledger/fabric-chaincode-java/commit/11a26ce) Fix Azure Pipelines
* [7b3e509](https://github.com/hyperledger/fabric-chaincode-java/commit/7b3e509) [FAB-16711](https://jira.hyperledger.org/browse/FAB-16711) Azure pipelines
* [a3304ec](https://github.com/hyperledger/fabric-chaincode-java/commit/a3304ec) [FAB-16707](https://jira.hyperledger.org/browse/FAB-16707) Remove Gradle warnings
* [af3dec0](https://github.com/hyperledger/fabric-chaincode-java/commit/af3dec0) [IN-68] Add default GitHub SECURITY policy
* [88b9397](https://github.com/hyperledger/fabric-chaincode-java/commit/88b9397) [FAB-16680](https://jira.hyperledger.org/browse/FAB-16680) Fix cloudflare error on jitpack.io
* [f6076eb](https://github.com/hyperledger/fabric-chaincode-java/commit/f6076eb) [FAB-16669](https://jira.hyperledger.org/browse/FAB-16669) WIP: Use native Java 11 ALPN support
* [5520053](https://github.com/hyperledger/fabric-chaincode-java/commit/5520053) [FAB-16669](https://jira.hyperledger.org/browse/FAB-16669) Update gRPC and Protocol Buffers code
* [abff28f](https://github.com/hyperledger/fabric-chaincode-java/commit/abff28f) [FAB-16655](https://jira.hyperledger.org/browse/FAB-16655) Warnings as errors for Java chaincode docs
* [50e75bf](https://github.com/hyperledger/fabric-chaincode-java/commit/50e75bf) [FAB-16655](https://jira.hyperledger.org/browse/FAB-16655) Warnings as errors for Java chaincode
* [d79f5a6](https://github.com/hyperledger/fabric-chaincode-java/commit/d79f5a6) [FAB-6415](https://jira.hyperledger.org/browse/FAB-6415) Remove tests from Docker image build
* [35d5884](https://github.com/hyperledger/fabric-chaincode-java/commit/35d5884) [FAB-6415](https://jira.hyperledger.org/browse/FAB-6415) Various chaincode deployment updates
* [12b5243](https://github.com/hyperledger/fabric-chaincode-java/commit/12b5243) [FAB-16493](https://jira.hyperledger.org/browse/FAB-16493) Fixed gradle build on windows
* [2f6be19](https://github.com/hyperledger/fabric-chaincode-java/commit/2f6be19) [FAB-6415](https://jira.hyperledger.org/browse/FAB-6415) Remove cglib dependency
* [56c533e](https://github.com/hyperledger/fabric-chaincode-java/commit/56c533e) [FAB-6415](https://jira.hyperledger.org/browse/FAB-6415) Upgrade Docker image to Java 11
* [5dbbea7](https://github.com/hyperledger/fabric-chaincode-java/commit/5dbbea7) [FAB-6415](https://jira.hyperledger.org/browse/FAB-6415) Replace org.reflections with classgraph
* [059d043](https://github.com/hyperledger/fabric-chaincode-java/commit/059d043) [FAB-6415](https://jira.hyperledger.org/browse/FAB-6415) Add javax.xml.bind dependency for Java 11
* [cbe663b](https://github.com/hyperledger/fabric-chaincode-java/commit/cbe663b) [FAB-6415](https://jira.hyperledger.org/browse/FAB-6415) Upgrade to Gradle 5.6.2 and Maven 3.6.2
* [887153c](https://github.com/hyperledger/fabric-chaincode-java/commit/887153c) [FAB-6415](https://jira.hyperledger.org/browse/FAB-6415) Add javax.annotation dependency for Java 11
* [66e9079](https://github.com/hyperledger/fabric-chaincode-java/commit/66e9079) [FAB-16489](https://jira.hyperledger.org/browse/FAB-16489) Add CODEOWNERS
* [182c050](https://github.com/hyperledger/fabric-chaincode-java/commit/182c050) [FAB-15507](https://jira.hyperledger.org/browse/FAB-15507) Add doc
* [1a38b84](https://github.com/hyperledger/fabric-chaincode-java/commit/1a38b84) [FABN-1320] Remove sed from git_tag.sh script
* [25ed6c1](https://github.com/hyperledger/fabric-chaincode-java/commit/25ed6c1) [FABN-1320] Fix git_tag.sh
* [f47f601](https://github.com/hyperledger/fabric-chaincode-java/commit/f47f601) [FAB-15929](https://jira.hyperledger.org/browse/FAB-15929) Add getPrivateDataHash support
* [4371d07](https://github.com/hyperledger/fabric-chaincode-java/commit/4371d07) [FAB-16217](https://jira.hyperledger.org/browse/FAB-16217) Do not load JSON Schema schema from network
* [44d76f4](https://github.com/hyperledger/fabric-chaincode-java/commit/44d76f4) [FAB-15895](https://jira.hyperledger.org/browse/FAB-15895) Added client identity to context
* [9169e14](https://github.com/hyperledger/fabric-chaincode-java/commit/9169e14) New maintainer application
* [12309b5](https://github.com/hyperledger/fabric-chaincode-java/commit/12309b5) [FAB-16091](https://jira.hyperledger.org/browse/FAB-16091) Handle invalid contract name
* [e8ca970](https://github.com/hyperledger/fabric-chaincode-java/commit/e8ca970) [FAB-15647](https://jira.hyperledger.org/browse/FAB-15647) Fix markup of README
* [360d75a](https://github.com/hyperledger/fabric-chaincode-java/commit/360d75a) [FAB-15883](https://jira.hyperledger.org/browse/FAB-15883) Removed swagger annotations
* [25c5be6](https://github.com/hyperledger/fabric-chaincode-java/commit/25c5be6) [FAB-15615](https://jira.hyperledger.org/browse/FAB-15615) Add ChaincodeException support
* [9077581](https://github.com/hyperledger/fabric-chaincode-java/commit/9077581) [FAB-15823](https://jira.hyperledger.org/browse/FAB-15823) Fix getStringPayload npe
* [e163d3f](https://github.com/hyperledger/fabric-chaincode-java/commit/e163d3f) [FAB-15743](https://jira.hyperledger.org/browse/FAB-15743) Align Context
* [5ad6ed8](https://github.com/hyperledger/fabric-chaincode-java/commit/5ad6ed8) [FAB-15507](https://jira.hyperledger.org/browse/FAB-15507) Exclude unnecessary contract javadoc
* [9cc6553](https://github.com/hyperledger/fabric-chaincode-java/commit/9cc6553) [FAB-15720](https://jira.hyperledger.org/browse/FAB-15720) prevent duplicate transactions
* [f87de8e](https://github.com/hyperledger/fabric-chaincode-java/commit/f87de8e) [FAB-15632](https://jira.hyperledger.org/browse/FAB-15632) Add name element to transaction annotation
* [d726175](https://github.com/hyperledger/fabric-chaincode-java/commit/d726175) [FAB-13803](https://jira.hyperledger.org/browse/FAB-13803) Parameter Marshalling
* [72dc716](https://github.com/hyperledger/fabric-chaincode-java/commit/72dc716) [FAB-15214](https://jira.hyperledger.org/browse/FAB-15214) Remove init annotation
* [509bfbf](https://github.com/hyperledger/fabric-chaincode-java/commit/509bfbf) [FAB-13802](https://jira.hyperledger.org/browse/FAB-13802) Metadata Support
* [0467032](https://github.com/hyperledger/fabric-chaincode-java/commit/0467032) Application to be consider for maintainer of this repo
* [526f36d](https://github.com/hyperledger/fabric-chaincode-java/commit/526f36d) [FAB-13802](https://jira.hyperledger.org/browse/FAB-13802) Return types update
* [1662390](https://github.com/hyperledger/fabric-chaincode-java/commit/1662390) [FAB-13912](https://jira.hyperledger.org/browse/FAB-13912) Implement new interfaces
* [bd1c269](https://github.com/hyperledger/fabric-chaincode-java/commit/bd1c269) [FAB-14961](https://jira.hyperledger.org/browse/FAB-14961) Update to the FAQ
* [dc02c3b](https://github.com/hyperledger/fabric-chaincode-java/commit/dc02c3b) [FAB-14995](https://jira.hyperledger.org/browse/FAB-14995) Prepare for next release 

## v2.0.0-alpha
Sun Apr  9 15:37:09 IDT 2019

* [b62740c](https://github.com/hyperledger/fabric-chaincode-java/commit/b62740c) [FAB-13798](https://jira.hyperledger.org/browse/FAB-13798) New interfaces
* [8235149](https://github.com/hyperledger/fabric-chaincode-java/commit/8235149) [FAB-13795](https://jira.hyperledger.org/browse/FAB-13795) Contract definition
* [762a955](https://github.com/hyperledger/fabric-chaincode-java/commit/762a955) [FAB-13800](https://jira.hyperledger.org/browse/FAB-13800) Transaction Context
* [351acb5](https://github.com/hyperledger/fabric-chaincode-java/commit/351acb5) [FAB-13794](https://jira.hyperledger.org/browse/FAB-13794) New Annotations
* [3e13a57](https://github.com/hyperledger/fabric-chaincode-java/commit/3e13a57) [FAB-12960](https://jira.hyperledger.org/browse/FAB-12960) Adding cc without main method
* [40bf2c1](https://github.com/hyperledger/fabric-chaincode-java/commit/40bf2c1) [FAB-14533](https://jira.hyperledger.org/browse/FAB-14533) Updating integration tests
* [b17d8a2](https://github.com/hyperledger/fabric-chaincode-java/commit/b17d8a2) [FAB-12504](https://jira.hyperledger.org/browse/FAB-12504) Added maven integration test.
* [0e76b72](https://github.com/hyperledger/fabric-chaincode-java/commit/0e76b72) [FAB-14522](https://jira.hyperledger.org/browse/FAB-14522) README update: sdk compatibility
* [e5d3e40](https://github.com/hyperledger/fabric-chaincode-java/commit/e5d3e40) [FAB-14460](https://jira.hyperledger.org/browse/FAB-14460) Better chaincode source check
* [0adaf35](https://github.com/hyperledger/fabric-chaincode-java/commit/0adaf35) [FAB-13490](https://jira.hyperledger.org/browse/FAB-13490) javaenv image based on openjdk:slim-8
* [e33b4bd](https://github.com/hyperledger/fabric-chaincode-java/commit/e33b4bd) [FAB-13672](https://jira.hyperledger.org/browse/FAB-13672) stop using deprecated left closure
* [c3e342a](https://github.com/hyperledger/fabric-chaincode-java/commit/c3e342a) [FAB-13097](https://jira.hyperledger.org/browse/FAB-13097) Getting correct jar
* [cc76d2f](https://github.com/hyperledger/fabric-chaincode-java/commit/cc76d2f) [FAB-13097](https://jira.hyperledger.org/browse/FAB-13097) Adding shim 1.3.0 to docker image
* [b22858b](https://github.com/hyperledger/fabric-chaincode-java/commit/b22858b) Configure Stale ProBot
* [1279d2c](https://github.com/hyperledger/fabric-chaincode-java/commit/1279d2c) [FAB-13436](https://jira.hyperledger.org/browse/FAB-13436) multistage docker build
* [035a7d2](https://github.com/hyperledger/fabric-chaincode-java/commit/035a7d2) [FAB-13243](https://jira.hyperledger.org/browse/FAB-13243) fix javaenv docker build tag
* [ad89bbb](https://github.com/hyperledger/fabric-chaincode-java/commit/ad89bbb) [FAB-13248](https://jira.hyperledger.org/browse/FAB-13248) Update dependencies for sonatype
* [cea4db0](https://github.com/hyperledger/fabric-chaincode-java/commit/cea4db0) [FAB-13229](https://jira.hyperledger.org/browse/FAB-13229) Prepare for next release (2.0.0 on master)
* [4c6cd6c](https://github.com/hyperledger/fabric-chaincode-java/commit/4c6cd6c) [FAB-13236](https://jira.hyperledger.org/browse/FAB-13236) Publish jars to sonatype

## v1.4.0-rc1
Sun Apr  7 15:37:00 IDT 2019

* [2d26e5d](https://github.com/hyperledger/fabric-chaincode-java/commit/2d26e5d) [FAB-13117](https://jira.hyperledger.org/browse/FAB-13117) Release java chaincode 1.4.0-rc1
* [3628832](https://github.com/hyperledger/fabric-chaincode-java/commit/3628832) [FAB-13194](https://jira.hyperledger.org/browse/FAB-13194) Script to publish javaenv multiarch image
* [455100c](https://github.com/hyperledger/fabric-chaincode-java/commit/455100c) [FAB-12426](https://jira.hyperledger.org/browse/FAB-12426) Fix java chaincode return status.
* [ea26118](https://github.com/hyperledger/fabric-chaincode-java/commit/ea26118) [FAB-12197](https://jira.hyperledger.org/browse/FAB-12197) Integration tests
* [3b61085](https://github.com/hyperledger/fabric-chaincode-java/commit/3b61085) [FAB-12110](https://jira.hyperledger.org/browse/FAB-12110) SimpleAsset java chaincode example
* [b46fc70](https://github.com/hyperledger/fabric-chaincode-java/commit/b46fc70) [FAB-12328](https://jira.hyperledger.org/browse/FAB-12328) java cc pagination
* [68685dc](https://github.com/hyperledger/fabric-chaincode-java/commit/68685dc) [FAB-12469](https://jira.hyperledger.org/browse/FAB-12469) Java sbe tests
* [748ea9f](https://github.com/hyperledger/fabric-chaincode-java/commit/748ea9f) [FAB-12468](https://jira.hyperledger.org/browse/FAB-12468) Utility classes for java sbe
* [b4b3a87](https://github.com/hyperledger/fabric-chaincode-java/commit/b4b3a87) [FAB-12467](https://jira.hyperledger.org/browse/FAB-12467) State-based endorsement
* [c32c4c4](https://github.com/hyperledger/fabric-chaincode-java/commit/c32c4c4) [FAB-12568](https://jira.hyperledger.org/browse/FAB-12568) Adding identities to JavaCC
* [fb81132](https://github.com/hyperledger/fabric-chaincode-java/commit/fb81132) Fix LFID for gennadyl
* [7522309](https://github.com/hyperledger/fabric-chaincode-java/commit/7522309) Retire dormant maintainers, suggest new nomination
* [321db66](https://github.com/hyperledger/fabric-chaincode-java/commit/321db66) [FAB-12444](https://jira.hyperledger.org/browse/FAB-12444) Update java cc to baseimage 0.4.14
* [aa177d2](https://github.com/hyperledger/fabric-chaincode-java/commit/aa177d2) [FAB-12347](https://jira.hyperledger.org/browse/FAB-12347) Update java cc to baseimage 0.4.13
* [e9c5602](https://github.com/hyperledger/fabric-chaincode-java/commit/e9c5602) [FAB-12223](https://jira.hyperledger.org/browse/FAB-12223) Adding FAQ file
* [af01201](https://github.com/hyperledger/fabric-chaincode-java/commit/af01201) [FAB-12278](https://jira.hyperledger.org/browse/FAB-12278) Fixing java cc build script
* [52cc6bd](https://github.com/hyperledger/fabric-chaincode-java/commit/52cc6bd) [FAB-12157](https://jira.hyperledger.org/browse/FAB-12157) Hadling chaincode in default package
* [8dcd819](https://github.com/hyperledger/fabric-chaincode-java/commit/8dcd819) [FAB-12152](https://jira.hyperledger.org/browse/FAB-12152) Prepare for next release (1.4.0 on master)
* [cc91af5](https://github.com/hyperledger/fabric-chaincode-java/commit/cc91af5) [FAB-12152](https://jira.hyperledger.org/browse/FAB-12152) Prepare for next release (1.3.0 on master)
* [9cbb36c](https://github.com/hyperledger/fabric-chaincode-java/commit/9cbb36c) [FAB-10525](https://jira.hyperledger.org/browse/FAB-10525) Fix the bug getStateByPartialCompositeKey

## v1.3.0-rc1
Tue Sep 25 15:25:05 EDT 2018

* [224bc4d](https://github.com/hyperledger/fabric-chaincode-java/commit/224bc4d) [FAB-12160](https://jira.hyperledger.org/browse/FAB-12160) Release fabric-chaincode-java v1.3.0-rc1
* [333d91b](https://github.com/hyperledger/fabric-chaincode-java/commit/333d91b) [FAB-12129](https://jira.hyperledger.org/browse/FAB-12129) Update baseimage version
* [01dd207](https://github.com/hyperledger/fabric-chaincode-java/commit/01dd207) [FAB-12115](https://jira.hyperledger.org/browse/FAB-12115) Fix groupId in shim jars
* [5d7ed1c](https://github.com/hyperledger/fabric-chaincode-java/commit/5d7ed1c) [FAB-9519](https://jira.hyperledger.org/browse/FAB-9519) Java shim readmy and tutorial
* [44a1367](https://github.com/hyperledger/fabric-chaincode-java/commit/44a1367) [FAB-12017](https://jira.hyperledger.org/browse/FAB-12017) Adding java docs
* [56e2a11](https://github.com/hyperledger/fabric-chaincode-java/commit/56e2a11) [FAB-11839](https://jira.hyperledger.org/browse/FAB-11839) Adding FVT tests
* [ac70a6f](https://github.com/hyperledger/fabric-chaincode-java/commit/ac70a6f) [FAB-10032](https://jira.hyperledger.org/browse/FAB-10032) Adding unit test
* [ac6c906](https://github.com/hyperledger/fabric-chaincode-java/commit/ac6c906) [FAB-11750](https://jira.hyperledger.org/browse/FAB-11750) Updating version to 1.3.0
* [e80ba7c](https://github.com/hyperledger/fabric-chaincode-java/commit/e80ba7c) [FAB-11288](https://jira.hyperledger.org/browse/FAB-11288) Adding private data functions
* [79497bc](https://github.com/hyperledger/fabric-chaincode-java/commit/79497bc) [FAB-11741](https://jira.hyperledger.org/browse/FAB-11741) Reformat code
* [71ca2a2](https://github.com/hyperledger/fabric-chaincode-java/commit/71ca2a2) [FAB-11664](https://jira.hyperledger.org/browse/FAB-11664) Enable separate docker build
* [52f2c8b](https://github.com/hyperledger/fabric-chaincode-java/commit/52f2c8b) [FAB-11485](https://jira.hyperledger.org/browse/FAB-11485) Fixing empty proposal handling
* [2b35a46](https://github.com/hyperledger/fabric-chaincode-java/commit/2b35a46) [FAB-11304](https://jira.hyperledger.org/browse/FAB-11304) Handling READY message from peer
* [4b27549](https://github.com/hyperledger/fabric-chaincode-java/commit/4b27549) [FAB-9380](https://jira.hyperledger.org/browse/FAB-9380) remove FSM from java chaincode shim
* [f5e6fb4](https://github.com/hyperledger/fabric-chaincode-java/commit/f5e6fb4) [FAB-9920](https://jira.hyperledger.org/browse/FAB-9920) Java shim mutual TLS
* [d295c96](https://github.com/hyperledger/fabric-chaincode-java/commit/d295c96) [FAB-9424](https://jira.hyperledger.org/browse/FAB-9424) Adding docker build support
* [1cb0493](https://github.com/hyperledger/fabric-chaincode-java/commit/1cb0493) [FAB-10845](https://jira.hyperledger.org/browse/FAB-10845) Remove protos files
* [6c8abf4](https://github.com/hyperledger/fabric-chaincode-java/commit/6c8abf4) [FAB-9416](https://jira.hyperledger.org/browse/FAB-9416): Add gradle task to update protos
* [e3be99e](https://github.com/hyperledger/fabric-chaincode-java/commit/e3be99e) [FAB-9407](https://jira.hyperledger.org/browse/FAB-9407): Extract JavaCC shim protos
* [e4c9867](https://github.com/hyperledger/fabric-chaincode-java/commit/e4c9867) [FAB-9359](https://jira.hyperledger.org/browse/FAB-9359) add CODE_OF_CONDUCT.md and other docs
* [8772201](https://github.com/hyperledger/fabric-chaincode-java/commit/8772201) [FAB-9063](https://jira.hyperledger.org/browse/FAB-9063) Provide link to Fabric committers
* [4a9406b](https://github.com/hyperledger/fabric-chaincode-java/commit/4a9406b) Add Maintainers to fabric-chaincode-java
* [091a081](https://github.com/hyperledger/fabric-chaincode-java/commit/091a081) [FAB-8986](https://jira.hyperledger.org/browse/FAB-8986): Harden gradle build configuration
* [bb958eb](https://github.com/hyperledger/fabric-chaincode-java/commit/bb958eb) [FAB-8346](https://jira.hyperledger.org/browse/FAB-8346) sync chaincode proto files w/ fabric
* [c399853](https://github.com/hyperledger/fabric-chaincode-java/commit/c399853) [FAB-7989](https://jira.hyperledger.org/browse/FAB-7989) --peerAddress should be --peer.address
* [308eb63](https://github.com/hyperledger/fabric-chaincode-java/commit/308eb63) [FAB-7626](https://jira.hyperledger.org/browse/FAB-7626) Move to Gradle 4.4.1
* [d73edd6](https://github.com/hyperledger/fabric-chaincode-java/commit/d73edd6) [FAB-7294](https://jira.hyperledger.org/browse/FAB-7294) enable shim jar publication
* [d9c463e](https://github.com/hyperledger/fabric-chaincode-java/commit/d9c463e) [FAB-7091](https://jira.hyperledger.org/browse/FAB-7091) Extract StreamObserver out of ChaincodeBase
* [e3644f4](https://github.com/hyperledger/fabric-chaincode-java/commit/e3644f4) [FAB-6889](https://jira.hyperledger.org/browse/FAB-6889) add channel ID to chaincode message
* [2eda08b](https://github.com/hyperledger/fabric-chaincode-java/commit/2eda08b) [FAB-6726](https://jira.hyperledger.org/browse/FAB-6726) move to gradle 4.2.1
* [5cf4f73](https://github.com/hyperledger/fabric-chaincode-java/commit/5cf4f73) [FAB-3650](https://jira.hyperledger.org/browse/FAB-3650) add getBinding() API
* [a3b7d71](https://github.com/hyperledger/fabric-chaincode-java/commit/a3b7d71) [FAB-3649](https://jira.hyperledger.org/browse/FAB-3649) add getTransient() API
* [3cb86b0](https://github.com/hyperledger/fabric-chaincode-java/commit/3cb86b0) [FAB-3648](https://jira.hyperledger.org/browse/FAB-3648) add getCreator() API
* [5982e40](https://github.com/hyperledger/fabric-chaincode-java/commit/5982e40) [FAB-3653](https://jira.hyperledger.org/browse/FAB-3653) add getTxTimestamp() API
* [5566a62](https://github.com/hyperledger/fabric-chaincode-java/commit/5566a62) [FAB-6681](https://jira.hyperledger.org/browse/FAB-6681) Add code coverage report and verification
* [64de43a](https://github.com/hyperledger/fabric-chaincode-java/commit/64de43a) [FAB-6637](https://jira.hyperledger.org/browse/FAB-6637) add license check to fabric-chaincode-java
* [9f2f4f9](https://github.com/hyperledger/fabric-chaincode-java/commit/9f2f4f9) [FAB-3470](https://jira.hyperledger.org/browse/FAB-3470) update composite key format
* [61b8fc2](https://github.com/hyperledger/fabric-chaincode-java/commit/61b8fc2) [FAB-3651](https://jira.hyperledger.org/browse/FAB-3651) add getSignedProposal() API
* [8c2352a](https://github.com/hyperledger/fabric-chaincode-java/commit/8c2352a) [FAB-6494](https://jira.hyperledger.org/browse/FAB-6494) Add unit tests for ChaincodeStubImpl
* [b58bcc2](https://github.com/hyperledger/fabric-chaincode-java/commit/b58bcc2) Update Jim's RC ID in MAINTAINERS.rst
* [02520ac](https://github.com/hyperledger/fabric-chaincode-java/commit/02520ac) Initial MAINTAINERS file
* [915824f](https://github.com/hyperledger/fabric-chaincode-java/commit/915824f) [FAB-6435](https://jira.hyperledger.org/browse/FAB-6435) Copy Java shim from fabric repository
* [067b712](https://github.com/hyperledger/fabric-chaincode-java/commit/067b712) [FAB-5928](https://jira.hyperledger.org/browse/FAB-5928) Initial gradle build script





================================================
FILE: CODEOWNERS
================================================
# SPDX-License-Identifier: Apache-2.0

# Fabric Chaincode Java Maintainers
*	@hyperledger/fabric-chaincode-java-maintainers


================================================
FILE: CODE_OF_CONDUCT.md
================================================
Code of Conduct Guidelines
==========================

Please review the Hyperledger [Code of
Conduct](https://wiki.hyperledger.org/community/hyperledger-project-code-of-conduct)
before participating. It is important that we keep things civil.

<a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/88x31.png" /></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>.


================================================
FILE: COMPATIBILITY.md
================================================
# Support and Compatibility

Github is used for code base management and issue tracking.

## Summary of Compatibility

This table shows the summary of the compatibility of the Java chaincode libraries, together with the JVM version they require.

| Java chaincode version | Minimum supported Java | Java runtime | Docker image platforms |
|------------------------|------------------------|--------------|------------------------|
| v1.4                   | 8                      | 8            | amd64                  |
| v2.2                   | 11                     | 11           | amd64                  |
| v2.5.0 - v2.5.4        | 11                     | 11           | amd64, arm64           |
| v2.5.5 - v2.5.7        | 11                     | 21           | amd64, arm64           |
| v2.5.8+                | 11                     | 25           | amd64, arm64           |

The Java runtime provided by the chaincode Docker image determines the maximum Java version (and features) that smart contract code can exploit when using the default Java chaincode container.

Subject to a suitable runtime environment, the Java chaincode libraries can be used to communicate with Fabric peers at different LTS versions. The level of functionality is determined by the Fabric version in use and channel capabilities.

All Docker images, chaincode libraries and tools are tested using amd64 (x86-64) only.

## Chaincode builder

The default Fabric chaincode builder creates a Docker container to run deployed smart contracts. Java chaincode Docker containers are built using the `hyperledger/fabric-javaenv` Docker image, tagged with the same major and minor version as the Fabric peer version. For example, Fabric v2.5 creates Java chaincode containers using the `hyperledger/fabric-javaenv:2.5` Docker image. Fabric v3 continues to use the v2.5 Java chaincode image.

A different chaincode Docker image can be specified using the `CORE_CHAINCODE_JAVA_RUNTIME` environment variable on the Fabric peer. For example, `CORE_CHAINCODE_JAVA_RUNTIME=example/customJavaRuntime:latest`.

With Fabric v2 and later, an alternative chaincode builder can be configured on the Fabric peer. In this case the configured chaincode builder controls how chaincode is launched. See the [Fabric documentation](https://hyperledger-fabric.readthedocs.io/en/release-2.5/cc_launcher.html) for further details.

## Chaincode packaging

When using the `hyperledger/fabric-javaenv` Java chaincode Docker images, deployed chaincode is built as follows:

- If both Gradle and Maven files are present, Gradle is used.
- Gradle build files can be either Groovy or Kotlin.
- If Gradle or Maven wrappers are present, they will be used instead of the preinstalled Gradle or Maven versions.

Remember that when using the wrappers, code will be downloaded from the Internet. Keep this in mind for any installation with limited network access.

Alternatively, it is recommended to package prebuilt JAR files, including the smart contract and all dependencies. In this case, no Internet access is required when deploying Java chaincode.


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to fabric-chaincode-java

We welcome contributions to the [Hyperledger Fabric](https://hyperledger-fabric.readthedocs.io) Project. There's always plenty to do!

If you have any questions about the project or how to contribute, you can find us in the [fabric-contracts-api](https://discordapp.com/channels/905194001349627914/943090527920877598) channel on [Discord](https://discord.lfdecentralizedtrust.org/).

Here are a few guidelines to help you contribute successfully...

## Issues

All issues are tracked in the issues tab in GitHub. If you find a bug which we don't already know about, you can help us by creating a new issue describing the problem. Please include as much detail as possible to help us track down the cause.If you want to begin contributing code, looking through our open issues is a good way to start. Try looking for recent issues with detailed descriptions first, or ask us on Discord if you're unsure which issue to choose.

## Enhancements

Make sure you have the support of the Hyperledger Fabric community before investing a lot of effort in project enhancements. Please look up the [Fabric RFC](https://github.com/hyperledger/fabric-rfcs) process for large changes.

## Pull Requests

We use our own forks and [Github Flow](https://docs.github.com/en/get-started/using-github/github-flow) to deliver changes to the code. Follow these steps to deliver your first pull request:

1. [Fork the repository](https://docs.github.com/en/get-started/exploring-projects-on-github/contributing-to-a-project) and create a new branch from `main`.
2. If you've added code that should be tested, add tests!
3. If you've added any new features or made breaking changes, update the documentation.
4. Ensure all the tests pass.
5. Include the JIRA issue number, a descriptive message, and the [Developer Certificate of Origin (DCO) sign-off](https://github.com/dcoapp/app#how-it-works) on all commit messages.
6. [Issue a pull request](https://docs.github.com/en/get-started/exploring-projects-on-github/contributing-to-a-project#making-a-pull-request)!
7. [GitHub Actions](https://github.com/hyperledger/fabric-chaincode-java/actions) builds must succeed before the pull request can be reviewed and merged.

## Coding Style

Please to try to be consistent with the rest of the code and conform to checkstyle rules where they are provided. [Spotless](https://github.com/diffplug/spotless) is used to enforce code formatting. You can run `./gradlew spotlessApply` to apply the mandated code formatting to the codebase before submitting changes to avoid failing the build with formatting violations.

## Code of Conduct Guidelines <a name="conduct"></a>

See our [Code of Conduct Guidelines](../blob/main/CODE_OF_CONDUCT.md).

## Maintainers <a name="maintainers"></a>

Should you have any questions or concerns, please reach out to one of the project's [Maintainers](../blob/main/MAINTAINERS.md).


## How to work with the Codebase

Some useful gradle commands to help with building.  You can add or remove the `--no-daemon` as you wish; depending on the performance of you local machine.

```shell
# build everything
./gradlew --no-daemon build

# clean up to force tests and compile to rerun
./gradlew clean cleanTest
./gradlew --no-daemon :fabric-chaincode-shim:build

# build docker image
./gradlew :fabric-chaincode-docker:buildImage
```

You can also scan for vulnerabilities in dependencies (requires [Make](https://www.gnu.org/software/make/) and [Go](https://go.dev/) to be installed):
```shell
make scan
```

## Hyperledger Fabric

See the
[Hyperledger Fabric contributors guide](http://hyperledger-fabric.readthedocs.io/en/latest/CONTRIBUTING.html) for more details, including other Hyperledger Fabric projects you may wish to contribute to.

---

[![Creative Commons License](https://i.creativecommons.org/l/by/4.0/88x31.png)](http://creativecommons.org/licenses/by/4.0/)  
This work is licensed under a [Creative Commons Attribution 4.0 International License](http://creativecommons.org/licenses/by/4.0/)


================================================
FILE: LICENSE
================================================
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "{}"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright {yyyy} {name of copyright owner}

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.



================================================
FILE: MAINTAINERS.md
================================================
# Maintainers

| Name         | GitHub                                                | Chat            | email                      |
| ------------ | ----------------------------------------------------- | --------------- | -------------------------- |
| Dave Enyeart | [denyeart](https://github.com/denyeart)               | denyeart        | <enyeart@us.ibm.com>       |
| Mark Lewis   | [bestbeforetoday](https://github.com/bestbeforetoday) | bestbeforetoday | <Mark.S.Lewis@outlook.com> |

# Retired Maintainers

| Name                    | GitHub                                                  | Chat          | email                                 |
| ----------------------- | ------------------------------------------------------- | ------------- | ------------------------------------- |
| Artem Barger            | [c0rwin](https://github.com/c0rwin)                     | c0rwin        | <bartem@il.ibm.com>                   |
| Matthew B White         | [mbwhite](https://github.com/mbwhite)                   | mbwhite       | <whitemat@uk.ibm.com>                 |
| James Taylor            | [jt-nti](https://github.com/jt-nti)                     | jtonline      | <jamest@uk.ibm.com>                   |
| Gari Singh              | [mastersingh24](https://github.com/mastersingh24)       | mastersingh24 | <gari.r.singh@gmail.com>              |
| Gennady Laventman       | [gennadylaventman](https://github.com/gennadylaventman) | gennadyl      | <gennady@il.ibm.com>                  |
| Jim Zhang               | [jimthematrix](https://github.com/jimthematrix)         | jimthematrix  | <jim\_the\_matrix@hotmail.com>        |
| Luis Sanchez            | [sanchezl](https://github.com/sanchezl)                 | sanchezl      | <sanchezl@us.ibm.com>                 |
| Srinivasan Muralidharan | [muralisrini](https://github.com/muralisrini)           | muralisr      | <srinivasan.muralidharan99@gmail.com> |
| Yacov Manevich          | [yacovm](https://github.com/yacovm)                     | yacovm        | <yacovm@il.ibm.com>                   |

Also: Please see the [Release Manager section](https://github.com/hyperledger/fabric/blob/main/MAINTAINERS.md)

<a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/88x31.png" /></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>.


================================================
FILE: Makefile
================================================
#
# SPDX-License-Identifier: Apache-2.0
#

bin_dir := bin
osv-scanner := $(bin_dir)/osv-scanner

kernel_name := $(shell uname -s | tr '[:upper:]' '[:lower:]')
machine_hardware := $(shell uname -m)
ifeq ($(machine_hardware), x86_64)
	machine_hardware := amd64
endif
ifeq ($(machine_hardware), aarch64)
	machine_hardware := arm64
endif

.PHONY: scan
scan: $(osv-scanner)
	rm -f fabric-chaincode-shim/gradle.lockfile
	./gradlew --quiet :fabric-chaincode-shim:dependencies --write-locks --configuration runtimeClasspath
	bin/osv-scanner scan --lockfile=fabric-chaincode-shim/gradle.lockfile

.PHONY: scan-all
scan-all: $(osv-scanner)
	rm -f fabric-chaincode-shim/gradle.lockfile
	./gradlew --quiet :fabric-chaincode-shim:dependencies --write-locks
	bin/osv-scanner scan --lockfile=fabric-chaincode-shim/gradle.lockfile


.PHONY: install-osv-scanner
install-osv-scanner:
	mkdir -p '$(bin_dir)'
	curl --fail --location --show-error --silent --output '$(osv-scanner)' \
    		'https://github.com/google/osv-scanner/releases/latest/download/osv-scanner_$(kernel_name)_$(machine_hardware)'
	chmod u+x '$(osv-scanner)'

$(osv-scanner):
	$(MAKE) install-osv-scanner


================================================
FILE: README.md
================================================
# Hyperledger Fabric Chaincode Java

[![Build Status](https://dev.azure.com/Hyperledger/Fabric-Chaincode-Java/_apis/build/status/Fabric-Chaincode-Java?branchName=main)](https://dev.azure.com/Hyperledger/Fabric-Chaincode-Java/_build/latest?definitionId=39&branchName=main)
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/org.hyperledger.fabric-chaincode-java/fabric-chaincode-shim/badge.svg)](https://maven-badges.herokuapp.com/maven-central/org.hyperledger.fabric-chaincode-java/fabric-chaincode-shim)
[![Discord](https://img.shields.io/discord/905194001349627914?label=discord)](https://discordapp.com/channels/905194001349627914/943090527920877598)

This is a Java based implementation of Hyperledger Fabric chaincode shim APIs, which enables development of smart contracts using the Java language.

This project creates `fabric-chaincode-shim` jar
files for developers' consumption and the `hyperledger/fabric-javaenv` docker image
to run Java chaincode.

## Getting Started

Application developers interested in developing Java smart contracts for Hyperledger Fabric should read the [JavaDoc](https://hyperledger.github.io/fabric-chaincode-java/) which includes download information, and links to documentation and samples.

## Project structure

### fabric-chaincode-shim

Contains the java shim classes that define Java chaincode API and way to communicate with Fabric peers.

### fabric-chaincode-docker

Contains instructions to build the `hyperledger/fabric-javaenv` docker image.

### fabric-chaincode-integration-test

Contains higher level tests for Java chaincode.

> **Note:** in the future these should be replaced with a separate suite of [Cucumber](https://cucumber.io) tests which run against all chaincode implementations.

### examples

The following technical examples are in this repository. Please see the tutorials in the [documentation](https://hyperledger-fabric.readthedocs.io/en/latest/tutorials.html)


- **fabric-contract-example-gradle**  -  Contains an example Java contract built using gradle
- **fabric-contract-example-maven**  -  Contains an example Java contract built using maven
- **fabric-contract-example-gradle-kotlin**  -  Contains an example Kotlin contract build using gradle (Kotlin gradle files)
- **fabric-chaincode-example-sacc**  -  Contains an example java chaincode gradle project that includes sample chaincode and basic gradle build instructions.
- **fabric-chaincode-example-sbe**  -  Contains an example java chaincode gradle project that includes state based endorsement

## 'dev' main branch builds

These 'dev' drivers are built from the main branch only, and have a version format including the date for example `2.3.1.dev.20210303`.
They are published to Artifactory. These can be accessed via the repository at
```
    maven {
        url "https://hyperledger.jfrog.io/hyperledger/fabric-maven"
    }
```

They can be accessed in a build file like this

```
dependencies {
    compile group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '2.3.1.dev.+'
 }
```


## Building and testing

Make sure you have the following prereqs installed:

- [Docker](https://www.docker.com/get-docker)
- [Docker Compose](https://docs.docker.com/compose/install/)
- [JDK 11](https://adoptium.net/)

> **Note:** Java can be installed using [sdkman](https://sdkman.io/).

Clone the repository if you haven't already.

```
git clone https://github.com/hyperledger/fabric-chaincode-java.git
```

Build java shim jars (proto and shim jars) and install them to local maven repository.

```
cd fabric-chaincode-java
./gradlew clean build install
```

> **Note:** `./gradlew clean build classes` can be used instead to reduce the binaries that are built. This should be sufficient for using the local repository.

Build javaenv docker image, to have it locally.

```
./gradlew buildImage
```

## Compatibility

For details on what Java runtime and versions of Hyperledger Fabric can be used please see the [compatibility document](COMPATIBILITY.md).

---

[![Creative Commons License](https://i.creativecommons.org/l/by/4.0/88x31.png)](http://creativecommons.org/licenses/by/4.0/)  
This work is licensed under a [Creative Commons Attribution 4.0 International License](http://creativecommons.org/licenses/by/4.0/)


================================================
FILE: RELEASING.md
================================================
# Releasing

The following artifacts are created as a result of releasing Fabric Chaincode Java:

- `fabric-javaenv` Docker images:
  - [Docker Hub](https://hub.docker.com/r/hyperledger/fabric-javaenv)
  - [GitHub Packages](https://github.com/orgs/hyperledger/packages/container/package/fabric-javaenv)
- `fabric-chaincode-shim` Java libraries:
  - [Maven Central](https://central.sonatype.com/artifact/org.hyperledger.fabric-chaincode-java/fabric-chaincode-shim)
  - [GitHub Packages](https://github.com/hyperledger/fabric-chaincode-java/packages/50049)

## Before releasing

The following tasks are required before releasing:

- Ensure the version number in `build.gradle` is the required release version.
- Check the last branch build passed since exactly this repository state will be released.

## Create release

Creating a GitHub release on the [releases page](https://github.com/hyperledger/fabric-chaincode-java/releases) will trigger the build to publish the new release.

When drafting the release, create a new tag for the new version (with a `v` prefix). For example: `v2.1.4`

See previous releases for examples of the title and description.

## After releasing

- Update the version number in `build.gradle` to the next version.
- Update image version numbers in `fabric-chaincode-docker/build.gradle` to match the next version.
- Update the `fabric-chaincode-shim` dependency version in all `build.gradle` and `pom.xml` files within `fabric-chaincode-integration-test/src/contracts` to match the next version.
- Update the `fabric-chaincode-shim` dependency version in all `build.gradle`, `build.gradle.kts` and `pom.xml` files within `examples` to match the last _released_ version.
- Check that `COMPATIBILITY.md` is correct and update if required.


================================================
FILE: SECURITY.md
================================================
# Hyperledger Security Policy

## Reporting a Security Bug

If you think you have discovered a security issue in any of the Hyperledger projects, we'd love to hear from you. We will take all security bugs seriously and if confirmed upon investigation we will patch it within a reasonable amount of time and release a public security bulletin discussing the impact and credit the discoverer.

There are two ways to report a security bug. The easiest is to email a description of the flaw and any related information (e.g. reproduction steps, version) to [security at hyperledger dot org](mailto:security@hyperledger.org).

The other way is to file a confidential security bug in our [JIRA bug tracking system](https://jira.hyperledger.org). Be sure to set the “Security Level” to “Security issue”.

The process by which the Hyperledger Security Team handles security bugs is documented further in our [Defect Response page](https://wiki.hyperledger.org/display/SEC/Defect+Response) on our [wiki](https://wiki.hyperledger.org).



================================================
FILE: build.gradle
================================================
/*
 * Copyright IBM Corp. 2018 All Rights Reserved.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

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.4.4"
    id "com.gradleup.nmcp" version "1.4.4" apply false
}

version = '2.5.9'

// If the nightly property is set, then this is the scheduled main
// build - and we should publish this to artifactory
//
// Use the .dev.<number> format to match Maven convention
if (properties.containsKey('NIGHTLY')) {
    version = version + '.dev.' + getDate()
    ext.nightly = true   // set property for use in subprojects
} else {
    ext.nightly = false
}

nmcpAggregation {
    centralPortal {
        username = findProperty('mavenCentralUsername')
        password = findProperty('mavenCentralPassword')
        publishingType = "AUTOMATIC"
    }
}

dependencies {
    nmcpAggregation(project(':fabric-chaincode-shim'))
}

allprojects {
    apply plugin: "com.diffplug.spotless"

    repositories {
        mavenCentral()
    }

    spotless {
        format 'misc', {
            target '*.gradle', '.gitattributes', '.gitignore'
            trimTrailingWhitespace()
            leadingTabsToSpaces()
            endWithNewline()
        }
    }
}

subprojects {
    apply plugin: 'java'
    apply plugin: "maven-publish"

    group = 'org.hyperledger.fabric-chaincode-java'
    version = rootProject.version

    compileJava {
        options.release = 11
        options.compilerArgs += ['-Werror', '-Xlint:all']
    }

    dependencies {
        implementation 'commons-cli:commons-cli:1.11.0'
        implementation 'commons-logging:commons-logging:1.3.6'

        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 'org.hamcrest:hamcrest-library:3.0'
    }

    test {
        useJUnitPlatform()
    }

    spotless {
        java {
            removeUnusedImports()
            palantirJavaFormat().formatJavadoc(true)
            formatAnnotations()
        }
    }
}

// Get the date in the reverse format for sorting
static def getDate() {
    def date = new Date()
    def formattedDate = date.format('yyyyMMdd')
    return formattedDate
}


================================================
FILE: docs/404.md
================================================
---
title: "404 - Page Not Found"
permalink: /404.html
---

## The page you wanted does not exist

If you were looking for Javadoc, try one of the releases below:

{% include javadocs.html %}


================================================
FILE: docs/_config.yml
================================================
theme: minima
title: "fabric-chaincode-java"
releases:
  - main
  - release-1.4
  - release-2.2


================================================
FILE: docs/_includes/footer.html
================================================


================================================
FILE: docs/_includes/header.html
================================================
<header class="site-header">

  <div class="wrapper">
    <a class="site-title" rel="author" href="{{ "/" | relative_url }}">{{ site.title | escape }}</a>

    <nav class="site-nav">
      <input type="checkbox" id="nav-trigger" class="nav-trigger" />
      <label for="nav-trigger">
        <span class="menu-icon">
          <svg viewBox="0 0 18 15" width="18px" height="15px">
            <path d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.032C17.335,0,18,0.665,18,1.484L18,1.484z M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.032C17.335,6.031,18,6.696,18,7.516L18,7.516z M18,13.516C18,14.335,17.335,15,16.516,15H1.484 C0.665,15,0,14.335,0,13.516l0,0c0-0.82,0.665-1.483,1.484-1.483h15.032C17.335,12.031,18,12.695,18,13.516L18,13.516z"/>
          </svg>
        </span>
      </label>

      <div class="trigger">
        <a class="page-link" href="https://github.com/hyperledger/fabric-chaincode-java/">View on GitHub</a>
      </div>
    </nav>
  </div>
</header>


================================================
FILE: docs/_includes/javadocs.html
================================================
<ul>
  {%- for release in site.releases -%}
    <li><a class="page-link" href="{{ release | relative_url }}/api/">{{ release | escape }}</a></li>
  {%- endfor -%}
</ul>


================================================
FILE: docs/index.md
================================================
---
layout: home
---

Hyperledger Fabric offers a number of SDKs to support developing smart contracts (chaincode)
in various programming languages. There are two other smart contract SDKs available for Go, and Node.js, in addition to this Java SDK:

  * [Go SDK documentation](https://godoc.org/github.com/hyperledger/fabric/core/chaincode/shim)
  * [Node.js SDK documentation](https://hyperledger.github.io/fabric-chaincode-node/)

## Documentation

Detailed explanation on the concepts and programming model for smart contracts can be found in the [Chaincode Tutorials section of the Hyperledger Fabric documentation](https://hyperledger-fabric.readthedocs.io/en/latest/developapps/smartcontract.html#).

Javadoc is available for each release:

{% include javadocs.html %}

## Download

Gradle:

```
dependencies {
  implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:VERSION'
}
```

Maven:

```
<dependency>
  <groupId>org.hyperledger.fabric-chaincode-java</groupId>
  <artifactId>fabric-chaincode-shim</artifactId>
  <version>VERSION</version>
</dependency>
```

More options can be found on the [central maven repository](https://search.maven.org/artifact/org.hyperledger.fabric-chaincode-java/fabric-chaincode-shim/).

Check the [release notes](https://github.com/hyperledger/fabric-chaincode-java/releases) for the changes in each version.

## Compatibility

For details on what versions of Java and Hyperledger Fabric can be used please see the [compatibility document](https://github.com/hyperledger/fabric-chaincode-java/blob/main/COMPATIBILITY.md).

## Samples

Several Java chaincode samples can be found in the [fabric-samples repository](https://github.com/hyperledger/fabric-samples)


================================================
FILE: examples/fabric-contract-example-as-service/Dockerfile
================================================
# Copyright 2019 IBM All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0

# Example multi-stage dockerfile for Java Chaincode

# the first stage 
FROM gradle:9-jdk21 AS gradle_build
 
# copy the build.gradle and src code to the container
COPY src/ src/
COPY build.gradle ./ 

# Build and package our code
RUN gradle build shadowJar


# the second stage of our build just needs the compiled files
FROM eclipse-temurin:25-jre
# copy only the artifacts we need from the first stage and discard the rest
COPY --from=gradle_build /home/gradle/build/libs/chaincode.jar /chaincode.jar
 
ENV PORT=9999
EXPOSE 9999

# set the startup command to execute the jar
CMD ["java", "-jar", "/chaincode.jar"]

================================================
FILE: examples/fabric-contract-example-as-service/README.md
================================================
# Java Chaincode -as-a-service

This example shows how to start the chaincode in it's 'as-a-service' mode.
Note that this has been improved over the original mechanism

## Build Changes

There are no changes required to tbe build file. For example the `build.gradle` can be left like this

```
    manifest {
        attributes 'Main-Class': 'org.hyperledger.fabric.contract.ContractRouter'
    }
```

## Contract Code

No changes are required to the contract code. Note that the previous 'bootstrap' main method is not required.

## Environment Variables

The setting of the `CHAINCODE_SERVER_ADDRESS` environment variable will trigger the code to work in the 'as-a-service' mode.  This should be set to the hostname:port that the server will be exposed on.  Typically this would be

```
CHAINCODE_SERVER_ADDRESS=0.0.0.0:9999
```

*NOTE* if `CHAINCODE_SERVER_ADDRESS` is set, and the chaincode is deployed as a regular chaincode, this will result in a failure. The chaincode will still start in 'as-a-service' mode.

The `CORE_CHAINCODE_ID_NAME` must also be set to match the ID used when deploying the chaincode.

*For TLS* ensure that 
- `CORE_PEERT_TLS_ENABLED` is true
- `CORE_PEER_TLS_ROOTCERT_FILE` is set to the certificate of the root CA
- `CORE_TLS_CLIENT_KEY_FILE` and `CORE_TLS_CLIENT_CERT_FILE` if using mutual TLS (PEM encoded)


## Dockerfile

There is an example dockerfile that shows how the chaincode can be built into a container image.


================================================
FILE: examples/fabric-contract-example-as-service/build.gradle
================================================
plugins {
    id 'com.gradleup.shadow' version '9.3.1'
    id 'java'
}

version = '0.0.1'

repositories {
    mavenCentral()
    maven {
        url = "https://www.jitpack.io"
    }
}

dependencies {
    implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.8'
    implementation 'org.json:json:20251224'
    testImplementation platform('org.junit:junit-bom:6.0.2')
    testImplementation 'org.junit.jupiter:junit-jupiter'
    testImplementation 'org.assertj:assertj-core:3.27.7'
    testImplementation 'org.mockito:mockito-core:5.21.0'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

shadowJar {
    archiveBaseName = 'chaincode'
    archiveVersion = ''
    archiveClassifier = ''
    duplicatesStrategy = DuplicatesStrategy.INCLUDE
    mergeServiceFiles()

    manifest {
        attributes 'Main-Class': 'org.example.Application'
    }
}

compileJava {
    options.release.set(11)
    options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" << "-parameters"
}

test {
    useJUnitPlatform()
    testLogging {
        events "PASSED", "SKIPPED", "FAILED"
    }
}


================================================
FILE: examples/fabric-contract-example-as-service/src/main/java/org/example/contract/MyAsset.java
================================================
/*
 * SPDX-License-Identifier: Apache-2.0
 */

package org.example.contract;

import org.hyperledger.fabric.contract.annotation.DataType;
import org.hyperledger.fabric.contract.annotation.Property;
import org.json.JSONObject;

@DataType()
public class MyAsset {

    @Property()
    private String value;

    public MyAsset() {
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String toJSONString() {
        return new JSONObject(this).toString();
    }

    public static MyAsset fromJSONString(String json) {
        String value = new JSONObject(json).getString("value");
        MyAsset asset = new MyAsset();
        asset.setValue(value);
        return asset;
    }
}


================================================
FILE: examples/fabric-contract-example-as-service/src/main/java/org/example/contract/MyAssetContract.java
================================================
/*
 * SPDX-License-Identifier: Apache-2.0
 */
package org.example.contract;

import static java.nio.charset.StandardCharsets.UTF_8;

import org.hyperledger.fabric.contract.Context;
import org.hyperledger.fabric.contract.ContractInterface;
import org.hyperledger.fabric.contract.annotation.Contract;
import org.hyperledger.fabric.contract.annotation.Default;
import org.hyperledger.fabric.contract.annotation.Transaction;

@Contract
@Default
public class MyAssetContract implements ContractInterface {

    public MyAssetContract() {

    }

    @Transaction()
    public boolean myAssetExists(Context ctx, String myAssetId) {
        byte[] buffer = ctx.getStub().getState(myAssetId);
        return (buffer != null && buffer.length > 0);
    }

    @Transaction()
    public void createMyAsset(Context ctx, String myAssetId, String value) {
        boolean exists = myAssetExists(ctx, myAssetId);
        if (exists) {
            throw new RuntimeException("The asset " + myAssetId + " already exists");
        }
        MyAsset asset = new MyAsset();
        asset.setValue(value);
        ctx.getStub().putState(myAssetId, asset.toJSONString().getBytes(UTF_8));
    }

    @Transaction()
    public MyAsset readMyAsset(Context ctx, String myAssetId) {
        boolean exists = myAssetExists(ctx, myAssetId);
        if (!exists) {
            throw new RuntimeException("The asset " + myAssetId + " does not exist");
        }

        MyAsset newAsset = MyAsset.fromJSONString(new String(ctx.getStub().getState(myAssetId), UTF_8));
        return newAsset;
    }

    @Transaction()
    public void updateMyAsset(Context ctx, String myAssetId, String newValue) {
        boolean exists = myAssetExists(ctx, myAssetId);
        if (!exists) {
            throw new RuntimeException("The asset " + myAssetId + " does not exist");
        }
        MyAsset asset = new MyAsset();
        asset.setValue(newValue);

        ctx.getStub().putState(myAssetId, asset.toJSONString().getBytes(UTF_8));
    }

    @Transaction()
    public void deleteMyAsset(Context ctx, String myAssetId) {
        boolean exists = myAssetExists(ctx, myAssetId);
        if (!exists) {
            throw new RuntimeException("The asset " + myAssetId + " does not exist");
        }
        ctx.getStub().delState(myAssetId);
    }

}

================================================
FILE: examples/fabric-contract-example-as-service/src/test/java/org/example/MyAssetContractTest.java
================================================
/*
 * SPDX-License-Identifier: Apache License 2.0
 */

package org.example;

import static java.nio.charset.StandardCharsets.UTF_8;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import java.nio.charset.StandardCharsets;
import org.example.contract.MyAsset;
import org.example.contract.MyAssetContract;
import org.hyperledger.fabric.contract.Context;
import org.hyperledger.fabric.shim.ChaincodeServerProperties;
import org.hyperledger.fabric.shim.ChaincodeStub;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;


public final class MyAssetContractTest {

    @Nested
    class AssetExists {

        @Test
        public void noProperAsset() {

            MyAssetContract contract = new MyAssetContract();
            Context ctx = mock(Context.class);
            ChaincodeStub stub = mock(ChaincodeStub.class);
            when(ctx.getStub()).thenReturn(stub);

            when(stub.getState("10001")).thenReturn(new byte[]{});
            boolean result = contract.myAssetExists(ctx, "10001");

            assertFalse(result);
        }

        @Test
        public void assetExists() {

            MyAssetContract contract = new MyAssetContract();
            Context ctx = mock(Context.class);
            ChaincodeStub stub = mock(ChaincodeStub.class);
            when(ctx.getStub()).thenReturn(stub);

            when(stub.getState("10001")).thenReturn(new byte[]{42});
            boolean result = contract.myAssetExists(ctx, "10001");

            assertTrue(result);

        }

        @Test
        public void noKey() {
            MyAssetContract contract = new MyAssetContract();
            Context ctx = mock(Context.class);
            ChaincodeStub stub = mock(ChaincodeStub.class);
            when(ctx.getStub()).thenReturn(stub);

            when(stub.getState("10002")).thenReturn(null);
            boolean result = contract.myAssetExists(ctx, "10002");

            assertFalse(result);

        }

    }

    @Nested
    class AssetCreates {

        @Test
        public void newAssetCreate() {
            MyAssetContract contract = new MyAssetContract();
            Context ctx = mock(Context.class);
            ChaincodeStub stub = mock(ChaincodeStub.class);
            when(ctx.getStub()).thenReturn(stub);

            String json = "{\"value\":\"TheAsset\"}";

            contract.createMyAsset(ctx, "10001", "TheAsset");

            verify(stub).putState("10001", json.getBytes(UTF_8));
        }

        @Test
        public void alreadyExists() {
            MyAssetContract contract = new MyAssetContract();
            Context ctx = mock(Context.class);
            ChaincodeStub stub = mock(ChaincodeStub.class);
            when(ctx.getStub()).thenReturn(stub);

            when(stub.getState("10002")).thenReturn(new byte[]{42});

            Exception thrown = assertThrows(RuntimeException.class, () -> {
                contract.createMyAsset(ctx, "10002", "TheAsset");
            });

            assertEquals(thrown.getMessage(), "The asset 10002 already exists");

        }

    }

    @Test
    public void assetRead() {
        MyAssetContract contract = new MyAssetContract();
        Context ctx = mock(Context.class);
        ChaincodeStub stub = mock(ChaincodeStub.class);
        when(ctx.getStub()).thenReturn(stub);

        MyAsset asset = new MyAsset();
        asset.setValue("Valuable");

        String json = asset.toJSONString();
        when(stub.getState("10001")).thenReturn(json.getBytes(StandardCharsets.UTF_8));

        MyAsset returnedAsset = contract.readMyAsset(ctx, "10001");
        assertEquals(returnedAsset.getValue(), asset.getValue());
    }

    @Nested
    class AssetUpdates {

        @Test
        public void updateExisting() {
            MyAssetContract contract = new MyAssetContract();
            Context ctx = mock(Context.class);
            ChaincodeStub stub = mock(ChaincodeStub.class);
            when(ctx.getStub()).thenReturn(stub);
            when(stub.getState("10001")).thenReturn(new byte[]{42});

            contract.updateMyAsset(ctx, "10001", "updates");

            String json = "{\"value\":\"updates\"}";
            verify(stub).putState("10001", json.getBytes(UTF_8));
        }

        @Test
        public void updateMissing() {
            MyAssetContract contract = new MyAssetContract();
            Context ctx = mock(Context.class);
            ChaincodeStub stub = mock(ChaincodeStub.class);
            when(ctx.getStub()).thenReturn(stub);

            when(stub.getState("10001")).thenReturn(null);

            Exception thrown = assertThrows(RuntimeException.class, () -> {
                contract.updateMyAsset(ctx, "10001", "TheAsset");
            });

            assertEquals(thrown.getMessage(), "The asset 10001 does not exist");
        }

    }

    @Test
    public void assetDelete() {
        MyAssetContract contract = new MyAssetContract();
        Context ctx = mock(Context.class);
        ChaincodeStub stub = mock(ChaincodeStub.class);
        when(ctx.getStub()).thenReturn(stub);
        when(stub.getState("10001")).thenReturn(null);

        Exception thrown = assertThrows(RuntimeException.class, () -> {
            contract.deleteMyAsset(ctx, "10001");
        });

        assertEquals(thrown.getMessage(), "The asset 10001 does not exist");
    }

    @Test
    public void test() {
        ChaincodeServerProperties chaincodeServerProperties = new ChaincodeServerProperties();
        chaincodeServerProperties.setKeepAliveTimeMinutes(-10);

        assertEquals(true, true);
    }

}

================================================
FILE: examples/fabric-contract-example-gradle/.gitignore
================================================
.gradle/
build/
bin/

================================================
FILE: examples/fabric-contract-example-gradle/README.md
================================================
This example needs to use gradle4.6  please install this first

eg using sdkman

`sdk install gradle 4.6`


and then add the wrapper code before building

`gradle wrapper`

================================================
FILE: examples/fabric-contract-example-gradle/build.gradle
================================================
plugins {
    id 'com.gradleup.shadow' version '9.3.1'
    id 'java'
}

version = '0.0.1'

repositories {
    mavenCentral()
    maven {
        url = "https://www.jitpack.io"
    }
}

dependencies {
    implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.8'
    implementation 'org.json:json:20251224'
    testImplementation platform('org.junit:junit-bom:6.0.2')
    testImplementation 'org.junit.jupiter:junit-jupiter'
    testImplementation 'org.assertj:assertj-core:3.27.7'
    testImplementation 'org.mockito:mockito-core:5.21.0'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

shadowJar {
    archiveBaseName = 'chaincode'
    archiveVersion = ''
    archiveClassifier = ''
    duplicatesStrategy = DuplicatesStrategy.INCLUDE
    mergeServiceFiles()

    manifest {
        attributes 'Main-Class': 'org.hyperledger.fabric.contract.ContractRouter'
    }
}

compileJava {
    options.release.set(11)
    options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" << "-parameters"
}

test {
    useJUnitPlatform()
    testLogging {
        events "PASSED", "SKIPPED", "FAILED"
    }
}


================================================
FILE: examples/fabric-contract-example-gradle/src/main/java/org/example/MyAsset.java
================================================
/*
 * SPDX-License-Identifier: Apache-2.0
 */

package org.example;

import org.hyperledger.fabric.contract.annotation.Contract;
import org.hyperledger.fabric.contract.annotation.DataType;
import org.hyperledger.fabric.contract.annotation.Property;
import org.json.JSONObject;

@DataType()
public class MyAsset {

    @Property()
    private String value;

    public MyAsset(){
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String toJSONString() {
        return new JSONObject(this).toString();
    }

    public static MyAsset fromJSONString(String json) {
        String value = new JSONObject(json).getString("value");
        MyAsset asset = new MyAsset();
        asset.setValue(value);
        return asset;
    }
}


================================================
FILE: examples/fabric-contract-example-gradle/src/main/java/org/example/MyAssetContract.java
================================================
/*
 * SPDX-License-Identifier: Apache-2.0
 */
package org.example;

import org.hyperledger.fabric.contract.Context;
import org.hyperledger.fabric.contract.ContractInterface;
import org.hyperledger.fabric.contract.annotation.Contract;
import org.hyperledger.fabric.contract.annotation.Default;
import org.hyperledger.fabric.contract.annotation.Transaction;

import io.swagger.v3.oas.annotations.info.Contact;
import io.swagger.v3.oas.annotations.info.Info;
import io.swagger.v3.oas.annotations.info.License;
import static java.nio.charset.StandardCharsets.UTF_8;

@Contract(name = "MyAssetContract",
    info = @Info(title = "MyAsset contract",
                description = "Very basic Java Contract example",
                version = "0.0.1",
                license =
                        @License(name = "SPDX-License-Identifier: Apache-2.0",
                                url = ""),
                                contact =  @Contact(email = "MyAssetContract@example.com",
                                                name = "MyAssetContract",
                                                url = "http://MyAssetContract.me")))
@Default
public class MyAssetContract implements ContractInterface {
    public  MyAssetContract() {

    }
    @Transaction()
    public boolean myAssetExists(Context ctx, String myAssetId) {
        byte[] buffer = ctx.getStub().getState(myAssetId);
        return (buffer != null && buffer.length > 0);
    }

    @Transaction()
    public void createMyAsset(Context ctx, String myAssetId, String value) {
        boolean exists = myAssetExists(ctx,myAssetId);
        if (exists) {
            throw new RuntimeException("The asset "+myAssetId+" already exists");
        }
        MyAsset asset = new MyAsset();
        asset.setValue(value);
        ctx.getStub().putState(myAssetId, asset.toJSONString().getBytes(UTF_8));
    }

    @Transaction()
    public MyAsset readMyAsset(Context ctx, String myAssetId) {
        boolean exists = myAssetExists(ctx,myAssetId);
        if (!exists) {
            throw new RuntimeException("The asset "+myAssetId+" does not exist");
        }

        MyAsset newAsset = MyAsset.fromJSONString(new String(ctx.getStub().getState(myAssetId),UTF_8));
        return newAsset;
    }

    @Transaction()
    public void updateMyAsset(Context ctx, String myAssetId, String newValue) {
        boolean exists = myAssetExists(ctx,myAssetId);
        if (!exists) {
            throw new RuntimeException("The asset "+myAssetId+" does not exist");
        }
        MyAsset asset = new MyAsset();
        asset.setValue(newValue);

        ctx.getStub().putState(myAssetId, asset.toJSONString().getBytes(UTF_8));
    }

    @Transaction()
    public void deleteMyAsset(Context ctx, String myAssetId) {
        boolean exists = myAssetExists(ctx,myAssetId);
        if (!exists) {
            throw new RuntimeException("The asset "+myAssetId+" does not exist");
        }
        ctx.getStub().delState(myAssetId);
    }

}

================================================
FILE: examples/fabric-contract-example-gradle/src/test/java/org/example/MyAssetContractTest.java
================================================
/*
 * SPDX-License-Identifier: Apache License 2.0
 */

package org.example;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import java.nio.charset.StandardCharsets;

import org.hyperledger.fabric.contract.Context;
import org.hyperledger.fabric.shim.ChaincodeStub;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;


public final class MyAssetContractTest {

    @Nested
    class AssetExists {
        @Test
        public void noProperAsset() {

            MyAssetContract contract = new  MyAssetContract();
            Context ctx = mock(Context.class);
            ChaincodeStub stub = mock(ChaincodeStub.class);
            when(ctx.getStub()).thenReturn(stub);

            when(stub.getState("10001")).thenReturn(new byte[] {});
            boolean result = contract.myAssetExists(ctx,"10001");

            assertFalse(result);
        }

        @Test
        public void assetExists() {

            MyAssetContract contract = new  MyAssetContract();
            Context ctx = mock(Context.class);
            ChaincodeStub stub = mock(ChaincodeStub.class);
            when(ctx.getStub()).thenReturn(stub);

            when(stub.getState("10001")).thenReturn(new byte[] {42});
            boolean result = contract.myAssetExists(ctx,"10001");

            assertTrue(result);

        }

        @Test
        public void noKey() {
            MyAssetContract contract = new  MyAssetContract();
            Context ctx = mock(Context.class);
            ChaincodeStub stub = mock(ChaincodeStub.class);
            when(ctx.getStub()).thenReturn(stub);

            when(stub.getState("10002")).thenReturn(null);
            boolean result = contract.myAssetExists(ctx,"10002");

            assertFalse(result);

        }

    }

    @Nested
    class AssetCreates {

        @Test
        public void newAssetCreate() {
            MyAssetContract contract = new  MyAssetContract();
            Context ctx = mock(Context.class);
            ChaincodeStub stub = mock(ChaincodeStub.class);
            when(ctx.getStub()).thenReturn(stub);

            String json = "{\"value\":\"TheAsset\"}";

            contract.createMyAsset(ctx, "10001", "TheAsset");

            verify(stub).putState("10001", json.getBytes(UTF_8));
        }

        @Test
        public void alreadyExists() {
            MyAssetContract contract = new  MyAssetContract();
            Context ctx = mock(Context.class);
            ChaincodeStub stub = mock(ChaincodeStub.class);
            when(ctx.getStub()).thenReturn(stub);

            when(stub.getState("10002")).thenReturn(new byte[] { 42 });

            Exception thrown = assertThrows(RuntimeException.class, () -> {
                contract.createMyAsset(ctx, "10002", "TheAsset");
            });

            assertEquals(thrown.getMessage(), "The asset 10002 already exists");

        }

    }

    @Test
    public void assetRead() {
        MyAssetContract contract = new  MyAssetContract();
        Context ctx = mock(Context.class);
        ChaincodeStub stub = mock(ChaincodeStub.class);
        when(ctx.getStub()).thenReturn(stub);

        MyAsset asset = new  MyAsset();
        asset.setValue("Valuable");

        String json = asset.toJSONString();
        when(stub.getState("10001")).thenReturn(json.getBytes(StandardCharsets.UTF_8));

        MyAsset returnedAsset = contract.readMyAsset(ctx, "10001");
        assertEquals(returnedAsset.getValue(), asset.getValue());
    }

    @Nested
    class AssetUpdates {
        @Test
        public void updateExisting() {
            MyAssetContract contract = new  MyAssetContract();
            Context ctx = mock(Context.class);
            ChaincodeStub stub = mock(ChaincodeStub.class);
            when(ctx.getStub()).thenReturn(stub);
            when(stub.getState("10001")).thenReturn(new byte[] { 42 });

            contract.updateMyAsset(ctx, "10001", "updates");

            String json = "{\"value\":\"updates\"}";
            verify(stub).putState("10001", json.getBytes(UTF_8));
        }

        @Test
        public void updateMissing() {
            MyAssetContract contract = new  MyAssetContract();
            Context ctx = mock(Context.class);
            ChaincodeStub stub = mock(ChaincodeStub.class);
            when(ctx.getStub()).thenReturn(stub);

            when(stub.getState("10001")).thenReturn(null);

            Exception thrown = assertThrows(RuntimeException.class, () -> {
                contract.updateMyAsset(ctx, "10001", "TheAsset");
            });

            assertEquals(thrown.getMessage(), "The asset 10001 does not exist");
        }

    }

    @Test
    public void assetDelete() {
        MyAssetContract contract = new  MyAssetContract();
        Context ctx = mock(Context.class);
        ChaincodeStub stub = mock(ChaincodeStub.class);
        when(ctx.getStub()).thenReturn(stub);
        when(stub.getState("10001")).thenReturn(null);

        Exception thrown = assertThrows(RuntimeException.class, () -> {
            contract.deleteMyAsset(ctx, "10001");
        });

        assertEquals(thrown.getMessage(), "The asset 10001 does not exist");
    }

}

================================================
FILE: examples/fabric-contract-example-gradle-kotlin/.fabricignore
================================================
#
# SPDX-License-Identifier: Apache-2.0
#

/.classpath
/.git/
/.gradle/
/.project
/.settings/
/bin/
/build/


================================================
FILE: examples/fabric-contract-example-gradle-kotlin/.gitignore
================================================
#
# SPDX-License-Identifier: Apache-2.0
#

/.classpath
/.gradle/
/.project
/.settings/
/bin/
/build/


================================================
FILE: examples/fabric-contract-example-gradle-kotlin/build.gradle.kts
================================================
/*
 * SPDX-License-Identifier: Apache-2.0
 */
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar


plugins {
    id("com.gradleup.shadow") version "9.3.1"
    id("org.jetbrains.kotlin.jvm") version "2.2.21"
}



version = "0.0.1"

dependencies {
    implementation("org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.8")
    implementation("org.json:json:20250517")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
           
    testImplementation("org.junit.jupiter:junit-jupiter:6.0.1")
    testImplementation("com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0")
}

repositories {
    mavenCentral()
    maven {
        setUrl("https://jitpack.io")
    }
}

tasks {
    "shadowJar"(ShadowJar::class) {
        archiveBaseName = "chaincode"
        archiveVersion = ""
        archiveClassifier = ""
        duplicatesStrategy = DuplicatesStrategy.INCLUDE
        mergeServiceFiles()
        manifest {
            attributes(mapOf("Main-Class" to "org.hyperledger.fabric.contract.ContractRouter"))
        }
    }
}


tasks.withType<Test> {
    useJUnitPlatform()
    testLogging {
        events("passed", "skipped", "failed")
    }
}


================================================
FILE: examples/fabric-contract-example-gradle-kotlin/gradle/wrapper/gradle-wrapper.properties
================================================
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists


================================================
FILE: examples/fabric-contract-example-gradle-kotlin/gradlew
================================================
#!/bin/sh

#
# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

##############################################################################
#
#   Gradle start up script for POSIX generated by Gradle.
#
#   Important for running:
#
#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
#       noncompliant, but you have some other compliant shell such as ksh or
#       bash, then to run this script, type that shell name before the whole
#       command line, like:
#
#           ksh Gradle
#
#       Busybox and similar reduced shells will NOT work, because this script
#       requires all of these POSIX shell features:
#         * functions;
#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;
#         * compound commands having a testable exit status, especially «case»;
#         * various built-in commands including «command», «set», and «ulimit».
#
#   Important for patching:
#
#   (2) This script targets any POSIX shell, so it avoids extensions provided
#       by Bash, Ksh, etc; in particular arrays are avoided.
#
#       The "traditional" practice of packing multiple parameters into a
#       space-separated string is a well documented source of bugs and security
#       problems, so this is (mostly) avoided, by progressively accumulating
#       options in "$@", and eventually passing that to Java.
#
#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
#       see the in-line comments for details.
#
#       There are tweaks for specific operating systems such as AIX, CygWin,
#       Darwin, MinGW, and NonStop.
#
#   (3) This script is generated from the Groovy template
#       https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
#       within the Gradle project.
#
#       You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################

# Attempt to set APP_HOME

# Resolve links: $0 may be a link
app_path=$0

# Need this for daisy-chained symlinks.
while
    APP_HOME=${app_path%"${app_path##*/}"}  # leaves a trailing /; empty if no leading path
    [ -h "$app_path" ]
do
    ls=$( ls -ld "$app_path" )
    link=${ls#*' -> '}
    case $link in             #(
      /*)   app_path=$link ;; #(
      *)    app_path=$APP_HOME$link ;;
    esac
done

# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum

warn () {
    echo "$*"
} >&2

die () {
    echo
    echo "$*"
    echo
    exit 1
} >&2

# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "$( uname )" in                #(
  CYGWIN* )         cygwin=true  ;; #(
  Darwin* )         darwin=true  ;; #(
  MSYS* | MINGW* )  msys=true    ;; #(
  NONSTOP* )        nonstop=true ;;
esac

CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar


# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
        # IBM's JDK on AIX uses strange locations for the executables
        JAVACMD=$JAVA_HOME/jre/sh/java
    else
        JAVACMD=$JAVA_HOME/bin/java
    fi
    if [ ! -x "$JAVACMD" ] ; then
        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
    fi
else
    JAVACMD=java
    if ! command -v java >/dev/null 2>&1
    then
        die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
    fi
fi

# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
    case $MAX_FD in #(
      max*)
        # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
        # shellcheck disable=SC2039,SC3045
        MAX_FD=$( ulimit -H -n ) ||
            warn "Could not query maximum file descriptor limit"
    esac
    case $MAX_FD in  #(
      '' | soft) :;; #(
      *)
        # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
        # shellcheck disable=SC2039,SC3045
        ulimit -n "$MAX_FD" ||
            warn "Could not set maximum file descriptor limit to $MAX_FD"
    esac
fi

# Collect all arguments for the java command, stacking in reverse order:
#   * args from the command line
#   * the main class name
#   * -classpath
#   * -D...appname settings
#   * --module-path (only if needed)
#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.

# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
    APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
    CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )

    JAVACMD=$( cygpath --unix "$JAVACMD" )

    # Now convert the arguments - kludge to limit ourselves to /bin/sh
    for arg do
        if
            case $arg in                                #(
              -*)   false ;;                            # don't mess with options #(
              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath
                    [ -e "$t" ] ;;                      #(
              *)    false ;;
            esac
        then
            arg=$( cygpath --path --ignore --mixed "$arg" )
        fi
        # Roll the args list around exactly as many times as the number of
        # args, so each arg winds up back in the position where it started, but
        # possibly modified.
        #
        # NB: a `for` loop captures its iteration list before it begins, so
        # changing the positional parameters here affects neither the number of
        # iterations, nor the values presented in `arg`.
        shift                   # remove old arg
        set -- "$@" "$arg"      # push replacement arg
    done
fi


# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'

# Collect all arguments for the java command:
#   * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
#     and any embedded shellness will be escaped.
#   * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
#     treated as '${Hostname}' itself on the command line.

set -- \
        "-Dorg.gradle.appname=$APP_BASE_NAME" \
        -classpath "$CLASSPATH" \
        org.gradle.wrapper.GradleWrapperMain \
        "$@"

# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
    die "xargs is not available"
fi

# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
#   readarray ARGS < <( xargs -n1 <<<"$var" ) &&
#   set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#

eval "set -- $(
        printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
        xargs -n1 |
        sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
        tr '\n' ' '
    )" '"$@"'

exec "$JAVACMD" "$@"


================================================
FILE: examples/fabric-contract-example-gradle-kotlin/gradlew.bat
================================================
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem      https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem

@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem  Gradle startup script for Windows
@rem
@rem ##########################################################################

@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal

set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%

@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi

@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"

@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome

set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute

echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2

goto fail

:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe

if exist "%JAVA_EXE%" goto execute

echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2

goto fail

:execute
@rem Setup the command line

set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar


@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*

:end
@rem End local scope for the variables with windows NT shell
if %ERRORLEVEL% equ 0 goto mainEnd

:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%

:mainEnd
if "%OS%"=="Windows_NT" endlocal

:omega


================================================
FILE: examples/fabric-contract-example-gradle-kotlin/settings.gradle.kts
================================================
/*
 * SPDX-License-Identifier: Apache-2.0
 */

rootProject.name = "gradle-kotlin"


================================================
FILE: examples/fabric-contract-example-gradle-kotlin/src/main/kotlin/org/example/MyAsset.kt
================================================
/*
 * SPDX-License-Identifier: Apache-2.0
 */

package org.example

import org.hyperledger.fabric.contract.annotation.DataType
import org.hyperledger.fabric.contract.annotation.Property
import org.json.JSONObject

@DataType
class MyAsset(@Property() var value: String?) {

    fun toJSONString(): String {
        return JSONObject(this).toString()
    }

    companion object {
        fun fromJSONString(json: String): MyAsset {
            val value = JSONObject(json).getString("value")
            return MyAsset(value)
        }
    }
    
}

================================================
FILE: examples/fabric-contract-example-gradle-kotlin/src/main/kotlin/org/example/MyAssetContract.kt
================================================
/*
 * SPDX-License-Identifier: Apache-2.0
 */

package org.example

import org.hyperledger.fabric.contract.Context
import org.hyperledger.fabric.contract.ContractInterface
import org.hyperledger.fabric.contract.annotation.Contact
import org.hyperledger.fabric.contract.annotation.Contract
import org.hyperledger.fabric.contract.annotation.Default
import org.hyperledger.fabric.contract.annotation.Info
import org.hyperledger.fabric.contract.annotation.License
import org.hyperledger.fabric.contract.annotation.Transaction

@Contract(name = "MyAssetContract",
    info = Info(title = "MyAsset contract",
                description = "Kotlin gradle dsl and Kotlin Contract",
                version = "0.0.1",
                license =
                        License(name = "Apache-2.0",
                                url = ""),
                                contact = Contact(email = "gradle-kotlin@example.com",
                                                  name = "gradle-kotlin",
                                                  url = "http://gradle-kotlin.me")))
@Default
class MyAssetContract : ContractInterface {

    @Transaction
    fun myAssetExists(ctx: Context, myAssetId: String): Boolean {
        val buffer = ctx.stub.getState(myAssetId)
        return (buffer != null && buffer.size > 0)
    }

    @Transaction
    fun createMyAsset(ctx: Context, myAssetId: String, value: String) {
        val exists = myAssetExists(ctx, myAssetId)
        if (exists) {
            throw RuntimeException("The my asset $myAssetId already exists")
        }
        val asset = MyAsset(value)
        ctx.stub.putState(myAssetId, asset.toJSONString().toByteArray(Charsets.UTF_8))
    }

    @Transaction
    fun readMyAsset(ctx: Context, myAssetId: String): MyAsset {
        val exists = myAssetExists(ctx, myAssetId)
        if (!exists) {
            throw RuntimeException("The my asset $myAssetId does not exist")
        }
        return MyAsset.fromJSONString(ctx.stub.getState(myAssetId).toString(Charsets.UTF_8))
    }

    @Transaction
    fun updateMyAsset(ctx: Context, myAssetId: String, newValue: String) {
        val asset = readMyAsset(ctx, myAssetId)
        asset.value = newValue
        ctx.stub.putState(myAssetId, asset.toJSONString().toByteArray(Charsets.UTF_8))
    }

    @Transaction
    fun deleteMyAsset(ctx: Context, myAssetId: String) {
        val exists = myAssetExists(ctx, myAssetId)
        if (!exists) {
            throw RuntimeException("The my asset $myAssetId does not exist")
        }
        ctx.stub.delState(myAssetId)
    }

}


================================================
FILE: examples/fabric-contract-example-gradle-kotlin/src/test/kotlin/org/example/MyAssetContractTest.kt
================================================
/*
 * SPDX-License-Identifier: Apache-2.0
 */

package org.example

import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Nested
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.Assertions.*
import com.nhaarman.mockitokotlin2.*

import java.util.ArrayList

import org.hyperledger.fabric.contract.Context
import org.hyperledger.fabric.shim.ChaincodeStub
import org.hyperledger.fabric.shim.Chaincode.Response
import org.hyperledger.fabric.shim.Chaincode.Response.Status

class MyAssetContractTest {

    lateinit var ctx: Context
    lateinit var stub: ChaincodeStub

    @BeforeEach
    fun beforeEach() {
        ctx = mock()
        stub = mock()
        whenever(ctx.stub).thenReturn(stub)
        whenever(stub.getState("1001")).thenReturn("{\"value\":\"my asset 1001 value\"}".toByteArray(Charsets.UTF_8))
        whenever(stub.getState("1002")).thenReturn("{\"value\":\"my asset 1002 value\"}".toByteArray(Charsets.UTF_8))
    }

    @Nested
    inner class myAssetExists {

        @Test
        fun `should return true for a my asset`() {
            val contract = MyAssetContract()
            val result = contract.myAssetExists(ctx, "1001")
            assertTrue(result)
        }

        @Test
        fun `should return false for a my asset that does not exist (no key)`() {
            val contract = MyAssetContract()
            val result = contract.myAssetExists(ctx, "1003")
            assertFalse(result)
        }

        @Test
        fun `should return false for a my asset that does not exist (no data)`() {
            val contract = MyAssetContract()
            whenever(stub.getState("1003")).thenReturn(ByteArray(0))
            val result = contract.myAssetExists(ctx, "1003")
            assertFalse(result)
        }

    }

    @Nested
    inner class createMyAsset {

        @Test
        fun `should create a my asset`() {
            val contract = MyAssetContract()
            contract.createMyAsset(ctx, "1003", "my asset 1003 value")
            verify(stub, times(1)).putState("1003", "{\"value\":\"my asset 1003 value\"}".toByteArray(Charsets.UTF_8))
        }

        @Test
        fun `should throw an error for a my asset that already exists`() {
            val contract = MyAssetContract()
            val e = assertThrows(RuntimeException::class.java) { contract.createMyAsset(ctx, "1001", "my asset 1001 value") }
            assertEquals(e.message, "The my asset 1001 already exists")
        }

    }

    @Nested
    inner class readMyAsset {

        @Test
        fun `should return a my asset`() {
            val contract = MyAssetContract()
            val asset = contract.readMyAsset(ctx, "1001")
            assertEquals("my asset 1001 value", asset.value)
        }

        @Test
        fun `should throw an error for a my asset that does not exist`() {
            val contract = MyAssetContract()
            val e = assertThrows(RuntimeException::class.java) { contract.readMyAsset(ctx, "1003") }
            assertEquals(e.message, "The my asset 1003 does not exist")
        }

    }

    @Nested
    inner class updateMyAsset {

        @Test
        fun `should update a my asset`() {
            val contract = MyAssetContract()
            contract.updateMyAsset(ctx, "1001", "my asset 1001 new value")
            verify(stub, times(1)).putState("1001", "{\"value\":\"my asset 1001 new value\"}".toByteArray(Charsets.UTF_8))
        }

        @Test
        fun `should throw an error for a my asset that does not exist`() {
            val contract = MyAssetContract()
            val e = assertThrows(RuntimeException::class.java) { contract.updateMyAsset(ctx, "1003", "my asset 1003 new value") }
            assertEquals(e.message, "The my asset 1003 does not exist")
        }

    }

    @Nested
    inner class deleteMyAsset {

        @Test
        fun `should delete a my asset`() {
            val contract = MyAssetContract()
            contract.deleteMyAsset(ctx, "1001")
            verify(stub, times(1)).delState("1001")
        }

        @Test
        fun `should throw an error for a my asset that does not exist`() {
            val contract = MyAssetContract()
            val e = assertThrows(RuntimeException::class.java) { contract.deleteMyAsset(ctx, "1003") }
            assertEquals(e.message, "The my asset 1003 does not exist")
        }

    }

}


================================================
FILE: examples/fabric-contract-example-maven/.gitignore
================================================
target

================================================
FILE: examples/fabric-contract-example-maven/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>MyAssetContract</groupId>
	<artifactId>MyAssetContract</artifactId>
	<version>1.0-SNAPSHOT</version>
	<properties>

		<!-- Generic properties -->
		<java.version>21</java.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

		<!-- fabric-chaincode-java -->
		<fabric-chaincode-java.version>2.5.8</fabric-chaincode-java.version>

		<!-- Logging -->
		<logback.version>1.5.32</logback.version>
		<slf4j.version>2.0.17</slf4j.version>

	</properties>
	
    <repositories>
        <repository>
            <id>jitpack.io</id>
            <url>https://www.jitpack.io</url>
        </repository>
    </repositories>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.junit</groupId>
                <artifactId>junit-bom</artifactId>
                <version>6.0.3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>

		<!-- fabric-chaincode-java -->
		<dependency>
			<groupId>org.hyperledger.fabric-chaincode-java</groupId>
			<artifactId>fabric-chaincode-shim</artifactId>
			<version>${fabric-chaincode-java.version}</version>
			<scope>compile</scope>
		</dependency>

		<dependency>
			<groupId>org.hyperledger.fabric</groupId>
			<artifactId>fabric-protos</artifactId>
			<version>0.3.7</version>
			<scope>compile</scope>
		</dependency>


		<!-- fabric-sdk-java -->

		<!-- Logging with SLF4J & LogBack -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${slf4j.version}</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>${logback.version}</version>
			<scope>runtime</scope>
		</dependency>
		
		<!-- Test Artifacts -->
		<dependency>
			<groupId>org.junit.jupiter</groupId>
			<artifactId>junit-jupiter-api</artifactId>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.junit.jupiter</groupId>
			<artifactId>junit-jupiter-params</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.junit.jupiter</groupId>
			<artifactId>junit-jupiter-engine</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.mockito</groupId>
			<artifactId>mockito-core</artifactId>
			<version>5.23.0</version>
		</dependency>
		<dependency>
			<groupId>org.json</groupId>
			<artifactId>json</artifactId>
			<version>20251224</version>
		</dependency>

	</dependencies>
	<build>
		<sourceDirectory>src</sourceDirectory>
		<plugins>
			<plugin>
				<artifactId>maven-surefire-plugin</artifactId>
				<version>3.5.5</version>
			</plugin>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.15.0</version>
				<configuration>
					<release>${java.version}</release>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-shade-plugin</artifactId>
				<version>3.6.2</version>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>shade</goal>
						</goals>
						<configuration>
							<finalName>chaincode</finalName>
							<transformers>
								<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
									<mainClass>org.hyperledger.fabric.contract.ContractRouter</mainClass>
								</transformer>
							</transformers>
							<filters>
								<filter>
									<!-- filter out signature files from signed dependencies, else repackaging fails with security ex -->
									<artifact>*:*</artifact>
									<excludes>
										<exclude>META-INF/*.SF</exclude>
										<exclude>META-INF/*.DSA</exclude>
										<exclude>META-INF/*.RSA</exclude>
									</excludes>
								</filter>
							</filters>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>


</project>


================================================
FILE: examples/fabric-contract-example-maven/src/main/java/org/example/MyAsset.java
================================================
/*
 * SPDX-License-Identifier: Apache-2.0
 */

package org.example;

import org.hyperledger.fabric.contract.annotation.Contract;
import org.hyperledger.fabric.contract.annotation.DataType;
import org.hyperledger.fabric.contract.annotation.Property;
import org.json.JSONObject;

@DataType()
public class MyAsset {

    @Property()
    private String value;

    public MyAsset(){
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String toJSONString() {
        return new JSONObject(this).toString();
    }

    public static MyAsset fromJSONString(String json) {
        String value = new JSONObject(json).getString("value");
        MyAsset asset = new MyAsset();
        asset.setValue(value);
        return asset;
    }
}


================================================
FILE: examples/fabric-contract-example-maven/src/main/java/org/example/MyAssetContract.java
================================================
/*
 * SPDX-License-Identifier: Apache-2.0
 */
package org.example;

import org.hyperledger.fabric.contract.Context;
import org.hyperledger.fabric.contract.ContractInterface;
import org.hyperledger.fabric.contract.annotation.Contract;
import org.hyperledger.fabric.contract.annotation.Default;
import org.hyperledger.fabric.contract.annotation.Transaction;

import org.hyperledger.fabric.contract.annotation.Contact;
import org.hyperledger.fabric.contract.annotation.Info;
import org.hyperledger.fabric.contract.annotation.License;
import static java.nio.charset.StandardCharsets.UTF_8;

@Contract(name = "MyAssetContract",
    info = @Info(title = "MyAsset contract",
                description = "Very basic Java Contract example",
                version = "0.0.1",
                license =
                        @License(name = "SPDX-License-Identifier: Apache-2.0",
                                url = ""),
                                contact =  @Contact(email = "MyAssetContract@example.com",
                                                name = "MyAssetContract",
                                                url = "http://MyAssetContract.me")))
@Default
public class MyAssetContract implements ContractInterface {
    public  MyAssetContract() {

    }
    @Transaction()
    public boolean myAssetExists(Context ctx, String myAssetId) {
        byte[] buffer = ctx.getStub().getState(myAssetId);
        return (buffer != null && buffer.length > 0);
    }

    @Transaction()
    public void createMyAsset(Context ctx, String myAssetId, String value) {
        boolean exists = myAssetExists(ctx,myAssetId);
        if (exists) {
            throw new RuntimeException("The asset "+myAssetId+" already exists");
        }
        MyAsset asset = new MyAsset();
        asset.setValue(value);
        ctx.getStub().putState(myAssetId, asset.toJSONString().getBytes(UTF_8));
    }

    @Transaction()
    public MyAsset readMyAsset(Context ctx, String myAssetId) {
        boolean exists = myAssetExists(ctx,myAssetId);
        if (!exists) {
            throw new RuntimeException("The asset "+myAssetId+" does not exist");
        }

        MyAsset newAsset = MyAsset.fromJSONString(new String(ctx.getStub().getState(myAssetId),UTF_8));
        return newAsset;
    }

    @Transaction()
    public void updateMyAsset(Context ctx, String myAssetId, String newValue) {
        boolean exists = myAssetExists(ctx,myAssetId);
        if (!exists) {
            throw new RuntimeException("The asset "+myAssetId+" does not exist");
        }
        MyAsset asset = new MyAsset();
        asset.setValue(newValue);

        ctx.getStub().putState(myAssetId, asset.toJSONString().getBytes(UTF_8));
    }

    @Transaction()
    public void deleteMyAsset(Context ctx, String myAssetId) {
        boolean exists = myAssetExists(ctx,myAssetId);
        if (!exists) {
            throw new RuntimeException("The asset "+myAssetId+" does not exist");
        }
        ctx.getStub().delState(myAssetId);
    }

}

================================================
FILE: examples/fabric-contract-example-maven/src/test/java/org/example/MyAssetContractTest.java
================================================
/*
 * SPDX-License-Identifier: Apache License 2.0
 */

package org.example;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import java.nio.charset.StandardCharsets;

import org.hyperledger.fabric.contract.Context;
import org.hyperledger.fabric.shim.ChaincodeStub;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;


public final class MyAssetContractTest {

    @Nested
    class AssetExists {
        @Test
        public void noProperAsset() {

            MyAssetContract contract = new  MyAssetContract();
            Context ctx = mock(Context.class);
            ChaincodeStub stub = mock(ChaincodeStub.class);
            when(ctx.getStub()).thenReturn(stub);

            when(stub.getState("10001")).thenReturn(new byte[] {});
            boolean result = contract.myAssetExists(ctx,"10001");

            assertFalse(result);
        }

        @Test
        public void assetExists() {

            MyAssetContract contract = new  MyAssetContract();
            Context ctx = mock(Context.class);
            ChaincodeStub stub = mock(ChaincodeStub.class);
            when(ctx.getStub()).thenReturn(stub);

            when(stub.getState("10001")).thenReturn(new byte[] {42});
            boolean result = contract.myAssetExists(ctx,"10001");

            assertTrue(result);

        }

        @Test
        public void noKey() {
            MyAssetContract contract = new  MyAssetContract();
            Context ctx = mock(Context.class);
            ChaincodeStub stub = mock(ChaincodeStub.class);
            when(ctx.getStub()).thenReturn(stub);

            when(stub.getState("10002")).thenReturn(null);
            boolean result = contract.myAssetExists(ctx,"10002");

            assertFalse(result);

        }

    }

    @Nested
    class AssetCreates {

        @Test
        public void newAssetCreate() {
            MyAssetContract contract = new  MyAssetContract();
            Context ctx = mock(Context.class);
            ChaincodeStub stub = mock(ChaincodeStub.class);
            when(ctx.getStub()).thenReturn(stub);

            String json = "{\"value\":\"TheAsset\"}";

            contract.createMyAsset(ctx, "10001", "TheAsset");

            verify(stub).putState("10001", json.getBytes(UTF_8));
        }

        @Test
        public void alreadyExists() {
            MyAssetContract contract = new  MyAssetContract();
            Context ctx = mock(Context.class);
            ChaincodeStub stub = mock(ChaincodeStub.class);
            when(ctx.getStub()).thenReturn(stub);

            when(stub.getState("10002")).thenReturn(new byte[] { 42 });

            Exception thrown = assertThrows(RuntimeException.class, () -> {
                contract.createMyAsset(ctx, "10002", "TheAsset");
            });

            assertEquals(thrown.getMessage(), "The asset 10002 already exists");

        }

    }

    @Test
    public void assetRead() {
        MyAssetContract contract = new  MyAssetContract();
        Context ctx = mock(Context.class);
        ChaincodeStub stub = mock(ChaincodeStub.class);
        when(ctx.getStub()).thenReturn(stub);

        MyAsset asset = new  MyAsset();
        asset.setValue("Valuable");

        String json = asset.toJSONString();
        when(stub.getState("10001")).thenReturn(json.getBytes(StandardCharsets.UTF_8));

        MyAsset returnedAsset = contract.readMyAsset(ctx, "10001");
        assertEquals(returnedAsset.getValue(), asset.getValue());
    }

    @Nested
    class AssetUpdates {
        @Test
        public void updateExisting() {
            MyAssetContract contract = new  MyAssetContract();
            Context ctx = mock(Context.class);
            ChaincodeStub stub = mock(ChaincodeStub.class);
            when(ctx.getStub()).thenReturn(stub);
            when(stub.getState("10001")).thenReturn(new byte[] { 42 });

            contract.updateMyAsset(ctx, "10001", "updates");

            String json = "{\"value\":\"updates\"}";
            verify(stub).putState("10001", json.getBytes(UTF_8));
        }

        @Test
        public void updateMissing() {
            MyAssetContract contract = new  MyAssetContract();
            Context ctx = mock(Context.class);
            ChaincodeStub stub = mock(ChaincodeStub.class);
            when(ctx.getStub()).thenReturn(stub);

            when(stub.getState("10001")).thenReturn(null);

            Exception thrown = assertThrows(RuntimeException.class, () -> {
                contract.updateMyAsset(ctx, "10001", "TheAsset");
            });

            assertEquals(thrown.getMessage(), "The asset 10001 does not exist");
        }

    }

    @Test
    public void assetDelete() {
        MyAssetContract contract = new  MyAssetContract();
        Context ctx = mock(Context.class);
        ChaincodeStub stub = mock(ChaincodeStub.class);
        when(ctx.getStub()).thenReturn(stub);
        when(stub.getState("10001")).thenReturn(null);

        Exception thrown = assertThrows(RuntimeException.class, () -> {
            contract.deleteMyAsset(ctx, "10001");
        });

        assertEquals(thrown.getMessage(), "The asset 10001 does not exist");
    }

}

================================================
FILE: examples/ledger-api/.gitignore
================================================
.gradle/
build/
bin/

================================================
FILE: examples/ledger-api/README.md
================================================
This example needs to use gradle4.6  please install this first

eg using sdkman

`sdk install gradle 4.6`


and then add the wrapper code before building

`gradle wrapper`

================================================
FILE: examples/ledger-api/build.gradle
================================================
plugins {
    id 'com.gradleup.shadow' version '9.3.1'
    id 'java'
}

version '0.0.1'

repositories {
    mavenCentral()
    maven {
        url "https://www.jitpack.io"
    }
}

dependencies {
    implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.8'
    implementation 'org.json:json:20251224'
    testImplementation platform('org.junit:junit-bom:6.0.2')
    testImplementation 'org.junit.jupiter:junit-jupiter'
    testImplementation 'org.assertj:assertj-core:3.27.7'
    testImplementation 'org.mockito:mockito-core:5.21.0'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

shadowJar {
    archiveBaseName = 'chaincode'
    archiveVersion = ''
    archiveClassifier = ''
    duplicatesStrategy = DuplicatesStrategy.INCLUDE
    mergeServiceFiles()

    manifest {
        attributes 'Main-Class': 'org.hyperledger.fabric.contract.ContractRouter'
    }
}

compileJava {
    options.release.set(11)
    options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" << "-parameters"
}

test {
    useJUnitPlatform()
    testLogging {
        events "PASSED", "SKIPPED", "FAILED"
    }
}


================================================
FILE: examples/ledger-api/src/main/java/org/example/LedgerAPIContract.java
================================================
/*
 * SPDX-License-Identifier: Apache-2.0
 */
package org.example;

import org.hyperledger.fabric.contract.Context;
import org.hyperledger.fabric.contract.ContractInterface;
import org.hyperledger.fabric.contract.annotation.Contract;
import org.hyperledger.fabric.contract.annotation.Default;
import org.hyperledger.fabric.contract.annotation.Transaction;

import org.hyperledger.fabric.contract.annotation.Contact;
import org.hyperledger.fabric.contract.annotation.Info;
import org.hyperledger.fabric.contract.annotation.License;
import static java.nio.charset.StandardCharsets.UTF_8;

@Contract(name = "LedgerAPI",
    info = @Info(title = "Ledger API Examples",
                description = "Technical Details and use of the Ledger API",
                version = "0.0.1",
                license =
                        @License(name = "SPDX-License-Identifier: Apache-2.0",
                                url = ""),
                                contact =  @Contact(email = "ledgerapi@example.com",
                                                name = "ledgerapi",
                                                url = "http://ledgerapi.me")))
@Default
public class LedgerAPIContract implements ContractInterface {

    public  LedgerAPIContract() {

    }


    /**
     * Example showing getting the world state ledger.
     */
    @Transaction()
    public boolean assetExistsInWorldState(Context ctx, String myAssetId) {
        Collection collection = Ledger.getLedger(ctx).getCollection(Collection.WORLD);
        // check exists
        return false;
    }

    public final static String PRIVATE_RECORDS = "PrivateRecords";

    /**
     * Example showing getting the a named private data collectionm.
     */
    @Transaction()
    public boolean assetExistsInPrivateData(Context ctx, String myAssetId) {
        Collection collection = Ledger.getLedger(ctx).getCollection(LedgerAPIContract.PRIVATE_RECORDS);

        // check exists
        return false;
    }

    /** 
     * Exanmple showing getting one of the organizational collections
     */
    @Transaction()
    public boolean assetExistsInOrganizationPrivateData(Context ctx, String myAssetId) {
        Collection collection = Ledger.getLedger(ctx).getCollection(Collection.organizationCollection("myMspId"));

        // check exists
        return false;
    }

}

================================================
FILE: examples/ledger-api/src/main/java/org/example/MyAsset.java
================================================
/*
 * SPDX-License-Identifier: Apache-2.0
 */

package org.example;

import org.hyperledger.fabric.contract.annotation.Contract;
import org.hyperledger.fabric.contract.annotation.DataType;
import org.hyperledger.fabric.contract.annotation.Property;
import org.json.JSONObject;

@DataType()
public class MyAsset {

    @Property()
    private String value;

    public MyAsset(){
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String toJSONString() {
        return new JSONObject(this).toString();
    }

    public static MyAsset fromJSONString(String json) {
        String value = new JSONObject(json).getString("value");
        MyAsset asset = new MyAsset();
        asset.setValue(value);
        return asset;
    }
}


================================================
FILE: fabric-chaincode-docker/.gitignore
================================================
/bin/


================================================
FILE: fabric-chaincode-docker/Dockerfile
================================================
ARG JAVA_IMAGE=eclipse-temurin:25-jdk

FROM ${JAVA_IMAGE} AS builder

RUN apt-get update \
    && apt-get install -y curl zip unzip
RUN curl -s "https://get.sdkman.io" | bash

SHELL ["/bin/bash", "-c"]

RUN . /root/.sdkman/bin/sdkman-init.sh \
    && sdk install gradle 9.4.1 \
    && sdk install maven 3.9.15

FROM ${JAVA_IMAGE} AS dependencies

COPY --from=builder /root/.sdkman/candidates/gradle/current /opt/gradle
COPY --from=builder /root/.sdkman/candidates/maven/current /opt/maven

SHELL ["/bin/bash", "-c"]
ENV PATH="/opt/maven/bin:/opt/gradle/bin:${PATH}"

# Coping libs, scripts and sources
COPY build/distributions/ /root/

#Creating 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
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
WORKDIR /root/chaincode-java/shim-src
RUN gradle \
    clean \
    fabric-chaincode-shim:build \
    fabric-chaincode-shim:publishToMavenLocal \
    -x javadoc \
    -x test \
    -x pmdMain \
    -x pmdTest \
    -x spotlessCheck

WORKDIR /root/chaincode-java 
# Run the Gradle and Maven commands to generate the wrapper variants
# of each tool
# Gradle doesn't run without settings.gradle file, so create one
RUN touch settings.gradle \
    && gradle wrapper \
    && ./gradlew wrapper \
    && mvn -N wrapper:wrapper

# Creating final javaenv image which will include all required
# dependencies to build and compile java chaincode
FROM ${JAVA_IMAGE}

RUN apt-get update \
    && apt-get install -y zip unzip \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* \
    && mkdir -p /chaincode/input \
    && mkdir -p /chaincode/output

SHELL ["/bin/bash", "-c"]

# Copy setup scripts, and the cached dependencies
COPY --from=dependencies /root/chaincode-java /root/chaincode-java
COPY --from=dependencies /root/.gradle /root/.gradle
COPY --from=dependencies /root/.m2 /root/.m2

WORKDIR /root/chaincode-java


================================================
FILE: fabric-chaincode-docker/README.md
================================================
# Quick reference

- **Maintained by**:  
  [The Fabric Java chaincode maintainers](https://github.com/hyperledger/fabric-chaincode-java)

# Overview

This image is used by the default [Hyperledger Fabric](https://hyperledger-fabric.readthedocs.io/) chaincode builder when deploying Java smart contracts. It is not intended for use independently of Hyperledger Fabric.

# Image variants

Detailed information on image tags, interoperability, and supported Java versions can be found in the [compatibility](https://github.com/hyperledger/fabric-chaincode-java/blob/main/COMPATIBILITY.md) documentation.

# License

This image is provided under the [Apache-2.0](https://github.com/hyperledger/fabric-chaincode-java/blob/main/LICENSE) license.


================================================
FILE: fabric-chaincode-docker/build.gradle
================================================
/*
 * Copyright IBM Corp. 2018 All Rights Reserved.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

plugins {
    id 'com.bmuschko.docker-remote-api' version '10.0.0'
}

repositories {
    mavenCentral()
}

import com.bmuschko.gradle.docker.tasks.image.*

tasks.register('copyLib', Copy) {
    dependsOn ':fabric-chaincode-shim:build'
    from project(':fabric-chaincode-shim').configurations.runtimeClasspath
    into('build/distributions/chaincode-java/lib')
}

tasks.register('copyShimJar', Copy) {
    dependsOn copyLib
    from project(':fabric-chaincode-shim').jar
    into('build/distributions/chaincode-java/lib')
}

tasks.register('copyStartScript', Copy) {
    dependsOn copyShimJar
    from('start')
    into('build/distributions/chaincode-java')
}

tasks.register('copyBuildScript', Copy) {
    dependsOn copyStartScript
    from('build.sh')
    into('build/distributions/chaincode-java')
}

tasks.register('copyAllDeps', Copy) {
    dependsOn copyBuildScript
    copy {
        from project(':fabric-chaincode-shim').getProjectDir()
        into('build/distributions/chaincode-java/shim-src/fabric-chaincode-shim/')
    }

    copy {
        from project.getParent().file("build.gradle")
        into('build/distributions/chaincode-java/shim-src/')
    }

    copy {
        from project.getParent().file("settings.gradle")
        into('build/distributions/chaincode-java/shim-src/')
    }
}

tasks.register('buildImage', DockerBuildImage) {
    dependsOn copyAllDeps
    inputDir = project.file('Dockerfile').parentFile
    images = ['hyperledger/fabric-javaenv', 'hyperledger/fabric-javaenv:2.5', 'hyperledger/fabric-javaenv:2.5.9']
}


================================================
FILE: fabric-chaincode-docker/build.sh
================================================
#!/usr/bin/env bash
set -ex

INPUT_DIR=/chaincode/input
OUTPUT_DIR=/chaincode/output
TMP_DIR=$(mktemp -d)

NUM_JARS=$(find ${INPUT_DIR} -name "*.jar" | wc -l)

buildGradle() {
    echo "Copying from $1 to ${TMP_DIR}"
    cd $1
    tar cf - . | (cd ${TMP_DIR}; tar xf -)
    cd ${TMP_DIR}
    echo "Gradle build"
    if [ -f ./gradlew ]; then
      chmod +x ./gradlew
      ./gradlew build shadowJar -x test
    else
      /root/chaincode-java/gradlew build shadowJar -x test
    fi
    retval=$?
    if [ $retval -ne 0 ]; then
      exit $retval
    fi
    cp build/libs/chaincode.jar $2
    retval=$?
    if [ $retval -ne 0 ]; then
      exit $retval
    fi
    touch $2/.uberjar
    cd "$SAVED" >/dev/null
}

buildMaven() {
    echo "Copying from $1 to ${TMP_DIR}"
    cd $1
    tar cf - . | (cd ${TMP_DIR}; tar xf -)
    cd ${TMP_DIR}
    echo "Maven build"

    if [ -f ./mvnw ]; then
      chmod +x ./mvnw      
    else
      cp -r /root/chaincode-java/.mvn .
      cp /root/chaincode-java/mvnw .
    fi
    ./mvnw compile package -DskipTests -Dmaven.test.skip=true
    
    retval=$?
    if [ $retval -ne 0 ]; then
      exit $retval
    fi
    cp target/chaincode.jar $2
    retval=$?
    if [ $retval -ne 0 ]; then
      exit $retval
    fi
    touch $2/.uberjar
    cd "$SAVED" >/dev/null
}

for DIR in ${INPUT_DIR} ${INPUT_DIR}/src; do
    if [ -f ${DIR}/build.gradle -o -f ${DIR}/build.gradle.kts ]; then
        buildGradle ${DIR} ${OUTPUT_DIR}
        exit 0
    elif [ -f ${DIR}/pom.xml ]; then
        buildMaven ${DIR} ${OUTPUT_DIR}
        exit 0
    fi
done

if [ ${NUM_JARS} -eq 0 ]; then
    >&2 echo "Not build.gradle nor pom.xml found in chaincode source, don't know how to build chaincode"
    >&2 echo "Project folder content:"
    >&2 find ${INPUT_DIR} -name "*" -exec ls -ld '{}' \;
    exit 255
else
    cd ${INPUT_DIR} && tar cf - $(find . -name "*.jar") | (cd ${OUTPUT_DIR} && tar xvf -)
fi

================================================
FILE: fabric-chaincode-docker/start
================================================
#!/usr/bin/env bash
set -ex

ROOT_DIR=/root/chaincode-java
LIB_DIR=${ROOT_DIR}/lib
CHAINCODE_DIR=${ROOT_DIR}/chaincode
LIB_JARS=$(find ${LIB_DIR} -name "*.jar" | paste -s -d ":" -)
CHAINCODE_JARS=$(find ${CHAINCODE_DIR} -name "*.jar" | paste -s -d ":" -)
NUM_CHAINCODE_JARS=$(find ${CHAINCODE_DIR} -name "*.jar" | wc -l)

JAVA_OPTS="-XshowSettings"

if [ -f ${CHAINCODE_DIR}/.uberjar ]; then
    if [ ${NUM_CHAINCODE_JARS} -ne 1 ]; then
        >&2 echo "Cannot start uber JAR as more than one JAR file was found in the chaincode directory"
        exit 255
    fi
    exec java ${JAVA_OPTS} -jar ${CHAINCODE_JARS} "$@"
else
    exec java ${JAVA_OPTS} -cp ${CHAINCODE_JARS}:${LIB_JARS} org.hyperledger.fabric.contract.ContractRouter "$@"
fi

================================================
FILE: fabric-chaincode-integration-test/.gitignore
================================================
repository
_cfg
*.tar.gz
log.txt


================================================
FILE: fabric-chaincode-integration-test/build.gradle
================================================
dependencies {
    implementation project(':fabric-chaincode-docker')
    implementation project(':fabric-chaincode-shim')
    implementation 'org.json:json:20251224'
}


 test {
    // Always run tests, even when nothing changed.
    dependsOn 'cleanTest'

    // Show test results.
    testLogging {
        events "passed", "skipped", "failed"
        showExceptions = true
        showCauses = true
        showStandardStreams = true
        exceptionFormat = "full"

    }
 }

tasks.register('getLatestDockerImages') {
    doLast {
        providers.exec {
            workingDir "."
            commandLine "sh", "-c", "./getDockerImages.sh"
        }
    }
}


================================================
FILE: fabric-chaincode-integration-test/chaincodebootstrap.gradle
================================================
allprojects {
    apply plugin: 'maven-publish'

    publishing {
        repositories {
            maven {
                name = 'fabric'
                url = "file:$chaincodeRepoDir"
            }
        }
    }
}


================================================
FILE: fabric-chaincode-integration-test/src/contracts/bare-gradle/build.gradle
================================================
plugins {
    id 'com.gradleup.shadow' version '9.3.1'
    id 'java'
}

group 'org.hyperledger.fabric-chaincode-java'
version '1.0-SNAPSHOT'

compileJava {
    options.release = 11
}

repositories {
    mavenCentral()
    maven {
      url "$projectDir/repository"
    }
}

dependencies {
    implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.9'
    implementation 'org.hyperledger.fabric:fabric-protos:0.3.7'
}

shadowJar {
    archiveBaseName = 'chaincode'
    archiveVersion = ''
    archiveClassifier = ''
    duplicatesStrategy = DuplicatesStrategy.INCLUDE
    mergeServiceFiles()

    manifest {
        attributes 'Main-Class': 'org.hyperledger.fabric.contract.ContractRouter'
    }
}


================================================
FILE: fabric-chaincode-integration-test/src/contracts/bare-gradle/src/main/java/org/hyperledger/fabric/example/BareGradle.java
================================================
/*
 * SPDX-License-Identifier: Apache-2.0
 */
package org.hyperledger.fabric.example;

import org.hyperledger.fabric.contract.Context;
import org.hyperledger.fabric.contract.ContractInterface;
import org.hyperledger.fabric.contract.annotation.Contact;
import org.hyperledger.fabric.contract.annotation.Contract;
import org.hyperledger.fabric.contract.annotation.Default;
import org.hyperledger.fabric.contract.annotation.Info;
import org.hyperledger.fabric.contract.annotation.License;
import org.hyperledger.fabric.contract.annotation.Transaction;

@Contract(name = "BareGradle",
    info = @Info(title = "BareGradle contract",
                description = "Contract but using all the APIs",
                version = "0.0.1",
                license =
                        @License(name = "SPDX-License-Identifier: Apache-2.0",
                                url = ""),
                                contact =  @Contact(email = "fred@example.com",
                                                name = "fred",
                                                url = "http://fred.example.com")))
@Default
public class BareGradle implements ContractInterface {
    public BareGradle() {

    }

    @Transaction()
    public String whoami(Context ctx){
       return this.getClass().getSimpleName();
    }
}

================================================
FILE: fabric-chaincode-integration-test/src/contracts/bare-gradle/src/main/resources/config.props
================================================
MAX_INBOUND_MESSAGE_SIZE=4000
CHAINCODE_METRICS_ENABLED=true
TP_CORE_POOL_SIZE=4
TP_MAX_POOL_SIZE=4
TP_QUEUE_SIZE=4000
 

================================================
FILE: fabric-chaincode-integration-test/src/contracts/bare-maven/.gitignore
================================================
target

================================================
FILE: fabric-chaincode-integration-test/src/contracts/bare-maven/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>MyAssetContract</groupId>
	<artifactId>MyAssetContract</artifactId>
	<version>1.0-SNAPSHOT</version>
	<properties>

		<!-- Generic properties -->
		<java.version>11</java.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

		<!-- fabric-chaincode-java -->
		<fabric-chaincode-java.version>2.5.9</fabric-chaincode-java.version>

	</properties>
	
    <repositories>
        <repository>
            <id>jitpack.io</id>
            <url>https://www.jitpack.io</url>
        </repository>
		<repository>
			<id>localfabirc</id>
			<url>file://${project.basedir}/repository</url>
		</repository>			
    </repositories>

	<dependencies>

		<!-- fabric-chaincode-java -->
		<dependency>
			<groupId>org.hyperledger.fabric-chaincode-java</groupId>
			<artifactId>fabric-chaincode-shim</artifactId>
			<version>${fabric-chaincode-java.version}</version>
			<scope>compile</scope>
		</dependency>

	</dependencies>
	<build>
		<sourceDirectory>src</sourceDirectory>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.15.0</version>
				<configuration>
					<release>${java.version}</release>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-shade-plugin</artifactId>
				<version>3.6.2</version>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>shade</goal>
						</goals>
						<configuration>
							<finalName>chaincode</finalName>
							<transformers>
								<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
								<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
									<mainClass>org.hyperledger.fabric.contract.ContractRouter</mainClass>
								</transformer>
							</transformers>
							<filters>
								<filter>
									<!-- filter out signature files from signed dependencies, else repackaging fails with security ex -->
									<artifact>*:*</artifact>
									<excludes>
										<exclude>META-INF/*.SF</exclude>
										<exclude>META-INF/*.DSA</exclude>
										<exclude>META-INF/*.RSA</exclude>
									</excludes>
								</filter>
							</filters>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>

</project>


================================================
FILE: fabric-chaincode-integration-test/src/contracts/bare-maven/src/main/java/org/hyperledger/fabric/example/BareMaven.java
================================================
/*
 * SPDX-License-Identifier: Apache-2.0
 */
package org.hyperledger.fabric.example;

import org.hyperledger.fabric.contract.Context;
import org.hyperledger.fabric.contract.ContractInterface;
import org.hyperledger.fabric.contract.annotation.Contact;
import org.hyperledger.fabric.contract.annotation.Contract;
import org.hyperledger.fabric.contract.annotation.Default;
import org.hyperledger.fabric.contract.annotation.Info;
import org.hyperledger.fabric.contract.annotation.License;
import org.hyperledger.fabric.contract.annotation.Transaction;

@Contract(name = "BareMaven",
    info = @Info(title = "BareGradle contract",
                description = "Contract but using all the APIs",
                version = "0.0.1",
                license =
                        @License(name = "SPDX-License-Identifier: Apache-2.0",
                                url = ""),
                                contact =  @Contact(email = "fred@example.com",
                                                name = "fred",
                                                url = "http://fred.example.com")))
@Default
public class BareMaven implements ContractInterface {
    public BareMaven() {

    }

    @Transaction()
    public String whoami(Context ctx){
       return this.getClass().getSimpleName();
    }
}

================================================
FILE: fabric-chaincode-integration-test/src/contracts/bare-maven/src/main/resources/config.props
================================================
MAX_INBOUND_MESSAGE_SIZE=4000
CHAINCODE_METRICS_ENABLED=true
TP_CORE_POOL_SIZE=4
TP_MAX_POOL_SIZE=4
TP_QUEUE_SIZE=4000
 

================================================
FILE: fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/build.gradle
================================================
plugins {
    id 'com.gradleup.shadow' version '9.3.1'
    id 'java'
}

group 'org.hyperledger.fabric-chaincode-java'
version ''

compileJava {
    options.release = 11
}

repositories {
    mavenCentral()
    maven {
      url "$projectDir/repository"
    }
}

dependencies {
    implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.9'
    implementation 'org.hyperledger.fabric:fabric-protos:0.3.7'
}

shadowJar {
    archiveBaseName = 'chaincode'
    archiveVersion = ''
    archiveClassifier = ''
    duplicatesStrategy = DuplicatesStrategy.INCLUDE
    mergeServiceFiles()

    manifest {
        attributes 'Main-Class': 'org.hyperledger.fabric.contract.ContractRouter'
    }
}


================================================
FILE: fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradle/wrapper/gradle-wrapper.properties
================================================
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists


================================================
FILE: fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew
================================================
#!/bin/sh

#
# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#

##############################################################################
#
#   Gradle start up script for POSIX generated by Gradle.
#
#   Important for running:
#
#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
#       noncompliant, but you have some other compliant shell such as ksh or
#       bash, then to run this script, type that shell name before the whole
#       command line, like:
#
#           ksh Gradle
#
#       Busybox and similar reduced shells will NOT work, because this script
#       requires all of these POSIX shell features:
#         * functions;
#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;
#         * compound commands having a testable exit status, especially «case»;
#         * various built-in commands including «command», «set», and «ulimit».
#
#   Important for patching:
#
#   (2) This script targets any POSIX shell, so it avoids extensions provided
#       by Bash, Ksh, etc; in particular arrays are avoided.
#
#       The "traditional" practice of packing multiple parameters into a
#       space-separated string is a well documented source of bugs and security
#       problems, so this is (mostly) avoided, by progressively accumulating
#       options in "$@", and eventually passing that to Java.
#
#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
#       see the in-line comments for details.
#
#       There are tweaks for specific operating systems such as AIX, CygWin,
#       Darwin, MinGW, and NonStop.
#
#   (3) This script is generated from the Groovy template
#       https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
#       within the Gradle project.
#
#       You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################

# Attempt to set APP_HOME

# Resolve links: $0 may be a link
app_path=$0

# Need this for daisy-chained symlinks.
while
    APP_HOME=${app_path%"${app_path##*/}"}  # leaves a trailing /; empty if no leading path
    [ -h "$app_path" ]
do
    ls=$( ls -ld "$app_path" )
    link=${ls#*' -> '}
    case $link in             #(
      /*)   app_path=$link ;; #(
      *)    app_path=$APP_HOME$link ;;
    esac
done

# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
' "$PWD" ) || exit

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum

warn () {
    echo "$*"
} >&2

die () {
    echo
    echo "$*"
    echo
    exit 1
} >&2

# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "$( uname )" in                #(
  CYGWIN* )         cygwin=true  ;; #(
  Darwin* )         darwin=true  ;; #(
  MSYS* | MINGW* )  msys=true    ;; #(
  NONSTOP* )        nonstop=true ;;
esac

CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar


# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
        # IBM's JDK on AIX uses strange locations for the executables
        JAVACMD=$JAVA_HOME/jre/sh/java
    else
        JAVACMD=$JAVA_HOME/bin/java
    fi
    if [ ! -x "$JAVACMD" ] ; then
        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
    fi
else
    JAVACMD=java
    if ! command -v java >/dev/null 2>&1
    then
        die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
    fi
fi

# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
    case $MAX_FD in #(
      max*)
        # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
        # shellcheck disable=SC2039,SC3045
        MAX_FD=$( ulimit -H -n ) ||
            warn "Could not query maximum file descriptor limit"
    esac
    case $MAX_FD in  #(
      '' | soft) :;; #(
      *)
        # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
        # shellcheck disable=SC2039,SC3045
        ulimit -n "$MAX_FD" ||
            warn "Could not set maximum file descriptor limit to $MAX_FD"
    esac
fi

# Collect all arguments for the java command, stacking in reverse order:
#   * args from the command line
#   * the main class name
#   * -classpath
#   * -D...appname settings
#   * --module-path (only if needed)
#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.

# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
    APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
    CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )

    JAVACMD=$( cygpath --unix "$JAVACMD" )

    # Now convert the arguments - kludge to limit ourselves to /bin/sh
    for arg do
        if
            case $arg in                                #(
              -*)   false ;;                            # don't mess with options #(
              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath
                    [ -e "$t" ] ;;                      #(
              *)    false ;;
            esac
        then
            arg=$( cygpath --path --ignore --mixed "$arg" )
        fi
        # Roll the args list around exactly as many times as the number of
        # args, so each arg winds up back in the position where it started, but
        # possibly modified.
        #
        # NB: a `for` loop captures its iteration list before it begins, so
        # changing the positional parameters here affects neither the number of
        # iterations, nor the values presented in `arg`.
        shift                   # remove old arg
        set -- "$@" "$arg"      # push replacement arg
    done
fi


# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'

# Collect all arguments for the java command:
#   * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
#     and any embedded shellness will be escaped.
#   * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
#     treated as '${Hostname}' itself on the command line.

set -- \
        "-Dorg.gradle.appname=$APP_BASE_NAME" \
        -classpath "$CLASSPATH" \
        org.gradle.wrapper.GradleWrapperMain \
        "$@"

# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
    die "xargs is not available"
fi

# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
#   readarray ARGS < <( xargs -n1 <<<"$var" ) &&
#   set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#

eval "set -- $(
        printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
        xargs -n1 |
        sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
        tr '\n' ' '
    )" '"$@"'

exec "$JAVACMD" "$@"


================================================
FILE: fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew.bat
================================================
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem      https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem

@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem  Gradle startup script for Windows
@rem
@rem ##########################################################################

@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal

set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%

@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi

@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"

@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome

set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute

echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2

goto fail

:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe

if exist "%JAVA_EXE%" goto execute

echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2

goto fail

:execute
@rem Setup the command line

set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar


@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*

:end
@rem End local scope for the variables with windows NT shell
if %ERRORLEVEL% equ 0 goto mainEnd

:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%

:mainEnd
if "%OS%"=="Windows_NT" endlocal

:omega


================================================
FILE: fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/settings.gradle
================================================
rootProject.name = 'fabric-chaincode-example-sacc'



================================================
FILE: fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/src/main/java/org/hyperledger/fabric/example/AllLedgerAPI.java
================================================
/*
 * SPDX-License-Identifier: Apache-2.0
 */
package org.hyperledger.fabric.example;

import org.hyperledger.fabric.contract.Context;
import org.hyperledger.fabric.contract.ContractInterface;
import org.hyperledger.fabric.contract.annotation.Contact;
import org.hyperledger.fabric.contract.annotation.Contract;
import org.hyperledger.fabric.contract.annotation.Default;
import org.hyperledger.fabric.contract.annotation.Info;
import org.hyperledger.fabric.contract.annotation.License;
import org.hyperledger.fabric.contract.annotation.Transaction;
import org.hyperledger.fabric.ledger.Ledger;

@Contract(name = "AllLedgerAPI",
    info = @Info(title = "AllLedgerAPI contract",
                description = "Contract but using all the Ledger APIs",
                version = "0.0.1",
                license =
                        @License(name = "SPDX-License-Identifier: Apache-2.0",
                                url = ""),
                                contact =  @Contact(email = "fred@example.com",
                                                name = "fred",
                                                url = "http://fred.example.com")))
@Default
public class AllLedgerAPI implements ContractInterface {
    
    public AllLedgerAPI() {

    }

    @Transaction()
    public void accessLedgers(Context ctx){
        Ledger ledger = Ledger.getLedger(ctx);
        
        // not much else can be done for the moment
    }

    
}

================================================
FILE: fabric-chaincode-integration-test/src/contracts/fabric-shim-api/build.gradle
================================================
plugins {
    id 'com.gradleup.shadow' version '9.3.1'
    id 'java'
}

group 'org.hyperledger.fabric-chaincode-java'
version '1.0-SNAPSHOT'

compileJava {
    options.release = 11
}

repositories {
    mavenCentral()
    maven {
      url "$projectDir/repository"
    }
}

dependencies {
    implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.9'
    implementation 'org.hyperledger.fabric:fabric-protos:0.3.7'
    implementation 'commons-logging:commons-logging:1.3.5'
    implementation 'com.google.code.gson:gson:2.13.2'
}

shadowJar {
    archiveBaseName = 'chaincode'
    archiveVersion = ''
    archiveClassifier = ''
    duplicatesStrategy = DuplicatesStrategy.INCLUDE
    mergeServiceFiles()

    manifest {
        attributes 'Main-Class': 'org.hyperledger.fabric.contract.ContractRouter'
    }
}


================================================
FILE: fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradle/wrapper/gradle-wrapper.properties
================================================
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists


================================================
FILE: fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradlew
================================================
#!/bin/sh

#
# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#

##############################################################################
#
#   Gradle start up script for POSIX generated by Gradle.
#
#   Important for running:
#
#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
#       noncompliant, but you have some other compliant shell such as ksh or
#       bash, then to run this script, type that shell name before the whole
#       command line, like:
#
#           ksh Gradle
#
#       Busybox and similar reduced shells will NOT work, because this script
#       requires all of these POSIX shell features:
#         * functions;
#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;
#         * compound commands having a testable exit status, especially «case»;
#         * various built-in commands including «command», «set», and «ulimit».
#
#   Important for patching:
#
#   (2) This script targets any POSIX shell, so it avoids extensions provided
#       by Bash, Ksh, etc; in particular arrays are avoided.
#
#       The "traditional" practice of packing multiple parameters into a
#       space-separated string is a well documented source of bugs and security
#       problems, so this is (mostly) avoided, by progressively accumulating
#       options in "$@", and eventually passing that to Java.
#
#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
#       see the in-line comments for details.
#
#       There are tweaks for specific operating systems such as AIX, CygWin,
#       Darwin, MinGW, and NonStop.
#
#   (3) This script is generated from the Groovy template
#       https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
#       within the Gradle project.
#
#       You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################

# Attempt to set APP_HOME

# Resolve links: $0 may be a link
app_path=$0

# Need this for daisy-chained symlinks.
while
    APP_HOME=${app_path%"${app_path##*/}"}  # leaves a trailing /; empty if no leading path
    [ -h "$app_path" ]
do
    ls=$( ls -ld "$app_path" )
    link=${ls#*' -> '}
    case $link in             #(
      /*)   app_path=$link ;; #(
      *)    app_path=$APP_HOME$link ;;
    esac
done

# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum

warn () {
    echo "$*"
} >&2

die () {
    echo
    echo "$*"
    echo
    exit 1
} >&2

# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "$( uname )" in                #(
  CYGWIN* )         cygwin=true  ;; #(
  Darwin* )         darwin=true  ;; #(
  MSYS* | MINGW* )  msys=true    ;; #(
  NONSTOP* )        nonstop=true ;;
esac

CLASSPATH="\\\"\\\""


# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
        # IBM's JDK on AIX uses strange locations for the executables
        JAVACMD=$JAVA_HOME/jre/sh/java
    else
        JAVACMD=$JAVA_HOME/bin/java
    fi
    if [ ! -x "$JAVACMD" ] ; then
        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
    fi
else
    JAVACMD=java
    if ! command -v java >/dev/null 2>&1
    then
        die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
    fi
fi

# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
    case $MAX_FD in #(
      max*)
        # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
        # shellcheck disable=SC2039,SC3045
        MAX_FD=$( ulimit -H -n ) ||
            warn "Could not query maximum file descriptor limit"
    esac
    case $MAX_FD in  #(
      '' | soft) :;; #(
      *)
        # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
        # shellcheck disable=SC2039,SC3045
        ulimit -n "$MAX_FD" ||
            warn "Could not set maximum file descriptor limit to $MAX_FD"
    esac
fi

# Collect all 
Download .txt
gitextract_fa6p6lwj/

├── .github/
│   ├── dependabot.yml
│   ├── settings.yml
│   └── workflows/
│       ├── pull_request.yml
│       ├── push.yml
│       ├── release.yml
│       ├── scan.yml
│       ├── schedule.yml
│       ├── scheduled-scan.yml
│       └── test.yml
├── .gitignore
├── CHANGELOG.md
├── CODEOWNERS
├── CODE_OF_CONDUCT.md
├── COMPATIBILITY.md
├── CONTRIBUTING.md
├── LICENSE
├── MAINTAINERS.md
├── Makefile
├── README.md
├── RELEASING.md
├── SECURITY.md
├── build.gradle
├── docs/
│   ├── 404.md
│   ├── _config.yml
│   ├── _includes/
│   │   ├── footer.html
│   │   ├── header.html
│   │   └── javadocs.html
│   └── index.md
├── examples/
│   ├── fabric-contract-example-as-service/
│   │   ├── Dockerfile
│   │   ├── README.md
│   │   ├── build.gradle
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── org/
│   │       │           └── example/
│   │       │               └── contract/
│   │       │                   ├── MyAsset.java
│   │       │                   └── MyAssetContract.java
│   │       └── test/
│   │           └── java/
│   │               └── org/
│   │                   └── example/
│   │                       └── MyAssetContractTest.java
│   ├── fabric-contract-example-gradle/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── build.gradle
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── org/
│   │       │           └── example/
│   │       │               ├── MyAsset.java
│   │       │               └── MyAssetContract.java
│   │       └── test/
│   │           └── java/
│   │               └── org/
│   │                   └── example/
│   │                       └── MyAssetContractTest.java
│   ├── fabric-contract-example-gradle-kotlin/
│   │   ├── .fabricignore
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   ├── gradle/
│   │   │   └── wrapper/
│   │   │       ├── gradle-wrapper.jar
│   │   │       └── gradle-wrapper.properties
│   │   ├── gradlew
│   │   ├── gradlew.bat
│   │   ├── settings.gradle.kts
│   │   └── src/
│   │       ├── main/
│   │       │   └── kotlin/
│   │       │       └── org/
│   │       │           └── example/
│   │       │               ├── MyAsset.kt
│   │       │               └── MyAssetContract.kt
│   │       └── test/
│   │           └── kotlin/
│   │               └── org/
│   │                   └── example/
│   │                       └── MyAssetContractTest.kt
│   ├── fabric-contract-example-maven/
│   │   ├── .gitignore
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── org/
│   │       │           └── example/
│   │       │               ├── MyAsset.java
│   │       │               └── MyAssetContract.java
│   │       └── test/
│   │           └── java/
│   │               └── org/
│   │                   └── example/
│   │                       └── MyAssetContractTest.java
│   └── ledger-api/
│       ├── .gitignore
│       ├── README.md
│       ├── build.gradle
│       └── src/
│           └── main/
│               └── java/
│                   └── org/
│                       └── example/
│                           ├── LedgerAPIContract.java
│                           └── MyAsset.java
├── fabric-chaincode-docker/
│   ├── .gitignore
│   ├── Dockerfile
│   ├── README.md
│   ├── build.gradle
│   ├── build.sh
│   └── start
├── fabric-chaincode-integration-test/
│   ├── .gitignore
│   ├── build.gradle
│   ├── chaincodebootstrap.gradle
│   └── src/
│       ├── contracts/
│       │   ├── bare-gradle/
│       │   │   ├── build.gradle
│       │   │   └── src/
│       │   │       └── main/
│       │   │           ├── java/
│       │   │           │   └── org/
│       │   │           │       └── hyperledger/
│       │   │           │           └── fabric/
│       │   │           │               └── example/
│       │   │           │                   └── BareGradle.java
│       │   │           └── resources/
│       │   │               └── config.props
│       │   ├── bare-maven/
│       │   │   ├── .gitignore
│       │   │   ├── pom.xml
│       │   │   └── src/
│       │   │       └── main/
│       │   │           ├── java/
│       │   │           │   └── org/
│       │   │           │       └── hyperledger/
│       │   │           │           └── fabric/
│       │   │           │               └── example/
│       │   │           │                   └── BareMaven.java
│       │   │           └── resources/
│       │   │               └── config.props
│       │   ├── fabric-ledger-api/
│       │   │   ├── build.gradle
│       │   │   ├── gradle/
│       │   │   │   └── wrapper/
│       │   │   │       ├── gradle-wrapper.jar
│       │   │   │       └── gradle-wrapper.properties
│       │   │   ├── gradlew
│       │   │   ├── gradlew.bat
│       │   │   ├── settings.gradle
│       │   │   └── src/
│       │   │       └── main/
│       │   │           └── java/
│       │   │               └── org/
│       │   │                   └── hyperledger/
│       │   │                       └── fabric/
│       │   │                           └── example/
│       │   │                               └── AllLedgerAPI.java
│       │   ├── fabric-shim-api/
│       │   │   ├── build.gradle
│       │   │   ├── gradle/
│       │   │   │   └── wrapper/
│       │   │   │       ├── gradle-wrapper.jar
│       │   │   │       └── gradle-wrapper.properties
│       │   │   ├── gradlew
│       │   │   ├── gradlew.bat
│       │   │   ├── settings.gradle
│       │   │   └── src/
│       │   │       └── main/
│       │   │           ├── java/
│       │   │           │   └── org/
│       │   │           │       └── hyperledger/
│       │   │           │           └── fabric/
│       │   │           │               └── example/
│       │   │           │                   ├── AllAPI.java
│       │   │           │                   └── EndorsementCC.java
│       │   │           └── resources/
│       │   │               └── config.props
│       │   └── wrapper-maven/
│       │       ├── .gitignore
│       │       ├── .mvn/
│       │       │   └── wrapper/
│       │       │       ├── maven-wrapper.jar
│       │       │       └── maven-wrapper.properties
│       │       ├── mvnw
│       │       ├── mvnw.cmd
│       │       ├── pom.xml
│       │       └── src/
│       │           └── main/
│       │               ├── java/
│       │               │   └── org/
│       │               │       └── hyperledger/
│       │               │           └── fabric/
│       │               │               └── example/
│       │               │                   └── WrapperMaven.java
│       │               └── resources/
│       │                   └── config.props
│       └── test/
│           ├── java/
│           │   └── org/
│           │       └── hyperleder/
│           │           └── fabric/
│           │               └── shim/
│           │                   └── integration/
│           │                       ├── contractinstall/
│           │                       │   └── ContractInstallTest.java
│           │                       ├── ledgertests/
│           │                       │   └── LedgerIntegrationTest.java
│           │                       ├── shimtests/
│           │                       │   ├── SACCIntegrationTest.java
│           │                       │   └── SBECCIntegrationTest.java
│           │                       └── util/
│           │                           ├── Bash.java
│           │                           ├── Command.java
│           │                           ├── Docker.java
│           │                           ├── DockerCompose.java
│           │                           ├── FabricState.java
│           │                           ├── InvokeHelper.java
│           │                           └── Peer.java
│           └── resources/
│               ├── docker-compose-microfab.yaml
│               └── scripts/
│                   ├── ccutils.sh
│                   ├── collection_config.json
│                   └── mfsetup.sh
├── fabric-chaincode-shim/
│   ├── build.gradle
│   ├── javabuild.sh
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── org/
│       │   │       └── hyperledger/
│       │   │           └── fabric/
│       │   │               ├── Logger.java
│       │   │               ├── Logging.java
│       │   │               ├── contract/
│       │   │               │   ├── ClientIdentity.java
│       │   │               │   ├── Context.java
│       │   │               │   ├── ContextFactory.java
│       │   │               │   ├── ContractInterface.java
│       │   │               │   ├── ContractRouter.java
│       │   │               │   ├── ContractRuntimeException.java
│       │   │               │   ├── annotation/
│       │   │               │   │   ├── Contact.java
│       │   │               │   │   ├── Contract.java
│       │   │               │   │   ├── DataType.java
│       │   │               │   │   ├── Default.java
│       │   │               │   │   ├── Info.java
│       │   │               │   │   ├── License.java
│       │   │               │   │   ├── Property.java
│       │   │               │   │   ├── Serializer.java
│       │   │               │   │   ├── Transaction.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── execution/
│       │   │               │   │   ├── ExecutionFactory.java
│       │   │               │   │   ├── ExecutionService.java
│       │   │               │   │   ├── InvocationRequest.java
│       │   │               │   │   ├── JSONTransactionSerializer.java
│       │   │               │   │   ├── SerializerInterface.java
│       │   │               │   │   ├── impl/
│       │   │               │   │   │   ├── ContractExecutionService.java
│       │   │               │   │   │   ├── ContractInvocationRequest.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── metadata/
│       │   │               │   │   ├── MetadataBuilder.java
│       │   │               │   │   ├── TypeSchema.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── package-info.java
│       │   │               │   ├── routing/
│       │   │               │   │   ├── ContractDefinition.java
│       │   │               │   │   ├── DataTypeDefinition.java
│       │   │               │   │   ├── ParameterDefinition.java
│       │   │               │   │   ├── PropertyDefinition.java
│       │   │               │   │   ├── RoutingRegistry.java
│       │   │               │   │   ├── TransactionType.java
│       │   │               │   │   ├── TxFunction.java
│       │   │               │   │   ├── TypeRegistry.java
│       │   │               │   │   ├── impl/
│       │   │               │   │   │   ├── ContractDefinitionImpl.java
│       │   │               │   │   │   ├── DataTypeDefinitionImpl.java
│       │   │               │   │   │   ├── ParameterDefinitionImpl.java
│       │   │               │   │   │   ├── PropertyDefinitionImpl.java
│       │   │               │   │   │   ├── RoutingRegistryImpl.java
│       │   │               │   │   │   ├── SerializerRegistryImpl.java
│       │   │               │   │   │   ├── TxFunctionImpl.java
│       │   │               │   │   │   ├── TypeRegistryImpl.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   └── package-info.java
│       │   │               │   └── systemcontract/
│       │   │               │       ├── SystemContract.java
│       │   │               │       └── package-info.java
│       │   │               ├── ledger/
│       │   │               │   ├── Collection.java
│       │   │               │   ├── Ledger.java
│       │   │               │   ├── impl/
│       │   │               │   │   ├── LedgerImpl.java
│       │   │               │   │   └── package-info.java
│       │   │               │   └── package-info.java
│       │   │               ├── metrics/
│       │   │               │   ├── Metrics.java
│       │   │               │   ├── MetricsProvider.java
│       │   │               │   ├── TaskMetricsCollector.java
│       │   │               │   ├── impl/
│       │   │               │   │   ├── DefaultProvider.java
│       │   │               │   │   ├── NullProvider.java
│       │   │               │   │   └── package-info.java
│       │   │               │   └── package-info.java
│       │   │               ├── overview.html
│       │   │               ├── package-info.java
│       │   │               ├── shim/
│       │   │               │   ├── Chaincode.java
│       │   │               │   ├── ChaincodeBase.java
│       │   │               │   ├── ChaincodeException.java
│       │   │               │   ├── ChaincodeServer.java
│       │   │               │   ├── ChaincodeServerProperties.java
│       │   │               │   ├── ChaincodeStub.java
│       │   │               │   ├── ChatChaincodeWithPeer.java
│       │   │               │   ├── GrpcServer.java
│       │   │               │   ├── NettyChaincodeServer.java
│       │   │               │   ├── NettyGrpcServer.java
│       │   │               │   ├── ResponseUtils.java
│       │   │               │   ├── ext/
│       │   │               │   │   └── sbe/
│       │   │               │   │       ├── StateBasedEndorsement.java
│       │   │               │   │       ├── impl/
│       │   │               │   │       │   ├── StateBasedEndorsementFactory.java
│       │   │               │   │       │   ├── StateBasedEndorsementImpl.java
│       │   │               │   │       │   ├── StateBasedEndorsementUtils.java
│       │   │               │   │       │   └── package-info.java
│       │   │               │   │       └── package-info.java
│       │   │               │   ├── impl/
│       │   │               │   │   ├── ChaincodeInvocationTask.java
│       │   │               │   │   ├── ChaincodeMessageFactory.java
│       │   │               │   │   ├── ChaincodeSupportClient.java
│       │   │               │   │   ├── InvocationStubImpl.java
│       │   │               │   │   ├── InvocationTaskExecutor.java
│       │   │               │   │   ├── InvocationTaskManager.java
│       │   │               │   │   ├── KeyModificationImpl.java
│       │   │               │   │   ├── KeyValueImpl.java
│       │   │               │   │   ├── QueryResultsIteratorImpl.java
│       │   │               │   │   ├── QueryResultsIteratorWithMetadataImpl.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── ledger/
│       │   │               │   │   ├── CompositeKey.java
│       │   │               │   │   ├── CompositeKeyFormatException.java
│       │   │               │   │   ├── KeyModification.java
│       │   │               │   │   ├── KeyValue.java
│       │   │               │   │   ├── QueryResultsIterator.java
│       │   │               │   │   ├── QueryResultsIteratorWithMetadata.java
│       │   │               │   │   └── package-info.java
│       │   │               │   └── package-info.java
│       │   │               └── traces/
│       │   │                   ├── Traces.java
│       │   │                   ├── TracesProvider.java
│       │   │                   ├── impl/
│       │   │                   │   ├── DefaultTracesProvider.java
│       │   │                   │   ├── NullProvider.java
│       │   │                   │   ├── OpenTelemetryProperties.java
│       │   │                   │   ├── OpenTelemetryTracesProvider.java
│       │   │                   │   └── package-info.java
│       │   │                   └── package-info.java
│       │   └── resources/
│       │       ├── contract-schema.json
│       │       └── json-schema-draft-04-schema.json
│       └── test/
│           ├── java/
│           │   ├── ChaincodeWithoutPackageTest.java
│           │   ├── EmptyChaincodeWithoutPackage.java
│           │   ├── contract/
│           │   │   ├── Greeting.java
│           │   │   └── SampleContract.java
│           │   └── org/
│           │       └── hyperledger/
│           │           └── fabric/
│           │               ├── LoggerTest.java
│           │               ├── LoggingTest.java
│           │               ├── TestUtil.java
│           │               ├── contract/
│           │               │   ├── AllTypesAsset.java
│           │               │   ├── ChaincodeStubNaiveImpl.java
│           │               │   ├── ClientIdentityTest.java
│           │               │   ├── ContextFactoryTest.java
│           │               │   ├── ContextTest.java
│           │               │   ├── ContractInterfaceTest.java
│           │               │   ├── ContractRouterTest.java
│           │               │   ├── MyType.java
│           │               │   ├── MyType2.java
│           │               │   ├── TransactionExceptionTest.java
│           │               │   ├── execution/
│           │               │   │   ├── ContractExecutionServiceTest.java
│           │               │   │   └── JSONTransactionSerializerTest.java
│           │               │   ├── metadata/
│           │               │   │   ├── MetadataBuilderTest.java
│           │               │   │   └── TypeSchemaTest.java
│           │               │   ├── routing/
│           │               │   │   ├── ContractDefinitionTest.java
│           │               │   │   ├── DataTypeDefinitionTest.java
│           │               │   │   ├── ParameterDefinitionTest.java
│           │               │   │   ├── PropertyDefinitionTest.java
│           │               │   │   ├── TxFunctionTest.java
│           │               │   │   └── TypeRegistryTest.java
│           │               │   └── simplepath/
│           │               │       └── ContractSimplePathTest.java
│           │               ├── ledger/
│           │               │   └── LedgerTest.java
│           │               ├── metrics/
│           │               │   ├── MetricsTest.java
│           │               │   └── impl/
│           │               │       └── DefaultProviderTest.java
│           │               ├── shim/
│           │               │   ├── ChaincodeBaseTest.java
│           │               │   ├── ChaincodeServerImplTest.java
│           │               │   ├── ChaincodeStubTest.java
│           │               │   ├── ChaincodeTest.java
│           │               │   ├── ChatChaincodeWithPeerTest.java
│           │               │   ├── NettyGrpcServerTest.java
│           │               │   ├── chaincode/
│           │               │   │   └── EmptyChaincode.java
│           │               │   ├── ext/
│           │               │   │   └── sbe/
│           │               │   │       ├── StateBasedEndorsementTest.java
│           │               │   │       └── impl/
│           │               │   │           ├── StateBasedEndorsementFactoryTest.java
│           │               │   │           └── StateBasedEndorsementImplTest.java
│           │               │   ├── fvt/
│           │               │   │   └── ChaincodeFVTest.java
│           │               │   ├── impl/
│           │               │   │   ├── ChaincodeMessageFactoryTest.java
│           │               │   │   ├── ChaincodeSupportClientTest.java
│           │               │   │   ├── InnvocationTaskManagerTest.java
│           │               │   │   ├── InvocationStubImplTest.java
│           │               │   │   ├── InvocationTaskManagerTest.java
│           │               │   │   ├── KeyModificationImplTest.java
│           │               │   │   ├── KeyValueImplTest.java
│           │               │   │   └── QueryResultsIteratorWithMetadataImplTest.java
│           │               │   ├── ledger/
│           │               │   │   └── CompositeKeyTest.java
│           │               │   ├── mock/
│           │               │   │   └── peer/
│           │               │   │       ├── ChaincodeMockPeer.java
│           │               │   │       ├── CompleteStep.java
│           │               │   │       ├── DelValueStep.java
│           │               │   │       ├── ErrorResponseStep.java
│           │               │   │       ├── GetHistoryForKeyStep.java
│           │               │   │       ├── GetQueryResultStep.java
│           │               │   │       ├── GetStateByRangeStep.java
│           │               │   │       ├── GetStateMetadata.java
│           │               │   │       ├── GetValueStep.java
│           │               │   │       ├── InvokeChaincodeStep.java
│           │               │   │       ├── PurgeValueStep.java
│           │               │   │       ├── PutStateMetadata.java
│           │               │   │       ├── PutValueStep.java
│           │               │   │       ├── QueryCloseStep.java
│           │               │   │       ├── QueryNextStep.java
│           │               │   │       ├── QueryResultStep.java
│           │               │   │       ├── RegisterStep.java
│           │               │   │       └── ScenarioStep.java
│           │               │   └── utils/
│           │               │       ├── MessageUtil.java
│           │               │       └── TimeoutUtil.java
│           │               └── traces/
│           │                   ├── TracesTest.java
│           │                   └── impl/
│           │                       ├── DefaultProviderTest.java
│           │                       ├── OpenTelemetryPropertiesTest.java
│           │                       ├── OpenTelemetryTracesProviderTest.java
│           │                       └── TestSpanExporterProvider.java
│           └── resources/
│               ├── META-INF/
│               │   └── services/
│               │       └── io.opentelemetry.sdk.autoconfigure.spi.traces.ConfigurableSpanExporterProvider
│               ├── ca.crt
│               ├── client.crt
│               ├── client.crt.enc
│               ├── client.key
│               ├── client.key.enc
│               └── client.key.password-protected
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── pmd-ruleset.xml
├── release_notes/
│   ├── v1.3.0.txt
│   ├── v1.4.0.txt
│   ├── v2.0.0-alpha.txt
│   ├── v2.0.0-beta.txt
│   ├── v2.0.0.txt
│   ├── v2.0.1.txt
│   ├── v2.1.0.txt
│   ├── v2.1.1.txt
│   ├── v2.2.0.txt
│   ├── v2.2.1.txt
│   ├── v2.3.0.txt
│   ├── v2.3.1.txt
│   ├── v2.4.0-beta.txt
│   ├── v2.4.0.txt
│   ├── v2.4.1.txt
│   └── v2.5.0.txt
└── settings.gradle
Download .txt
SYMBOL INDEX (1482 symbols across 185 files)

FILE: examples/fabric-contract-example-as-service/src/main/java/org/example/contract/MyAsset.java
  class MyAsset (line 11) | @DataType()
    method MyAsset (line 17) | public MyAsset() {
    method getValue (line 20) | public String getValue() {
    method setValue (line 24) | public void setValue(String value) {
    method toJSONString (line 28) | public String toJSONString() {
    method fromJSONString (line 32) | public static MyAsset fromJSONString(String json) {

FILE: examples/fabric-contract-example-as-service/src/main/java/org/example/contract/MyAssetContract.java
  class MyAssetContract (line 14) | @Contract
    method MyAssetContract (line 18) | public MyAssetContract() {
    method myAssetExists (line 22) | @Transaction()
    method createMyAsset (line 28) | @Transaction()
    method readMyAsset (line 39) | @Transaction()
    method updateMyAsset (line 50) | @Transaction()
    method deleteMyAsset (line 62) | @Transaction()

FILE: examples/fabric-contract-example-as-service/src/test/java/org/example/MyAssetContractTest.java
  class MyAssetContractTest (line 26) | public final class MyAssetContractTest {
    class AssetExists (line 28) | @Nested
      method noProperAsset (line 31) | @Test
      method assetExists (line 45) | @Test
      method noKey (line 60) | @Test
    class AssetCreates (line 76) | @Nested
      method newAssetCreate (line 79) | @Test
      method alreadyExists (line 93) | @Test
    method assetRead (line 112) | @Test
    class AssetUpdates (line 129) | @Nested
      method updateExisting (line 132) | @Test
      method updateMissing (line 146) | @Test
    method assetDelete (line 164) | @Test
    method test (line 179) | @Test

FILE: examples/fabric-contract-example-gradle/src/main/java/org/example/MyAsset.java
  class MyAsset (line 12) | @DataType()
    method MyAsset (line 18) | public MyAsset(){
    method getValue (line 21) | public String getValue() {
    method setValue (line 25) | public void setValue(String value) {
    method toJSONString (line 29) | public String toJSONString() {
    method fromJSONString (line 33) | public static MyAsset fromJSONString(String json) {

FILE: examples/fabric-contract-example-gradle/src/main/java/org/example/MyAssetContract.java
  class MyAssetContract (line 17) | @Contract(name = "MyAssetContract",
    method MyAssetContract (line 29) | public  MyAssetContract() {
    method myAssetExists (line 32) | @Transaction()
    method createMyAsset (line 38) | @Transaction()
    method readMyAsset (line 49) | @Transaction()
    method updateMyAsset (line 60) | @Transaction()
    method deleteMyAsset (line 72) | @Transaction()

FILE: examples/fabric-contract-example-gradle/src/test/java/org/example/MyAssetContractTest.java
  class MyAssetContractTest (line 23) | public final class MyAssetContractTest {
    class AssetExists (line 25) | @Nested
      method noProperAsset (line 27) | @Test
      method assetExists (line 41) | @Test
      method noKey (line 56) | @Test
    class AssetCreates (line 72) | @Nested
      method newAssetCreate (line 75) | @Test
      method alreadyExists (line 89) | @Test
    method assetRead (line 108) | @Test
    class AssetUpdates (line 125) | @Nested
      method updateExisting (line 127) | @Test
      method updateMissing (line 141) | @Test
    method assetDelete (line 159) | @Test

FILE: examples/fabric-contract-example-maven/src/main/java/org/example/MyAsset.java
  class MyAsset (line 12) | @DataType()
    method MyAsset (line 18) | public MyAsset(){
    method getValue (line 21) | public String getValue() {
    method setValue (line 25) | public void setValue(String value) {
    method toJSONString (line 29) | public String toJSONString() {
    method fromJSONString (line 33) | public static MyAsset fromJSONString(String json) {

FILE: examples/fabric-contract-example-maven/src/main/java/org/example/MyAssetContract.java
  class MyAssetContract (line 17) | @Contract(name = "MyAssetContract",
    method MyAssetContract (line 29) | public  MyAssetContract() {
    method myAssetExists (line 32) | @Transaction()
    method createMyAsset (line 38) | @Transaction()
    method readMyAsset (line 49) | @Transaction()
    method updateMyAsset (line 60) | @Transaction()
    method deleteMyAsset (line 72) | @Transaction()

FILE: examples/fabric-contract-example-maven/src/test/java/org/example/MyAssetContractTest.java
  class MyAssetContractTest (line 23) | public final class MyAssetContractTest {
    class AssetExists (line 25) | @Nested
      method noProperAsset (line 27) | @Test
      method assetExists (line 41) | @Test
      method noKey (line 56) | @Test
    class AssetCreates (line 72) | @Nested
      method newAssetCreate (line 75) | @Test
      method alreadyExists (line 89) | @Test
    method assetRead (line 108) | @Test
    class AssetUpdates (line 125) | @Nested
      method updateExisting (line 127) | @Test
      method updateMissing (line 141) | @Test
    method assetDelete (line 159) | @Test

FILE: examples/ledger-api/src/main/java/org/example/LedgerAPIContract.java
  class LedgerAPIContract (line 17) | @Contract(name = "LedgerAPI",
    method LedgerAPIContract (line 30) | public  LedgerAPIContract() {
    method assetExistsInWorldState (line 38) | @Transaction()
    method assetExistsInPrivateData (line 50) | @Transaction()
    method assetExistsInOrganizationPrivateData (line 61) | @Transaction()

FILE: examples/ledger-api/src/main/java/org/example/MyAsset.java
  class MyAsset (line 12) | @DataType()
    method MyAsset (line 18) | public MyAsset(){
    method getValue (line 21) | public String getValue() {
    method setValue (line 25) | public void setValue(String value) {
    method toJSONString (line 29) | public String toJSONString() {
    method fromJSONString (line 33) | public static MyAsset fromJSONString(String json) {

FILE: fabric-chaincode-integration-test/src/contracts/bare-gradle/src/main/java/org/hyperledger/fabric/example/BareGradle.java
  class BareGradle (line 15) | @Contract(name = "BareGradle",
    method BareGradle (line 27) | public BareGradle() {
    method whoami (line 31) | @Transaction()

FILE: fabric-chaincode-integration-test/src/contracts/bare-maven/src/main/java/org/hyperledger/fabric/example/BareMaven.java
  class BareMaven (line 15) | @Contract(name = "BareMaven",
    method BareMaven (line 27) | public BareMaven() {
    method whoami (line 31) | @Transaction()

FILE: fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/src/main/java/org/hyperledger/fabric/example/AllLedgerAPI.java
  class AllLedgerAPI (line 16) | @Contract(name = "AllLedgerAPI",
    method AllLedgerAPI (line 29) | public AllLedgerAPI() {
    method accessLedgers (line 33) | @Transaction()

FILE: fabric-chaincode-integration-test/src/contracts/fabric-shim-api/src/main/java/org/hyperledger/fabric/example/AllAPI.java
  class AllAPI (line 20) | @Contract(name = "AllAPI",
    method AllAPI (line 32) | public AllAPI() {
    method putBulkStates (line 36) | @Transaction()
    method putState (line 46) | @Transaction()
    method putStateComposite (line 52) | @Transaction()
    method getState (line 58) | @Transaction()
    method getByRange (line 69) | @Transaction()
    method getByRangePaged (line 85) | @Transaction()
    method getMetricsProviderName (line 104) | @Transaction()

FILE: fabric-chaincode-integration-test/src/contracts/fabric-shim-api/src/main/java/org/hyperledger/fabric/example/EndorsementCC.java
  class EndorsementCC (line 18) | @Contract()
    method setup (line 23) | public void setup(Context ctx) {
    method addorgs (line 29) | @Transaction()
    method delorgs (line 55) | @Transaction()
    method listorgs (line 84) | @Transaction()
    method delEP (line 109) | @Transaction()
    method setval (line 123) | @Transaction()
    method getval (line 135) | @Transaction()
    method deleteval (line 152) | @Transaction()
    method recordExists (line 165) | @Transaction(intent = Transaction.TYPE.EVALUATE)

FILE: fabric-chaincode-integration-test/src/contracts/wrapper-maven/src/main/java/org/hyperledger/fabric/example/WrapperMaven.java
  class WrapperMaven (line 15) | @Contract(name = "WrapperMaven",
    method WrapperMaven (line 27) | public WrapperMaven() {
    method whoami (line 31) | @Transaction()

FILE: fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/contractinstall/ContractInstallTest.java
  class ContractInstallTest (line 17) | public class ContractInstallTest {
    method setUp (line 19) | @BeforeAll
    method testInstall (line 24) | @Test

FILE: fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/ledgertests/LedgerIntegrationTest.java
  class LedgerIntegrationTest (line 17) | public class LedgerIntegrationTest {
    method setUp (line 19) | @BeforeAll
    method testLedgers (line 25) | @Test

FILE: fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/shimtests/SACCIntegrationTest.java
  class SACCIntegrationTest (line 17) | public class SACCIntegrationTest {
    method setUp (line 19) | @BeforeAll
    method testLedger (line 24) | @Test

FILE: fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/shimtests/SBECCIntegrationTest.java
  class SBECCIntegrationTest (line 17) | public class SBECCIntegrationTest {
    method setUp (line 19) | @BeforeAll
    method runSBE_pub_setget (line 24) | @Test
    method runSBE_priv (line 87) | @Test

FILE: fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Bash.java
  class Bash (line 14) | public final class Bash extends Command {
    method newBuilder (line 16) | public static BashBuilder newBuilder() {
    class BashBuilder (line 20) | public static class BashBuilder extends Command.Builder<Bash> {
      method duplicate (line 30) | public BashBuilder duplicate() {
      method cmd (line 40) | public BashBuilder cmd(String cmd) {
      method cmdargs (line 45) | public BashBuilder cmdargs(String argsArray[]) {
      method build (line 50) | public Bash build(Map<String, String> additionalEnv) {
      method build (line 58) | public Bash build() {
    method Bash (line 68) | Bash(List<String> cmd) {
    method Bash (line 72) | Bash(List<String> cmd, Map<String, String> env) {

FILE: fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Command.java
  class Command (line 23) | public class Command {
    method Command (line 28) | Command(List<String> cmd, Map<String, String> additionalEnv) {
    method Command (line 33) | Command(List<String> cmd) {
    class Result (line 37) | public static final class Result {
    method run (line 44) | public Result run() {
    method run (line 53) | public Result run(boolean quiet) {
    method readOutStream (line 99) | CompletableFuture<ArrayList<String>> readOutStream(InputStream is, Pri...
    method toString (line 116) | public String toString() {
    class Builder (line 120) | public static class Builder<T extends Command> implements Cloneable {
      method duplicate (line 121) | @SuppressWarnings("unchecked")

FILE: fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Docker.java
  class Docker (line 12) | public final class Docker extends Command {
    method newBuilder (line 14) | public static DockerBuilder newBuilder() {
    class DockerBuilder (line 18) | public static final class DockerBuilder implements Cloneable {
      method duplicate (line 24) | public DockerBuilder duplicate() {
      method script (line 33) | public DockerBuilder script(String script) {
      method channel (line 38) | public DockerBuilder channel(String channel) {
      method container (line 43) | public DockerBuilder container(String container) {
      method exec (line 48) | public DockerBuilder exec() {
      method build (line 53) | public Docker build() {
    method Docker (line 80) | Docker(List<String> cmd) {

FILE: fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/DockerCompose.java
  class DockerCompose (line 12) | public final class DockerCompose extends Command {
    method newBuilder (line 14) | public static DockerComposeBuilder newBuilder() {
    class DockerComposeBuilder (line 18) | public static final class DockerComposeBuilder extends Command.Builder...
      method file (line 24) | public DockerComposeBuilder file(String composeFile) {
      method duplicate (line 29) | public DockerComposeBuilder duplicate() {
      method up (line 33) | public DockerComposeBuilder up() {
      method detach (line 38) | public DockerComposeBuilder detach() {
      method down (line 43) | public DockerComposeBuilder down() {
      method build (line 48) | public DockerCompose build() {
    method DockerCompose (line 65) | DockerCompose(List<String> cmd) {

FILE: fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/FabricState.java
  class FabricState (line 14) | public final class FabricState {
    method getState (line 20) | public static FabricState getState() {
    method start (line 24) | public synchronized void start() {
    method orgEnv (line 35) | public Map<String, String> orgEnv(String org) {

FILE: fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/InvokeHelper.java
  class InvokeHelper (line 9) | public class InvokeHelper {
    method newHelper (line 14) | public static InvokeHelper newHelper(String ccname, String channel) {
    method invoke (line 24) | public String invoke(String org, String... args) {

FILE: fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Peer.java
  class Peer (line 16) | public final class Peer extends Command {
    method newBuilder (line 18) | public static PeerBuilder newBuilder() {
    class PeerBuilder (line 22) | public static final class PeerBuilder extends Command.Builder<Peer> {
      method duplicate (line 32) | public PeerBuilder duplicate() {
      method tlsArgs (line 42) | public PeerBuilder tlsArgs(String tlsArgs) {
      method orderer (line 47) | public PeerBuilder orderer(String orderer) {
      method channel (line 52) | public PeerBuilder channel(String channel) {
      method ccname (line 57) | public PeerBuilder ccname(String ccname) {
      method evaluate (line 62) | public PeerBuilder evaluate() {
      method invoke (line 67) | public PeerBuilder invoke() {
      method argsTx (line 72) | public PeerBuilder argsTx(List<String> args) {
      method argsTx (line 77) | public PeerBuilder argsTx(String[] argsArray) {
      method transientData (line 82) | public PeerBuilder transientData(Map<String, String> transientData) {
      method waitForEvent (line 87) | public PeerBuilder waitForEvent(int seconds) {
      method waitForEvent (line 92) | public PeerBuilder waitForEvent() {
      method transientToString (line 97) | private String transientToString() {
      method argsToString (line 102) | private String argsToString() {
      method build (line 109) | public Peer build(Map<String, String> additionalEnv) {
    method Peer (line 160) | Peer(List<String> cmd, Map<String, String> additionalEnv) {

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/Logger.java
  class Logger (line 15) | public class Logger extends java.util.logging.Logger {
    method Logger (line 24) | protected Logger(final String name) {
    method getLogger (line 32) | public static Logger getLogger(final String name) {
    method debug (line 39) | public void debug(final Supplier<String> msgSupplier) {
    method debug (line 44) | public void debug(final String msg) {
    method getLogger (line 52) | public static Logger getLogger(final Class<?> class1) {
    method error (line 60) | public void error(final String message) {
    method error (line 65) | public void error(final Supplier<String> msgSupplier) {
    method formatError (line 73) | public String formatError(final Throwable throwable) {

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/Logging.java
  class Logging (line 28) | public final class Logging {
    method Logging (line 34) | private Logging() {}
    method formatError (line 42) | public static String formatError(final Throwable throwable) {
    method setLogLevel (line 65) | public static void setLogLevel(final String newLevel) {
    method mapLevel (line 83) | private static Level mapLevel(final String level) {

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/ClientIdentity.java
  class ClientIdentity (line 32) | public final class ClientIdentity {
    method ClientIdentity (line 50) | public ClientIdentity(final ChaincodeStub stub) throws CertificateExce...
    method getId (line 81) | public String getId() {
    method getMSPID (line 90) | public String getMSPID() {
    method parseAttributes (line 102) | private Map<String, String> parseAttributes(final byte[] extensionValu...
    method getAttributeValue (line 145) | public String getAttributeValue(final String attrName) {
    method assertAttributeValue (line 159) | public boolean assertAttributeValue(final String attrName, final Strin...
    method getX509Certificate (line 170) | public X509Certificate getX509Certificate() {

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/Context.java
  class Context (line 31) | public class Context {
    method Context (line 43) | public Context(final ChaincodeStub stub) {
    method getStub (line 53) | public ChaincodeStub getStub() {
    method getClientIdentity (line 58) | public ClientIdentity getClientIdentity() {

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/ContextFactory.java
  class ContextFactory (line 12) | public final class ContextFactory {
    method getInstance (line 16) | public static ContextFactory getInstance() {
    method createContext (line 24) | public Context createContext(final ChaincodeStub stub) {

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/ContractInterface.java
  type ContractInterface (line 44) | public interface ContractInterface {
    method createContext (line 54) | default Context createContext(final ChaincodeStub stub) {
    method unknownTransaction (line 66) | default void unknownTransaction(final Context ctx) {
    method beforeTransaction (line 78) | default void beforeTransaction(final Context ctx) {
    method afterTransaction (line 91) | default void afterTransaction(final Context ctx, final Object result) {

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/ContractRouter.java
  class ContractRouter (line 37) | public final class ContractRouter extends ChaincodeBase {
    method ContractRouter (line 55) | public ContractRouter(final String[] args) {
    method findAllContracts (line 84) | void findAllContracts() {
    method startRouting (line 95) | @SuppressWarnings("PMD.AvoidCatchingGenericException")
    method processRequest (line 105) | @SuppressWarnings("PMD.AvoidCatchingGenericException")
    method invoke (line 123) | @Override
    method init (line 128) | @Override
    method getRouting (line 139) | TxFunction getRouting(final InvocationRequest request) {
    method main (line 155) | @SuppressWarnings("PMD.SignatureDeclareThrowsException")
    method getTypeRegistry (line 179) | TypeRegistry getTypeRegistry() {
    method getRoutingRegistry (line 183) | RoutingRegistry getRoutingRegistry() {
    method startRouterWithChaincodeServer (line 192) | public void startRouterWithChaincodeServer(final ChaincodeServer chain...

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/ContractRuntimeException.java
  class ContractRuntimeException (line 16) | public class ContractRuntimeException extends ChaincodeException {
    method ContractRuntimeException (line 21) | public ContractRuntimeException(final String string) {
    method ContractRuntimeException (line 29) | public ContractRuntimeException(final String string, final Throwable c...
    method ContractRuntimeException (line 34) | public ContractRuntimeException(final Throwable cause) {

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Serializer.java
  type TARGET (line 24) | enum TARGET {

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Transaction.java
  type TYPE (line 31) | enum TYPE {

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/ExecutionFactory.java
  class ExecutionFactory (line 14) | public class ExecutionFactory {
    method getInstance (line 18) | public static ExecutionFactory getInstance() {
    method createRequest (line 26) | public InvocationRequest createRequest(final ChaincodeStub context) {
    method createExecutionService (line 34) | public ExecutionService createExecutionService(final SerializerRegistr...

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/ExecutionService.java
  type ExecutionService (line 18) | @FunctionalInterface
    method executeRequest (line 27) | Chaincode.Response executeRequest(TxFunction txFn, InvocationRequest r...

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/InvocationRequest.java
  type InvocationRequest (line 16) | public interface InvocationRequest {
    method getNamespace (line 21) | String getNamespace();
    method getMethod (line 24) | String getMethod();
    method getArgs (line 27) | List<byte[]> getArgs();
    method getRequestName (line 30) | String getRequestName();

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/JSONTransactionSerializer.java
  class JSONTransactionSerializer (line 28) | @Serializer()
    method toBuffer (line 46) | @Override
    method normalizeArray (line 109) | @SuppressWarnings("PMD.AvoidInstantiatingObjectsInLoops")
    method fromBuffer (line 153) | @Override
    method mapPrimitive (line 172) | private Class<?> mapPrimitive(final Class<?> primitive) {
    method mapArrayPrimitive (line 180) | private Class<?> mapArrayPrimitive(final Class<?> primitive) {
    method mapBasicPrimitive (line 203) | private Class<?> mapBasicPrimitive(final Class<?> primitive) {
    method convert (line 227) | private Object convert(final String stringData, final TypeSchema ts)
    method convertArray (line 258) | private Object convertArray(final String stringData, final TypeSchema ts)
    method convertNumber (line 274) | private Object convertNumber(final String stringData, final TypeSchema...
    method convertInteger (line 282) | private Object convertInteger(final String stringData, final TypeSchem...
    method convertString (line 297) | private Object convertString(final String stringData, final TypeSchema...
    method createComponentInstance (line 313) | @SuppressWarnings("PMD.AvoidAccessibilityAlteration")

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/SerializerInterface.java
  type SerializerInterface (line 20) | public interface SerializerInterface {
    method toBuffer (line 29) | byte[] toBuffer(Object value, TypeSchema ts);
    method fromBuffer (line 38) | Object fromBuffer(byte[] buffer, TypeSchema ts);

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/impl/ContractExecutionService.java
  class ContractExecutionService (line 29) | public class ContractExecutionService implements ExecutionService {
    method ContractExecutionService (line 36) | public ContractExecutionService(final SerializerRegistryImpl serialize...
    method executeRequest (line 41) | @Override
    method convertReturn (line 81) | private byte[] convertReturn(final Object obj, final TxFunction txFn) {
    method convertArgs (line 88) | private List<Object> convertArgs(final List<byte[]> stubArgs, final Tx...

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/impl/ContractInvocationRequest.java
  class ContractInvocationRequest (line 17) | public final class ContractInvocationRequest implements InvocationRequest {
    method ContractInvocationRequest (line 28) | @SuppressWarnings("PMD.AvoidLiteralsInIfCondition")
    method getNamespace (line 54) | @Override
    method getMethod (line 60) | @Override
    method getArgs (line 66) | @Override
    method getRequestName (line 72) | @Override
    method toString (line 78) | @Override

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/metadata/MetadataBuilder.java
  class MetadataBuilder (line 44) | @SuppressWarnings("PMD.AvoidDuplicateLiterals")
    class MetadataMap (line 59) | static final class MetadataMap<K, V> extends HashMap<K, V> {
      method putIfNotNull (line 62) | V putIfNotNull(final K key, final V value) {
    method MetadataBuilder (line 72) | private MetadataBuilder() {}
    method validate (line 79) | public static void validate() {
    method initialize (line 112) | public static void initialize(final RoutingRegistry registry, final Ty...
    method addComponent (line 131) | public static void addComponent(final DataTypeDefinition datatype) {
    method addContract (line 152) | @SuppressWarnings("PMD.LooseCoupling")
    method addTransaction (line 198) | public static void addTransaction(final TxFunction txFunction, final S...
    method getMetadata (line 238) | public static String getMetadata() {
    method debugString (line 247) | public static String debugString() {
    method metadata (line 256) | private static JSONObject metadata() {
    method getComponents (line 268) | public static Map<?, ?> getComponents() {

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/metadata/TypeSchema.java
  class TypeSchema (line 28) | @SuppressWarnings("PMD.GodClass")
    method putInternal (line 39) | private Object putInternal(final String key, final Object value) {
    method putIfNotNull (line 47) | String putIfNotNull(final String key, final String value) {
    method putIfNotNull (line 51) | String[] putIfNotNull(final String key, final String[] value) {
    method putIfNotNull (line 55) | TypeSchema putIfNotNull(final String key, final TypeSchema value) {
    method putIfNotNull (line 59) | TypeSchema[] putIfNotNull(final String key, final TypeSchema[] value) {
    method getType (line 64) | public String getType() {
    method getItems (line 73) | public TypeSchema getItems() {
    method getRef (line 82) | public String getRef() {
    method getFormat (line 91) | public String getFormat() {
    method getTypeClass (line 103) | public Class<?> getTypeClass(final TypeRegistry typeRegistry) {
    method getArrayClass (line 124) | private Class<?> getArrayClass(final TypeRegistry typeRegistry) {
    method getNumberClass (line 130) | private Class<?> getNumberClass() {
    method getIntegerClass (line 141) | private Class<?> getIntegerClass() {
    method getStringClass (line 157) | @SuppressWarnings("PMD.AvoidLiteralsInIfCondition")
    method getObjectClass (line 165) | private Class<?> getObjectClass(final TypeRegistry typeRegistry) {
    method typeConvert (line 177) | @SuppressWarnings({"PMD.ReturnEmptyCollectionRatherThanNull", "PMD.Avo...
    method updateSchemaForClass (line 209) | @SuppressWarnings("PMD.CyclomaticComplexity")
    method validate (line 264) | public void validate(final JSONObject obj) {

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/ContractDefinition.java
  type ContractDefinition (line 26) | public interface ContractDefinition {
    method getName (line 29) | String getName();
    method getTxFunctions (line 32) | Collection<TxFunction> getTxFunctions();
    method getContractImpl (line 35) | Class<? extends ContractInterface> getContractImpl();
    method addTxFunction (line 41) | TxFunction addTxFunction(Method m);
    method isDefault (line 44) | boolean isDefault();
    method getTxFunction (line 50) | TxFunction getTxFunction(String method);
    method hasTxFunction (line 56) | boolean hasTxFunction(String method);
    method getUnknownRoute (line 59) | TxFunction getUnknownRoute();
    method getAnnotation (line 62) | Contract getAnnotation();

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/DataTypeDefinition.java
  type DataTypeDefinition (line 11) | public interface DataTypeDefinition {
    method getName (line 14) | String getName();
    method getProperties (line 17) | Map<String, PropertyDefinition> getProperties();
    method getSimpleName (line 20) | String getSimpleName();
    method getTypeClass (line 23) | Class<?> getTypeClass();
    method getSchema (line 26) | TypeSchema getSchema();

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/ParameterDefinition.java
  type ParameterDefinition (line 11) | public interface ParameterDefinition {
    method getTypeClass (line 14) | Class<?> getTypeClass();
    method getSchema (line 17) | TypeSchema getSchema();
    method getParameter (line 20) | Parameter getParameter();
    method getName (line 23) | String getName();

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/PropertyDefinition.java
  type PropertyDefinition (line 11) | public interface PropertyDefinition {
    method getTypeClass (line 14) | Class<?> getTypeClass();
    method getSchema (line 17) | TypeSchema getSchema();
    method getField (line 20) | Field getField();
    method getName (line 23) | String getName();

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/RoutingRegistry.java
  type RoutingRegistry (line 12) | public interface RoutingRegistry {
    method addNewContract (line 20) | ContractDefinition addNewContract(Class<ContractInterface> clz);
    method containsRoute (line 28) | boolean containsRoute(InvocationRequest request);
    method getRoute (line 36) | TxFunction.Routing getRoute(InvocationRequest request);
    method getTxFn (line 44) | TxFunction getTxFn(InvocationRequest request);
    method getContract (line 52) | ContractDefinition getContract(String name);
    method getAllDefinitions (line 59) | Collection<ContractDefinition> getAllDefinitions();
    method findAndSetContracts (line 66) | void findAndSetContracts(TypeRegistry typeRegistry);

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/TransactionType.java
  type TransactionType (line 8) | public enum TransactionType {

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/TxFunction.java
  type TxFunction (line 14) | public interface TxFunction {
    type Routing (line 16) | interface Routing {
      method getMethod (line 22) | Method getMethod();
      method getContractClass (line 29) | Class<? extends ContractInterface> getContractClass();
      method getContractInstance (line 40) | ContractInterface getContractInstance()
      method getSerializerName (line 48) | String getSerializerName();
    method isUnknownTx (line 52) | boolean isUnknownTx();
    method setUnknownTx (line 55) | void setUnknownTx(boolean unknown);
    method getName (line 58) | String getName();
    method getRouting (line 61) | Routing getRouting();
    method getReturnType (line 64) | Class<?> getReturnType();
    method getParameters (line 67) | java.lang.reflect.Parameter[] getParameters();
    method getType (line 70) | TransactionType getType();
    method setReturnSchema (line 73) | void setReturnSchema(TypeSchema returnSchema);
    method getReturnSchema (line 76) | TypeSchema getReturnSchema();
    method setParameterDefinitions (line 79) | void setParameterDefinitions(List<ParameterDefinition> list);
    method getParamsList (line 82) | List<ParameterDefinition> getParamsList();

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/TypeRegistry.java
  type TypeRegistry (line 12) | public interface TypeRegistry {
    method getRegistry (line 15) | static TypeRegistry getRegistry() {
    method addDataType (line 20) | void addDataType(DataTypeDefinition dtd);
    method addDataType (line 23) | void addDataType(Class<?> cl);
    method getDataType (line 29) | DataTypeDefinition getDataType(String name);
    method getDataType (line 35) | DataTypeDefinition getDataType(TypeSchema schema);
    method getAllDataTypes (line 38) | Collection<DataTypeDefinition> getAllDataTypes();

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/ContractDefinitionImpl.java
  class ContractDefinitionImpl (line 26) | public final class ContractDefinitionImpl implements ContractDefinition {
    method ContractDefinitionImpl (line 37) | public ContractDefinitionImpl(final Class<? extends ContractInterface>...
    method getName (line 69) | @Override
    method getTxFunctions (line 74) | @Override
    method getContractImpl (line 79) | @Override
    method addTxFunction (line 84) | @Override
    method isDefault (line 98) | @Override
    method getTxFunction (line 103) | @Override
    method hasTxFunction (line 108) | @Override
    method getUnknownRoute (line 113) | @Override
    method getAnnotation (line 118) | @Override
    method toString (line 123) | @Override

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/DataTypeDefinitionImpl.java
  class DataTypeDefinitionImpl (line 18) | public final class DataTypeDefinitionImpl implements DataTypeDefinition {
    method DataTypeDefinitionImpl (line 26) | @SuppressWarnings("PMD.AvoidInstantiatingObjectsInLoops")
    method getTypeClass (line 71) | @Override
    method getSchema (line 76) | @Override
    method getName (line 86) | @Override
    method getProperties (line 97) | @Override
    method getSimpleName (line 108) | @Override
    method toString (line 113) | @Override

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/ParameterDefinitionImpl.java
  class ParameterDefinitionImpl (line 13) | public final class ParameterDefinitionImpl implements ParameterDefinition {
    method ParameterDefinitionImpl (line 26) | public ParameterDefinitionImpl(
    method getTypeClass (line 34) | @Override
    method getSchema (line 39) | @Override
    method getParameter (line 44) | @Override
    method getName (line 49) | @Override
    method toString (line 54) | @Override

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/PropertyDefinitionImpl.java
  class PropertyDefinitionImpl (line 13) | public final class PropertyDefinitionImpl implements PropertyDefinition {
    method PropertyDefinitionImpl (line 26) | public PropertyDefinitionImpl(final String name, final Class<?> typeCl...
    method getTypeClass (line 33) | @Override
    method getSchema (line 38) | @Override
    method getField (line 43) | @Override
    method getName (line 48) | @Override

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/RoutingRegistryImpl.java
  class RoutingRegistryImpl (line 38) | public final class RoutingRegistryImpl implements RoutingRegistry {
    method addNewContract (line 50) | @Override
    method containsRoute (line 73) | @Override
    method getRoute (line 91) | @Override
    method getTxFn (line 97) | @Override
    method getContract (line 109) | @Override
    method getAllDefinitions (line 126) | @Override
    method findAndSetContracts (line 137) | @Override
    method addContracts (line 195) | private void addContracts(final List<Class<ContractInterface>> contrac...

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/SerializerRegistryImpl.java
  class SerializerRegistryImpl (line 25) | public class SerializerRegistryImpl {
    method getSerializer (line 40) | public SerializerInterface getSerializer(final String name, final Seri...
    method add (line 45) | private void add(final String name, final Serializer.TARGET target, fi...
    method findAndSetContents (line 68) | public void findAndSetContents() throws InstantiationException, Illega...

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/TxFunctionImpl.java
  class TxFunctionImpl (line 26) | public final class TxFunctionImpl implements TxFunction {
    class RoutingImpl (line 37) | public static final class RoutingImpl implements Routing {
      method RoutingImpl (line 47) | public RoutingImpl(final Method method, final ContractDefinition con...
      method getMethod (line 53) | @Override
      method getContractClass (line 58) | @Override
      method getContractInstance (line 63) | @Override
      method toString (line 70) | @Override
      method getSerializerName (line 75) | @Override
    method TxFunctionImpl (line 87) | public TxFunctionImpl(final Method m, final ContractDefinition contrac...
    method buildParameters (line 119) | private List<ParameterDefinition> buildParameters(final Method m) {
    method newParameterDefinition (line 141) | private static ParameterDefinitionImpl newParameterDefinition(final Pa...
    method getName (line 158) | @Override
    method getRouting (line 163) | @Override
    method getReturnType (line 168) | @Override
    method getParameters (line 173) | @Override
    method getType (line 178) | @Override
    method toString (line 183) | @Override
    method setReturnSchema (line 188) | @Override
    method getParamsList (line 193) | @Override
    method setParamsList (line 199) | public void setParamsList(final List<ParameterDefinition> paramsList) {
    method getReturnSchema (line 203) | @Override
    method setParameterDefinitions (line 208) | @Override
    method isUnknownTx (line 213) | @Override
    method setUnknownTx (line 218) | @Override

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/TypeRegistryImpl.java
  class TypeRegistryImpl (line 16) | public final class TypeRegistryImpl implements TypeRegistry {
    method getInstance (line 26) | public static TypeRegistry getInstance() {
    method addDataType (line 37) | @Override
    method getAllDataTypes (line 48) | @Override
    method addDataType (line 53) | @Override
    method getDataType (line 58) | @Override
    method getDataType (line 63) | @Override

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/systemcontract/SystemContract.java
  class SystemContract (line 16) | @Contract(
    method getMetadata (line 28) | @Transaction(intent = Transaction.TYPE.EVALUATE, name = "GetMetadata")

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/ledger/Collection.java
  type Collection (line 9) | @SuppressWarnings("PMD.ImplicitFunctionalInterface")
    method placeholder (line 19) | void placeholder();

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/ledger/Ledger.java
  type Ledger (line 20) | public interface Ledger {
    method getLedger (line 33) | static Ledger getLedger(final Context ctx) {
    method getCollection (line 47) | Collection getCollection(String name);
    method getDefaultCollection (line 56) | Collection getDefaultCollection();
    method getOrganizationCollection (line 68) | Collection getOrganizationCollection(String mspid);

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/ledger/impl/LedgerImpl.java
  class LedgerImpl (line 12) | public final class LedgerImpl implements Ledger {
    method LedgerImpl (line 19) | public LedgerImpl(final Context ctx) {
    method getCollection (line 23) | @Override
    method getDefaultCollection (line 33) | @Override
    method getOrganizationCollection (line 38) | @Override

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/metrics/Metrics.java
  class Metrics (line 19) | public final class Metrics {
    method Metrics (line 28) | private Metrics() {}
    method initialize (line 34) | @SuppressWarnings("PMD.AvoidCatchingGenericException")
    method getProvider (line 63) | public static MetricsProvider getProvider() {

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/metrics/MetricsProvider.java
  type MetricsProvider (line 24) | public interface MetricsProvider {
    method initialize (line 31) | default void initialize(final Properties props) {
    method setTaskMetricsCollector (line 41) | default void setTaskMetricsCollector(final TaskMetricsCollector taskSe...

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/metrics/TaskMetricsCollector.java
  type TaskMetricsCollector (line 15) | public interface TaskMetricsCollector {
    method getCurrentTaskCount (line 22) | int getCurrentTaskCount();
    method getCurrentQueueCount (line 29) | int getCurrentQueueCount();
    method getActiveCount (line 36) | int getActiveCount();
    method getPoolSize (line 43) | int getPoolSize();
    method getCorePoolSize (line 50) | int getCorePoolSize();
    method getLargestPoolSize (line 57) | int getLargestPoolSize();
    method getMaximumPoolSize (line 64) | int getMaximumPoolSize();

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/metrics/impl/DefaultProvider.java
  class DefaultProvider (line 17) | public final class DefaultProvider implements MetricsProvider {
    method DefaultProvider (line 24) | public DefaultProvider() {
    method setTaskMetricsCollector (line 28) | @Override
    method initialize (line 33) | @Override
    method logMetrics (line 47) | void logMetrics() {

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/metrics/impl/NullProvider.java
  class NullProvider (line 11) | public class NullProvider implements MetricsProvider {}

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/Chaincode.java
  type Chaincode (line 15) | public interface Chaincode {
    method init (line 23) | Response init(ChaincodeStub stub);
    method invoke (line 31) | Response invoke(ChaincodeStub stub);
    class Response (line 37) | class Response {
      method Response (line 49) | @SuppressWarnings("PMD.ArrayIsStoredDirectly")
      method Response (line 63) | @SuppressWarnings("PMD.ArrayIsStoredDirectly")
      method getStatus (line 75) | public Status getStatus() {
      method getStatusCode (line 88) | public int getStatusCode() {
      method getMessage (line 97) | public String getMessage() {
      method getPayload (line 106) | @SuppressWarnings("PMD.MethodReturnsInternalArray")
      method getStringPayload (line 116) | public String getStringPayload() {
      type Status (line 121) | public enum Status {
        method Status (line 132) | Status(final int code) {
        method getCode (line 141) | public int getCode() {
        method forCode (line 151) | public static Status forCode(final int code) {
        method hasStatusForCode (line 165) | public static boolean hasStatusForCode(final int code) {

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeBase.java
  class ChaincodeBase (line 59) | @SuppressWarnings({"PMD.CyclomaticComplexity", "PMD.GodClass"})
    method init (line 112) | @Override
    method invoke (line 115) | @Override
    method getMaxInboundMessageSize (line 118) | private int getMaxInboundMessageSize() {
    method start (line 135) | @SuppressWarnings("PMD.AvoidCatchingGenericException")
    method connectToPeer (line 152) | protected final void connectToPeer() throws IOException {
    method connectToPeer (line 228) | protected StreamObserver<ChaincodeMessage> connectToPeer(final StreamO...
    method initializeLogging (line 274) | protected final void initializeLogging() {
    method mapLevel (line 312) | private Level mapLevel(final String level) {
    method parseHostPort (line 335) | private SocketAddress parseHostPort(final String hostAddrStr) throws U...
    method isServer (line 355) | public boolean isServer() {
    method validateOptions (line 360) | @SuppressWarnings("PMD.CyclomaticComplexity")
    method processCommandLineOptions (line 383) | @SuppressWarnings({
    method processEnvironmentOptions (line 427) | @SuppressWarnings("PMD.AvoidLiteralsInIfCondition")
    method getChaincodeConfig (line 486) | public Properties getChaincodeConfig() {
    method getChaincodeServerConfig (line 518) | public final ChaincodeServerProperties getChaincodeServerConfig() thro...
    method newChannelBuilder (line 539) | @SuppressWarnings("deprecation")
    method createSSLContext (line 563) | final SslContext createSSLContext() throws IOException {
    method newSuccessResponse (line 575) | @Deprecated
    method newSuccessResponse (line 580) | @Deprecated
    method newSuccessResponse (line 585) | @Deprecated
    method newSuccessResponse (line 590) | @Deprecated
    method newErrorResponse (line 595) | @Deprecated
    method newErrorResponse (line 600) | @Deprecated
    method newErrorResponse (line 605) | @Deprecated
    method newErrorResponse (line 610) | @Deprecated
    method newErrorResponse (line 615) | @Deprecated
    method getHost (line 620) | final String getHost() {
    method getPort (line 624) | final int getPort() {
    method isTlsEnabled (line 628) | final boolean isTlsEnabled() {
    method getTlsClientKeyPath (line 632) | final String getTlsClientKeyPath() {
    method getTlsClientCertPath (line 636) | final String getTlsClientCertPath() {
    method getTlsClientRootCertPath (line 640) | final String getTlsClientRootCertPath() {
    method getId (line 649) | String getId() {
    type CCState (line 654) | public enum CCState {
    method getState (line 664) | public final CCState getState() {
    method setState (line 669) | public final void setState(final CCState newState) {
    method toJsonString (line 679) | public static String toJsonString(final ChaincodeMessage message) {

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeException.java
  class ChaincodeException (line 20) | public class ChaincodeException extends RuntimeException {
    method ChaincodeException (line 27) | public ChaincodeException() {
    method ChaincodeException (line 36) | public ChaincodeException(final String message) {
    method ChaincodeException (line 45) | public ChaincodeException(final Throwable cause) {
    method ChaincodeException (line 55) | public ChaincodeException(final String message, final Throwable cause) {
    method ChaincodeException (line 65) | @SuppressWarnings("PMD.ArrayIsStoredDirectly")
    method ChaincodeException (line 79) | @SuppressWarnings("PMD.ArrayIsStoredDirectly")
    method ChaincodeException (line 92) | public ChaincodeException(final String message, final String payload) {
    method ChaincodeException (line 105) | public ChaincodeException(final String message, final String payload, ...
    method getPayload (line 120) | @SuppressWarnings("PMD.MethodReturnsInternalArray")

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeServer.java
  type ChaincodeServer (line 12) | public interface ChaincodeServer {
    method start (line 20) | void start() throws IOException, InterruptedException;
    method stop (line 23) | void stop();

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeServerProperties.java
  class ChaincodeServerProperties (line 10) | public final class ChaincodeServerProperties {
    method ChaincodeServerProperties (line 26) | public ChaincodeServerProperties() {
    method ChaincodeServerProperties (line 44) | @SuppressWarnings({"PMD.NullAssignment"})
    method getMaxInboundMetadataSize (line 70) | public int getMaxInboundMetadataSize() {
    method setMaxInboundMetadataSize (line 79) | public void setMaxInboundMetadataSize(final int maxInboundMetadataSize) {
    method getMaxInboundMessageSize (line 88) | public int getMaxInboundMessageSize() {
    method setMaxInboundMessageSize (line 97) | public void setMaxInboundMessageSize(final int maxInboundMessageSize) {
    method getMaxConnectionAgeSeconds (line 106) | public int getMaxConnectionAgeSeconds() {
    method setMaxConnectionAgeSeconds (line 115) | public void setMaxConnectionAgeSeconds(final int maxConnectionAgeSecon...
    method getKeepAliveTimeoutSeconds (line 124) | public int getKeepAliveTimeoutSeconds() {
    method setKeepAliveTimeoutSeconds (line 133) | public void setKeepAliveTimeoutSeconds(final int keepAliveTimeoutSecon...
    method getPermitKeepAliveTimeMinutes (line 142) | public int getPermitKeepAliveTimeMinutes() {
    method setPermitKeepAliveTimeMinutes (line 151) | public void setPermitKeepAliveTimeMinutes(final int permitKeepAliveTim...
    method getKeepAliveTimeMinutes (line 160) | public int getKeepAliveTimeMinutes() {
    method setKeepAliveTimeMinutes (line 169) | public void setKeepAliveTimeMinutes(final int keepAliveTimeMinutes) {
    method getPermitKeepAliveWithoutCalls (line 179) | @SuppressWarnings("PMD.BooleanGetMethodName")
    method getServerAddress (line 189) | public SocketAddress getServerAddress() {
    method setServerAddress (line 198) | public void setServerAddress(final SocketAddress address) {
    method isPermitKeepAliveWithoutCalls (line 208) | public boolean isPermitKeepAliveWithoutCalls() {
    method setPermitKeepAliveWithoutCalls (line 218) | public void setPermitKeepAliveWithoutCalls(final boolean permitKeepAli...
    method getKeyPassword (line 227) | public String getKeyPassword() {
    method setKeyPassword (line 236) | public void setKeyPassword(final String keyPassword) {
    method getKeyCertChainFile (line 245) | public String getKeyCertChainFile() {
    method setKeyCertChainFile (line 254) | public void setKeyCertChainFile(final String keyCertChainFile) {
    method getKeyFile (line 263) | public String getKeyFile() {
    method setKeyFile (line 272) | public void setKeyFile(final String keyFile) {
    method getTrustCertCollectionFile (line 281) | public String getTrustCertCollectionFile() {
    method setTrustCertCollectionFile (line 290) | public void setTrustCertCollectionFile(final String trustCertCollectio...
    method isTlsEnabled (line 299) | public boolean isTlsEnabled() {
    method setTlsEnabled (line 308) | public void setTlsEnabled(final boolean tlsEnabled) {
    method validate (line 317) | @SuppressWarnings("PMD.CyclomaticComplexity")

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeStub.java
  type ChaincodeStub (line 29) | @SuppressWarnings("PMD.ExcessivePublicCount")
    method getArgs (line 38) | List<byte[]> getArgs();
    method getStringArgs (line 46) | List<String> getStringArgs();
    method getFunction (line 55) | String getFunction();
    method getParameters (line 65) | List<String> getParameters();
    method getTxId (line 74) | String getTxId();
    method getChannelId (line 84) | String getChannelId();
    method invokeChaincode (line 110) | Response invokeChaincode(String chaincodeName, List<byte[]> args, Stri...
    method getState (line 121) | byte[] getState(String key);
    method getStateValidationParameter (line 130) | byte[] getStateValidationParameter(String key);
    method putState (line 143) | void putState(String key, byte[] value);
    method setStateValidationParameter (line 151) | void setStateValidationParameter(String key, byte[] value);
    method delState (line 161) | void delState(String key);
    method getStateByRange (line 176) | QueryResultsIterator<KeyValue> getStateByRange(String startKey, String...
    method getStateByRangeWithPagination (line 196) | QueryResultsIteratorWithMetadata<KeyValue> getStateByRangeWithPagination(
    method getStateByPartialCompositeKey (line 212) | QueryResultsIterator<KeyValue> getStateByPartialCompositeKey(String co...
    method getStateByPartialCompositeKey (line 229) | QueryResultsIterator<KeyValue> getStateByPartialCompositeKey(String ob...
    method getStateByPartialCompositeKey (line 239) | QueryResultsIterator<KeyValue> getStateByPartialCompositeKey(Composite...
    method getStateByPartialCompositeKeyWithPagination (line 263) | QueryResultsIteratorWithMetadata<KeyValue> getStateByPartialCompositeK...
    method createCompositeKey (line 273) | CompositeKey createCompositeKey(String objectType, String... attributes);
    method splitCompositeKey (line 281) | CompositeKey splitCompositeKey(String compositeKey);
    method getQueryResult (line 294) | QueryResultsIterator<KeyValue> getQueryResult(String query);
    method getQueryResultWithPagination (line 317) | QueryResultsIteratorWithMetadata<KeyValue> getQueryResultWithPagination(
    method getHistoryForKey (line 330) | QueryResultsIterator<KeyModification> getHistoryForKey(String key);
    method getPrivateData (line 343) | byte[] getPrivateData(String collection, String key);
    method getPrivateDataHash (line 350) | byte[] getPrivateDataHash(String collection, String key);
    method getPrivateDataValidationParameter (line 360) | byte[] getPrivateDataValidationParameter(String collection, String key);
    method putPrivateData (line 376) | void putPrivateData(String collection, String key, byte[] value);
    method setPrivateDataValidationParameter (line 385) | void setPrivateDataValidationParameter(String collection, String key, ...
    method delPrivateData (line 398) | void delPrivateData(String collection, String key);
    method purgePrivateData (line 414) | void purgePrivateData(String collection, String key);
    method getPrivateDataByRange (line 429) | QueryResultsIterator<KeyValue> getPrivateDataByRange(String collection...
    method getPrivateDataByPartialCompositeKey (line 447) | QueryResultsIterator<KeyValue> getPrivateDataByPartialCompositeKey(Str...
    method getPrivateDataByPartialCompositeKey (line 462) | QueryResultsIterator<KeyValue> getPrivateDataByPartialCompositeKey(Str...
    method getPrivateDataByPartialCompositeKey (line 482) | QueryResultsIterator<KeyValue> getPrivateDataByPartialCompositeKey(
    method getPrivateDataQueryResult (line 501) | QueryResultsIterator<KeyValue> getPrivateDataQueryResult(String collec...
    method setEvent (line 515) | void setEvent(String name, byte[] payload);
    method invokeChaincode (line 526) | default Response invokeChaincode(final String chaincodeName, final Lis...
    method invokeChaincodeWithStringArgs (line 541) | default Response invokeChaincodeWithStringArgs(
    method invokeChaincodeWithStringArgs (line 557) | default Response invokeChaincodeWithStringArgs(final String chaincodeN...
    method invokeChaincodeWithStringArgs (line 571) | default Response invokeChaincodeWithStringArgs(final String chaincodeN...
    method getStringState (line 583) | default String getStringState(final String key) {
    method putPrivateData (line 594) | default void putPrivateData(final String collection, final String key,...
    method getPrivateDataUTF8 (line 606) | default String getPrivateDataUTF8(final String collection, final Strin...
    method putStringState (line 616) | default void putStringState(final String key, final String value) {
    method getEvent (line 626) | ChaincodeEvent getEvent();
    method getSignedProposal (line 633) | SignedProposal getSignedProposal();
    method getTxTimestamp (line 640) | Instant getTxTimestamp();
    method getCreator (line 647) | byte[] getCreator();
    method getTransient (line 654) | Map<String, byte[]> getTransient();
    method getBinding (line 661) | byte[] getBinding();
    method getMspId (line 668) | String getMspId();

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChatChaincodeWithPeer.java
  class ChatChaincodeWithPeer (line 15) | public class ChatChaincodeWithPeer extends ChaincodeGrpc.ChaincodeImplBa...
    method ChatChaincodeWithPeer (line 20) | ChatChaincodeWithPeer(final ChaincodeBase chaincodeBase) throws IOExce...
    method connect (line 37) | @Override

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/GrpcServer.java
  type GrpcServer (line 12) | public interface GrpcServer {
    method start (line 19) | void start() throws IOException;
    method stop (line 22) | void stop();
    method blockUntilShutdown (line 29) | void blockUntilShutdown() throws InterruptedException;

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/NettyChaincodeServer.java
  class NettyChaincodeServer (line 11) | public class NettyChaincodeServer implements ChaincodeServer {
    method NettyChaincodeServer (line 23) | public NettyChaincodeServer(
    method start (line 36) | @Override
    method stop (line 43) | @Override

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/NettyGrpcServer.java
  class NettyGrpcServer (line 24) | public final class NettyGrpcServer implements GrpcServer {
    method NettyGrpcServer (line 37) | public NettyGrpcServer(final ChaincodeBase chaincodeBase, final Chainc...
    method configureTls (line 83) | private static void configureTls(
    method start (line 121) | @SuppressWarnings("PMD.SystemPrintln")
    method blockUntilShutdown (line 139) | @Override
    method stop (line 146) | @Override

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ResponseUtils.java
  class ResponseUtils (line 13) | public final class ResponseUtils {
    method ResponseUtils (line 17) | private ResponseUtils() {}
    method newSuccessResponse (line 24) | public static Chaincode.Response newSuccessResponse(final String messa...
    method newSuccessResponse (line 29) | public static Chaincode.Response newSuccessResponse() {
    method newSuccessResponse (line 37) | public static Chaincode.Response newSuccessResponse(final String messa...
    method newSuccessResponse (line 45) | public static Chaincode.Response newSuccessResponse(final byte[] paylo...
    method newErrorResponse (line 54) | public static Chaincode.Response newErrorResponse(final String message...
    method newErrorResponse (line 59) | public static Chaincode.Response newErrorResponse() {
    method newErrorResponse (line 67) | public static Chaincode.Response newErrorResponse(final String message) {
    method newErrorResponse (line 75) | public static Chaincode.Response newErrorResponse(final byte[] payload) {
    method newErrorResponse (line 83) | public static Chaincode.Response newErrorResponse(final Throwable thro...

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/StateBasedEndorsement.java
  type StateBasedEndorsement (line 17) | public interface StateBasedEndorsement {
    method policy (line 23) | byte[] policy();
    method addOrgs (line 34) | void addOrgs(RoleType roleType, String... organizations);
    method delOrgs (line 41) | void delOrgs(String... organizations);
    method listOrgs (line 48) | List<String> listOrgs();
    type RoleType (line 51) | @SuppressWarnings("PMD.FieldNamingConventions")
      method RoleType (line 68) | RoleType(final String val) {
      method getVal (line 73) | public String getVal() {
      method forVal (line 81) | public static RoleType forVal(final String val) {

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/impl/StateBasedEndorsementFactory.java
  class StateBasedEndorsementFactory (line 11) | public class StateBasedEndorsementFactory {
    method getInstance (line 15) | public static StateBasedEndorsementFactory getInstance() {
    method newStateBasedEndorsement (line 26) | public StateBasedEndorsement newStateBasedEndorsement(final byte[] ep) {

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/impl/StateBasedEndorsementImpl.java
  class StateBasedEndorsementImpl (line 25) | public final class StateBasedEndorsementImpl implements StateBasedEndors...
    method StateBasedEndorsementImpl (line 31) | StateBasedEndorsementImpl(final byte[] ep) {
    method policy (line 46) | @Override
    method addOrgs (line 52) | @Override
    method delOrgs (line 65) | @Override
    method listOrgs (line 72) | @Override
    method setMSPIDsFromSP (line 79) | private void setMSPIDsFromSP(final SignaturePolicyEnvelope spe) {
    method addOrg (line 85) | private void addOrg(final MSPPrincipal identity) {
    method policyFromMSPIDs (line 95) | private SignaturePolicyEnvelope policyFromMSPIDs() {

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/impl/StateBasedEndorsementUtils.java
  class StateBasedEndorsementUtils (line 19) | public final class StateBasedEndorsementUtils {
    method StateBasedEndorsementUtils (line 21) | private StateBasedEndorsementUtils() {}
    method signedBy (line 29) | static SignaturePolicy signedBy(final int index) {
    method nOutOf (line 42) | static SignaturePolicy nOutOf(final int n, final List<SignaturePolicy>...
    method signedByFabricEntity (line 56) | static SignaturePolicyEnvelope signedByFabricEntity(final String mspId...

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/ChaincodeInvocationTask.java
  class ChaincodeInvocationTask (line 31) | @SuppressWarnings("PMD.MoreThanOneLogger")
    method ChaincodeInvocationTask (line 58) | public ChaincodeInvocationTask(
    method call (line 73) | @Override
    method getTxKey (line 152) | public String getTxKey() {
    method equals (line 162) | @Override
    method hashCode (line 172) | @Override
    method postMessage (line 187) | public void postMessage(final ChaincodeMessage msg) throws Interrupted...
    method invoke (line 206) | protected ByteString invoke(final ChaincodeMessage message) {

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/ChaincodeMessageFactory.java
  class ChaincodeMessageFactory (line 36) | public final class ChaincodeMessageFactory {
    method ChaincodeMessageFactory (line 38) | private ChaincodeMessageFactory() {}
    method newGetPrivateDataHashEventMessage (line 40) | static ChaincodeMessage newGetPrivateDataHashEventMessage(
    method newGetStateEventMessage (line 53) | static ChaincodeMessage newGetStateEventMessage(
    method newGetStateMetadataEventMessage (line 66) | static ChaincodeMessage newGetStateMetadataEventMessage(
    method newPutStateEventMessage (line 79) | static ChaincodeMessage newPutStateEventMessage(
    method newPutStateMetadataEventMessage (line 97) | static ChaincodeMessage newPutStateMetadataEventMessage(
    method newDeleteStateEventMessage (line 119) | static ChaincodeMessage newDeleteStateEventMessage(
    method newPurgeStateEventMessage (line 132) | static ChaincodeMessage newPurgeStateEventMessage(
    method newErrorEventMessage (line 145) | static ChaincodeMessage newErrorEventMessage(final String channelId, f...
    method newErrorEventMessage (line 149) | static ChaincodeMessage newErrorEventMessage(final String channelId, f...
    method newErrorEventMessage (line 153) | static ChaincodeMessage newErrorEventMessage(
    method newCompletedEventMessage (line 158) | static ChaincodeMessage newCompletedEventMessage(
    method newInvokeChaincodeMessage (line 164) | static ChaincodeMessage newInvokeChaincodeMessage(
    method newRegisterChaincodeMessage (line 169) | static ChaincodeMessage newRegisterChaincodeMessage(final ChaincodeID ...
    method newEventMessage (line 176) | static ChaincodeMessage newEventMessage(
    method newEventMessage (line 181) | static ChaincodeMessage newEventMessage(
    method toProtoResponse (line 198) | private static Response toProtoResponse(final Chaincode.Response respo...
    method printStackTrace (line 210) | private static String printStackTrace(final Throwable throwable) {

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/ChaincodeSupportClient.java
  class ChaincodeSupportClient (line 23) | public class ChaincodeSupportClient {
    method ChaincodeSupportClient (line 30) | public ChaincodeSupportClient(final ManagedChannelBuilder<?> channelBu...
    method shutdown (line 40) | public void shutdown(final InvocationTaskManager itm) {
    method start (line 61) | public void start(final InvocationTaskManager itm, final StreamObserve...
    method getStub (line 103) | public ChaincodeSupportStub getStub() {

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/InvocationStubImpl.java
  class InvocationStubImpl (line 62) | @SuppressWarnings({"PMD.CyclomaticComplexity", "PMD.GodClass"})
    method InvocationStubImpl (line 105) | InvocationStubImpl(final ChaincodeMessage message, final ChaincodeInvo...
    method isEmptyString (line 136) | private static boolean isEmptyString(final String str) {
    method computeBinding (line 145) | private byte[] computeBinding(final ChannelHeader channelHeader, final...
    method validateProposalType (line 157) | private void validateProposalType(final ChannelHeader channelHeader) {
    method getArgs (line 168) | @Override
    method getStringArgs (line 173) | @Override
    method getFunction (line 178) | @Override
    method getParameters (line 183) | @Override
    method setEvent (line 188) | @Override
    method getEvent (line 203) | @Override
    method getChannelId (line 208) | @Override
    method getTxId (line 213) | @Override
    method getState (line 218) | @Override
    method getStateValidationParameter (line 225) | @Override
    method putState (line 251) | @Override
    method setStateValidationParameter (line 258) | @Override
    method delState (line 266) | @Override
    method getStateByRange (line 272) | @Override
    method executeGetStateByRange (line 288) | private QueryResultsIterator<KeyValue> executeGetStateByRange(
    method getStateByRangeWithPagination (line 306) | @Override
    method executeGetStateByRangeWithMetadata (line 330) | private QueryResultsIteratorWithMetadataImpl<KeyValue> executeGetState...
    method getStateByPartialCompositeKey (line 350) | @Override
    method getStateByPartialCompositeKey (line 364) | @Override
    method getStateByPartialCompositeKey (line 370) | @Override
    method getStateByPartialCompositeKeyWithPagination (line 384) | @Override
    method createCompositeKey (line 405) | @Override
    method splitCompositeKey (line 410) | @Override
    method getQueryResult (line 415) | @Override
    method getQueryResultWithPagination (line 431) | @Override
    method getHistoryForKey (line 454) | @Override
    method getPrivateData (line 474) | @Override
    method getPrivateDataHash (line 482) | @Override
    method getPrivateDataValidationParameter (line 498) | @Override
    method putPrivateData (line 525) | @Override
    method setPrivateDataValidationParameter (line 533) | @Override
    method delPrivateData (line 547) | @Override
    method purgePrivateData (line 555) | @Override
    method getPrivateDataByRange (line 563) | @Override
    method getPrivateDataByPartialCompositeKey (line 581) | @Override
    method getPrivateDataByPartialCompositeKey (line 598) | @Override
    method getPrivateDataByPartialCompositeKey (line 611) | @Override
    method getPrivateDataQueryResult (line 617) | @Override
    method invokeChaincode (line 633) | @Override
    method getSignedProposal (line 683) | @Override
    method getTxTimestamp (line 688) | @Override
    method getCreator (line 693) | @Override
    method getTransient (line 702) | @Override
    method getBinding (line 708) | @Override
    method validateKey (line 714) | private void validateKey(final String key) {
    method validateCollection (line 721) | private void validateCollection(final String collection) {
    method getMspId (line 728) | @Override

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/InvocationTaskExecutor.java
  class InvocationTaskExecutor (line 18) | public final class InvocationTaskExecutor extends ThreadPoolExecutor imp...
    method InvocationTaskExecutor (line 32) | public InvocationTaskExecutor(
    method beforeExecute (line 45) | @Override
    method afterExecute (line 51) | @Override
    method getCurrentTaskCount (line 57) | @Override
    method getCurrentQueueCount (line 62) | @Override

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/InvocationTaskManager.java
  class InvocationTaskManager (line 39) | @SuppressWarnings("PMD.MoreThanOneLogger")
    method newThread (line 72) | @Override
    method getManager (line 98) | public static InvocationTaskManager getManager(final ChaincodeBase cha...
    method InvocationTaskManager (line 108) | public InvocationTaskManager(final ChaincodeBase chaincode, final Chai...
    method onChaincodeMessage (line 143) | @SuppressWarnings("PMD.AvoidCatchingGenericException")
    method processChaincodeMessage (line 161) | private void processChaincodeMessage(final ChaincodeMessage chaincodeM...
    method handleMsg (line 195) | private void handleMsg(final ChaincodeMessage message, final Type msgT...
    method sendToTask (line 217) | private void sendToTask(final ChaincodeMessage message) {
    method sendFailure (line 234) | private void sendFailure(final ChaincodeMessage message, final Interru...
    method newTask (line 249) | private void newTask(final ChaincodeMessage message, final Type type) {
    method setResponseConsumer (line 297) | public void setResponseConsumer(final Consumer<ChaincodeMessage> outgo...
    method register (line 306) | public void register() {
    method shutdown (line 317) | @SuppressWarnings("PMD.SystemPrintln")

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/KeyModificationImpl.java
  class KeyModificationImpl (line 12) | public final class KeyModificationImpl implements KeyModification {
    method KeyModificationImpl (line 19) | KeyModificationImpl(final org.hyperledger.fabric.protos.ledger.queryre...
    method getTxId (line 27) | @Override
    method getValue (line 32) | @Override
    method getStringValue (line 37) | @Override
    method getTimestamp (line 42) | @Override
    method isDeleted (line 47) | @Override
    method hashCode (line 52) | @Override
    method equals (line 62) | @Override

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/KeyValueImpl.java
  class KeyValueImpl (line 12) | class KeyValueImpl implements KeyValue {
    method KeyValueImpl (line 17) | KeyValueImpl(final KV kv) {
    method getKey (line 22) | @Override
    method getValue (line 27) | @Override
    method getStringValue (line 32) | @Override
    method hashCode (line 37) | @Override
    method equals (line 45) | @Override

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/QueryResultsIteratorImpl.java
  class QueryResultsIteratorImpl (line 36) | class QueryResultsIteratorImpl<T> implements QueryResultsIterator<T> {
    method QueryResultsIteratorImpl (line 45) | QueryResultsIteratorImpl(
    method iterator (line 64) | @Override
    method close (line 109) | @Override

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/QueryResultsIteratorWithMetadataImpl.java
  class QueryResultsIteratorWithMetadataImpl (line 27) | public final class QueryResultsIteratorWithMetadataImpl<T> extends Query...
    method QueryResultsIteratorWithMetadataImpl (line 40) | public QueryResultsIteratorWithMetadataImpl(
    method getMetadata (line 56) | @Override

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ledger/CompositeKey.java
  class CompositeKey (line 18) | public class CompositeKey {
    method CompositeKey (line 36) | public CompositeKey(final String objectType, final String... attribute...
    method CompositeKey (line 44) | public CompositeKey(final String objectType, final List<String> attrib...
    method getObjectType (line 52) | public String getObjectType() {
    method getAttributes (line 57) | public List<String> getAttributes() {
    method toString (line 62) | @Override
    method parseCompositeKey (line 71) | public static CompositeKey parseCompositeKey(final String compositeKey) {
    method validateSimpleKeys (line 91) | public static void validateSimpleKeys(final String... keys) {
    method generateCompositeKeyString (line 99) | private String generateCompositeKeyString(final String objectType, fin...
    method validateCompositeKeySegment (line 114) | private void validateCompositeKeySegment(final String segment) {

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ledger/CompositeKeyFormatException.java
  class CompositeKeyFormatException (line 9) | final class CompositeKeyFormatException extends IllegalArgumentException {
    method CompositeKeyFormatException (line 12) | private CompositeKeyFormatException(final String s) {
    method forInputString (line 16) | static CompositeKeyFormatException forInputString(final String s, fina...
    method forSimpleKey (line 21) | static CompositeKeyFormatException forSimpleKey(final String key) {

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ledger/KeyModification.java
  type KeyModification (line 13) | public interface KeyModification {
    method getTxId (line 20) | String getTxId();
    method getValue (line 27) | byte[] getValue();
    method getStringValue (line 34) | String getStringValue();
    method getTimestamp (line 41) | java.time.Instant getTimestamp();
    method isDeleted (line 48) | boolean isDeleted();

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ledger/KeyValue.java
  type KeyValue (line 10) | public interface KeyValue {
    method getKey (line 17) | String getKey();
    method getValue (line 24) | byte[] getValue();
    method getStringValue (line 31) | String getStringValue();

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ledger/QueryResultsIterator.java
  type QueryResultsIterator (line 15) | public interface QueryResultsIterator<T> extends Iterable<T>, AutoClosea...
    method close (line 16) | @Override

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ledger/QueryResultsIteratorWithMetadata.java
  type QueryResultsIteratorWithMetadata (line 18) | public interface QueryResultsIteratorWithMetadata<T> extends Iterable<T>...
    method getMetadata (line 20) | QueryResponseMetadata getMetadata();
    method close (line 22) | @Override

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/Traces.java
  class Traces (line 20) | public final class Traces {
    method Traces (line 29) | private Traces() {}
    method initialize (line 35) | @SuppressWarnings("PMD.AvoidCatchingGenericException")
    method getProvider (line 64) | public static TracesProvider getProvider() {

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/TracesProvider.java
  type TracesProvider (line 27) | public interface TracesProvider {
    method initialize (line 34) | default void initialize(final Properties props) {
    method createSpan (line 44) | default Span createSpan(ChaincodeStub stub) {
    method createInterceptor (line 54) | default ClientInterceptor createInterceptor() {

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/DefaultTracesProvider.java
  class DefaultTracesProvider (line 10) | public final class DefaultTracesProvider implements TracesProvider {}

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/NullProvider.java
  class NullProvider (line 10) | public final class NullProvider implements TracesProvider {}

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/OpenTelemetryProperties.java
  class OpenTelemetryProperties (line 24) | final class OpenTelemetryProperties implements ConfigProperties {
    method OpenTelemetryProperties (line 27) | @SafeVarargs
    method getString (line 37) | @Override
    method getBoolean (line 42) | @Override
    method getInt (line 51) | @Override
    method getLong (line 64) | @Override
    method getDouble (line 77) | @Override
    method getDuration (line 90) | @Override
    method getList (line 112) | @Override
    method getMap (line 121) | @Override
    method newInvalidPropertyException (line 138) | private static ConfigurationException newInvalidPropertyException(
    method filterBlanksAndNulls (line 146) | private static List<String> filterBlanksAndNulls(final String[] values) {
    method getDurationUnit (line 156) | private static Optional<TimeUnit> getDurationUnit(final String unitStr...
    method getUnitString (line 182) | private static String getUnitString(final String rawValue) {

FILE: fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/OpenTelemetryTracesProvider.java
  class OpenTelemetryTracesProvider (line 23) | public final class OpenTelemetryTracesProvider implements TracesProvider {
    method initialize (line 32) | @Override
    method getOpenTelemetryProperties (line 46) | private Map<String, String> getOpenTelemetryProperties(final Propertie...
    method createSpan (line 57) | @Override
    method createInterceptor (line 68) | @Override

FILE: fabric-chaincode-shim/src/test/java/ChaincodeWithoutPackageTest.java
  class ChaincodeWithoutPackageTest (line 21) | final class ChaincodeWithoutPackageTest {
    method afterTest (line 24) | @AfterEach
    method testRegisterChaincodeWithoutPackage (line 32) | @Test

FILE: fabric-chaincode-shim/src/test/java/EmptyChaincodeWithoutPackage.java
  class EmptyChaincodeWithoutPackage (line 11) | public final class EmptyChaincodeWithoutPackage extends ChaincodeBase {
    method init (line 12) | @Override
    method invoke (line 17) | @Override

FILE: fabric-chaincode-shim/src/test/java/contract/Greeting.java
  class Greeting (line 14) | @DataType()
    method getText (line 23) | public String getText() {
    method setText (line 27) | public void setText(final String text) {
    method getTextLength (line 31) | public int getTextLength() {
    method setTextLength (line 35) | public void setTextLength(final int textLength) {
    method getWordCount (line 39) | public int getWordCount() {
    method setWordCount (line 43) | public void setWordCount(final int wordCount) {
    method Greeting (line 49) | public Greeting(final String text) {
    method validate (line 55) | public static void validate(final Greeting greeting) {
    method toJSONString (line 62) | public String toJSONString() {

FILE: fabric-chaincode-shim/src/test/java/contract/SampleContract.java
  class SampleContract (line 19) | @Contract(
    method getBeforeInvoked (line 30) | public static int getBeforeInvoked() {
    method getAfterInvoked (line 34) | public static int getAfterInvoked() {
    method getDoWorkInvoked (line 38) | public static int getDoWorkInvoked() {
    method getT1Invoked (line 42) | public static int getT1Invoked() {
    method getI1Invoked (line 46) | public static int getI1Invoked() {
    method setBeforeInvoked (line 50) | public static void setBeforeInvoked(final int beforeInvoked) {
    method setAfterInvoked (line 54) | public static void setAfterInvoked(final int afterInvoked) {
    method setDoWorkInvoked (line 58) | public static void setDoWorkInvoked(final int doWorkInvoked) {
    method setT1Invoked (line 62) | public static void setT1Invoked(final int t1Invoked) {
    method setI1Invoked (line 66) | public static void setI1Invoked(final int i1Invoked) {
    method t5 (line 80) | @Transaction
    method tFour (line 91) | @Transaction(name = "t4")
    method t3 (line 104) | @Transaction
    method t2 (line 121) | @Transaction
    method noReturn (line 129) | @Transaction
    method t1 (line 139) | @Transaction
    method beforeTransaction (line 150) | @Override
    method afterTransaction (line 156) | @Override
    method doSomeWork (line 161) | private void doSomeWork() {

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/LoggerTest.java
  class LoggerTest (line 12) | class LoggerTest {
    method logger (line 13) | @Test
    method testContractException (line 19) | @Test
    method testDebug (line 34) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/LoggingTest.java
  class LoggingTest (line 18) | final class LoggingTest {
    method testMapLevel (line 19) | @Test
    method proxyMapLevel (line 33) | private Object proxyMapLevel(final Object... args)
    method testFormatError (line 40) | @Test
    method testSetLogLevel (line 55) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/TestUtil.java
  class TestUtil (line 21) | public final class TestUtil {
    method TestUtil (line 23) | private TestUtil() {}
    method createCertWithIdentityAttributes (line 85) | public static String createCertWithIdentityAttributes(final String att...

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/AllTypesAsset.java
  class AllTypesAsset (line 11) | @DataType()
    method getTheByte (line 45) | public byte getTheByte() {
    method setTheByte (line 49) | public void setTheByte(final byte aByte) {
    method getTheShort (line 53) | public short getTheShort() {
    method setTheShort (line 57) | public void setTheShort(final short aShort) {
    method getTheInt (line 61) | public int getTheInt() {
    method setTheInt (line 65) | public void setTheInt(final int aInt) {
    method getTheLong (line 69) | public long getTheLong() {
    method setTheLong (line 73) | public void setTheLong(final long aLong) {
    method getTheFloat (line 77) | public float getTheFloat() {
    method setTheFloat (line 81) | public void setTheFloat(final float aFloat) {
    method getTheDouble (line 85) | public double getTheDouble() {
    method setTheDouble (line 89) | public void setTheDouble(final double aDouble) {
    method isTheBoolean (line 93) | public boolean isTheBoolean() {
    method setBoolean (line 97) | public void setBoolean(final boolean aBoolean) {
    method getTheChar (line 101) | public char getTheChar() {
    method setTheChar (line 105) | public void setTheChar(final char aChar) {
    method getTheString (line 109) | public String getTheString() {
    method setString (line 113) | public void setString(final String aString) {
    method getTheCustomObject (line 117) | public MyType getTheCustomObject() {
    method setTheCustomObject (line 121) | public void setTheCustomObject(final MyType customObject) {
    method equals (line 125) | @Override
    method toString (line 142) | @Override

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/ChaincodeStubNaiveImpl.java
  class ChaincodeStubNaiveImpl (line 29) | public final class ChaincodeStubNaiveImpl implements ChaincodeStub {
    method ChaincodeStubNaiveImpl (line 36) | public ChaincodeStubNaiveImpl() {
    method ChaincodeStubNaiveImpl (line 50) | ChaincodeStubNaiveImpl(final List<String> args) {
    method getArgs (line 60) | @Override
    method getStringArgs (line 70) | @Override
    method getFunction (line 75) | @Override
    method getParameters (line 80) | @Override
    method getTxId (line 85) | @Override
    method getChannelId (line 90) | @Override
    method invokeChaincode (line 95) | @Override
    method getState (line 101) | @Override
    method getStateValidationParameter (line 106) | @Override
    method putState (line 111) | @Override
    method setStateValidationParameter (line 116) | @Override
    method delState (line 119) | @Override
    method getStateByRange (line 124) | @Override
    method getStateByRangeWithPagination (line 129) | @Override
    method getStateByPartialCompositeKey (line 135) | @Override
    method getStateByPartialCompositeKey (line 140) | @Override
    method getStateByPartialCompositeKey (line 146) | @Override
    method getStateByPartialCompositeKeyWithPagination (line 151) | @Override
    method createCompositeKey (line 157) | @Override
    method splitCompositeKey (line 162) | @Override
    method getQueryResult (line 167) | @Override
    method getQueryResultWithPagination (line 172) | @Override
    method getHistoryForKey (line 178) | @Override
    method getPrivateData (line 183) | @Override
    method getPrivateDataHash (line 188) | @Override
    method getPrivateDataValidationParameter (line 193) | @Override
    method putPrivateData (line 198) | @Override
    method setPrivateDataValidationParameter (line 201) | @Override
    method delPrivateData (line 204) | @Override
    method purgePrivateData (line 207) | @Override
    method getPrivateDataByRange (line 210) | @Override
    method getPrivateDataByPartialCompositeKey (line 216) | @Override
    method getPrivateDataByPartialCompositeKey (line 222) | @Override
    method getPrivateDataByPartialCompositeKey (line 228) | @Override
    method getPrivateDataQueryResult (line 234) | @Override
    method setEvent (line 239) | @Override
    method getEvent (line 242) | @Override
    method getSignedProposal (line 247) | @Override
    method getTxTimestamp (line 252) | @Override
    method getCreator (line 257) | @Override
    method getTransient (line 262) | @Override
    method getBinding (line 267) | @Override
    method setStringArgs (line 272) | void setStringArgs(final List<String> args) {
    method buildSerializedIdentity (line 277) | public byte[] buildSerializedIdentity() {
    method setCertificate (line 288) | public void setCertificate(final String certificateToTest) {
    method getMspId (line 292) | @Override

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/ClientIdentityTest.java
  class ClientIdentityTest (line 19) | final class ClientIdentityTest {
    method clientIdentityWithoutAttributes (line 21) | @Test
    method clientIdentityWithAttributes (line 41) | @Test
    method clientIdentityWithMultipleAttributes (line 60) | @Test
    method clientIdentityWithLongDNs (line 83) | @Test
    method catchInvalidProtocolBufferException (line 102) | @Test
    method createClientIdentityWithDummyAttributesCert (line 113) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/ContextFactoryTest.java
  class ContextFactoryTest (line 17) | final class ContextFactoryTest {
    method getInstance (line 19) | @Test
    method createContext (line 26) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/ContextTest.java
  class ContextTest (line 14) | final class ContextTest {
    method getInstance (line 17) | @Test
    method getSetClientIdentity (line 26) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/ContractInterfaceTest.java
  class ContractInterfaceTest (line 16) | final class ContractInterfaceTest {
    method createContext (line 17) | @Test
    method unknownTransaction (line 23) | @Test
    method beforeTransaction (line 32) | @Test
    method afterTransaction (line 39) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/ContractRouterTest.java
  class ContractRouterTest (line 31) | final class ContractRouterTest {
    method testCreateFailsWithoutValidOptions (line 32) | @Test
    method testCreateAndScan (line 40) | @Test
    method testInit (line 60) | @Test
    method testInvokeTwoTxnsThatExist (line 88) | @Test
    method testInvokeTxnWithDefinedName (line 135) | @Test
    method testInvokeTwoTxnsWithDefaultNamespace (line 163) | @Test
    method testInvokeTxnWithDefinedNameUsingMethodName (line 210) | @Test
    method testInvokeContractThatDoesNotExist (line 237) | @Test
    method testInvokeTxnThatDoesNotExist (line 264) | @Test
    method testInvokeTxnThatReturnsNullString (line 291) | @Test
    method testInvokeTxnThatThrowsAnException (line 318) | @Test
    method testInvokeTxnThatThrowsAChaincodeException (line 344) | @Test
    method createContractRuntimeExceptions (line 371) | @Test
    method testStartingContractRouterWithStartingAChaincodeServer (line 378) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/MyType.java
  class MyType (line 13) | @DataType
    method setState (line 24) | public void setState(final String state) {
    method isStarted (line 28) | @JSONPropertyIgnore()
    method isStopped (line 33) | @JSONPropertyIgnore()
    method setValue (line 38) | public MyType setValue(final String value) {
    method getValue (line 43) | public String getValue() {
    method toString (line 47) | @Override

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/MyType2.java
  class MyType2 (line 12) | @DataType
    method setValue (line 35) | public MyType2 setValue(final String value) {
    method getValue (line 40) | public String getValue() {
    method toString (line 44) | @Override

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/TransactionExceptionTest.java
  class TransactionExceptionTest (line 15) | final class TransactionExceptionTest {
    class MyTransactionException (line 17) | class MyTransactionException extends ChaincodeException {
      method MyTransactionException (line 23) | MyTransactionException(final int errorCode) {
      method getPayload (line 28) | @Override
    method testNoArgConstructor (line 35) | @Test
    method testMessageArgConstructor (line 42) | @Test
    method testCauseArgConstructor (line 49) | @Test
    method testMessageAndCauseArgConstructor (line 57) | @Test
    method testMessageAndPayloadArgConstructor (line 65) | @Test
    method testMessagePayloadAndCauseArgConstructor (line 72) | @Test
    method testMessageAndStringPayloadArgConstructor (line 81) | @Test
    method testMessageStringPayloadAndCauseArgConstructor (line 88) | @Test
    method testSubclass (line 96) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/execution/ContractExecutionServiceTest.java
  class ContractExecutionServiceTest (line 36) | final class ContractExecutionServiceTest {
    method noReturnValue (line 37) | @Test
    method failureToInvoke (line 63) | @Test()
    method invokeWithDifferentSerializers (line 90) | @Test()

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/execution/JSONTransactionSerializerTest.java
  class JSONTransactionSerializerTest (line 24) | final class JSONTransactionSerializerTest {
    method toBuffer (line 25) | @Test
    class ComplexDataTypes (line 59) | @Nested
      method alltypes (line 63) | @Test
    class PrimitiveArrays (line 82) | @Nested
      method ints (line 85) | @Test
      method bytes (line 97) | @Test
      method floats (line 109) | @Test
      method booleans (line 121) | @Test
      method chars (line 133) | @Test
    class NestedArrays (line 146) | @Nested
      method ints (line 149) | @Test
      method longs (line 160) | @Test
      method doubles (line 171) | @Test
      method bytes (line 182) | @Test
      method shorts (line 193) | @Test
    method fromBufferObject (line 205) | @Test
    method toBufferPrimitive (line 222) | @Test
    method fromBufferErrors (line 263) | @Test
    class MyTestObject (line 274) | class MyTestObject {}

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/metadata/MetadataBuilderTest.java
  class MetadataBuilderTest (line 24) | final class MetadataBuilderTest {
    method setMetadataBuilderField (line 26) | private void setMetadataBuilderField(final String name, final Object v...
    method beforeAndAfterEach (line 33) | @BeforeEach
    method systemContract (line 43) | @Test
    method defaultSchemasNotLoadedFromNetwork (line 51) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/metadata/TypeSchemaTest.java
  class TypeSchemaTest (line 21) | final class TypeSchemaTest {
    method beforeEach (line 23) | @BeforeEach
    method putIfNotNull (line 26) | @Test
    method getType (line 42) | @Test
    method getFormat (line 53) | @Test
    method getRef (line 64) | @Test
    method getItems (line 75) | @Test
    class MyType (line 88) | @DataType
    method getTypeClass (line 91) | @Test
    method unknownConversions (line 138) | @Test
    method typeConvertPrimitives (line 157) | @Test
    method typeConvertObjects (line 187) | @Test
    method validate (line 222) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/routing/ContractDefinitionTest.java
  class ContractDefinitionTest (line 19) | final class ContractDefinitionTest {
    method constructor (line 20) | @Test
    method duplicateTransaction (line 27) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/routing/DataTypeDefinitionTest.java
  class DataTypeDefinitionTest (line 17) | final class DataTypeDefinitionTest {
    method constructor (line 18) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/routing/ParameterDefinitionTest.java
  class ParameterDefinitionTest (line 16) | final class ParameterDefinitionTest {
    method constructor (line 17) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/routing/PropertyDefinitionTest.java
  class PropertyDefinitionTest (line 16) | final class PropertyDefinitionTest {
    method constructor (line 17) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/routing/TxFunctionTest.java
  class TxFunctionTest (line 27) | final class TxFunctionTest {
    class TestObject (line 28) | @Contract()
      method testMethod1 (line 31) | @Transaction()
      method testMethod2 (line 34) | @Transaction()
      method wibble (line 37) | @Transaction()
    method constructor (line 41) | @Test
    method property (line 55) | @Test
    method invaldtxfn (line 76) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/routing/TypeRegistryTest.java
  class TypeRegistryTest (line 16) | final class TypeRegistryTest {
    method addDataType (line 17) | @Test
    method addDataTypeDefinition (line 26) | @Test
    method getAllDataTypes (line 36) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/contract/simplepath/ContractSimplePathTest.java
  class ContractSimplePathTest (line 33) | @ExtendWith(SystemStubsExtension.class)
    method afterTest (line 40) | @AfterEach
    method testContract (line 53) | @Test
    method newInvokeFn (line 69) | private ChaincodeMessage newInvokeFn(final String[] args) {
    method getLastReturnString (line 79) | private String getLastReturnString() throws Exception {
    method setLogLevel (line 84) | private void setLogLevel(final String logLevel) {

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/ledger/LedgerTest.java
  class LedgerTest (line 15) | final class LedgerTest {
    method getLedger (line 17) | @Test
    method getCollection (line 31) | @Test
    method getNamedCollection (line 46) | @Test
    method getOrganizationCollection (line 59) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/metrics/MetricsTest.java
  class MetricsTest (line 19) | final class MetricsTest {
    class TestProvider (line 21) | private static final class TestProvider implements MetricsProvider {
      method TestProvider (line 23) | public TestProvider() {}
      method setTaskMetricsCollector (line 25) | @Override
      method initialize (line 28) | @Override
    class Initialize (line 32) | @Nested
      method metricsDisabled (line 36) | @Test
      method metricsEnabledUnknownProvider (line 42) | @Test
      method metricsNoProvider (line 56) | @Test
      method metricsValid (line 65) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/metrics/impl/DefaultProviderTest.java
  class DefaultProviderTest (line 21) | final class DefaultProviderTest {
    method allMethods (line 23) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/ChaincodeBaseTest.java
  class ChaincodeBaseTest (line 36) | @ExtendWith(SystemStubsExtension.class)
    method testNewSuccessResponseEmpty (line 41) | @Test
    method testNewSuccessResponseWithMessage (line 51) | @Test
    method testNewSuccessResponseWithPayload (line 62) | @Test
    method testNewSuccessResponseWithMessageAndPayload (line 75) | @Test
    method testNewErrorResponseEmpty (line 88) | @Test
    method testNewErrorResponseWithMessage (line 98) | @Test
    method testNewErrorResponseWithPayload (line 109) | @Test
    method testNewErrorResponseWithMessageAndPayload (line 122) | @Test
    method testNewErrorResponseWithException (line 135) | @Test
    method testNewErrorResponseWithChaincodeException (line 146) | @Test
    method testOptions (line 157) | @Test
    method testUnsetOptionId (line 199) | @Test
    method testUnsetOptionClientCertPath (line 207) | @Test
    method testUnsetOptionClientKeyPath (line 218) | @Test
    method testNewChannelBuilder (line 230) | @Test
    method testInitializeLogging (line 247) | @Test
    method testStartFailsWithoutValidOptions (line 293) | @Test
    method setLogLevelForChaincode (line 314) | private static void setLogLevelForChaincode(
    method connectChaincodeBase (line 325) | @Test
    method connectChaincodeBaseNull (line 356) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/ChaincodeServerImplTest.java
  class ChaincodeServerImplTest (line 20) | @ExtendWith(SystemStubsExtension.class)
    method setEnv (line 25) | @BeforeEach
    method clearEnv (line 36) | @AfterEach
    method init (line 47) | @Test
    method initEnvNotSet (line 58) | @Test
    method startAndStop (line 70) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/ChaincodeStubTest.java
  class ChaincodeStubTest (line 22) | final class ChaincodeStubTest {
    class FakeStub (line 24) | @SuppressWarnings("PMD.ReturnEmptyCollectionRatherThanNull")
      method getArgs (line 27) | @Override
      method getStringArgs (line 33) | @Override
      method getFunction (line 39) | @Override
      method getParameters (line 45) | @Override
      method getTxId (line 51) | @Override
      method getChannelId (line 57) | @Override
      method invokeChaincode (line 63) | @Override
      method getState (line 69) | @Override
      method getStateValidationParameter (line 74) | @Override
      method putState (line 80) | @Override
      method setStateValidationParameter (line 86) | @Override
      method delState (line 92) | @Override
      method getStateByRange (line 98) | @Override
      method getStateByRangeWithPagination (line 104) | @Override
      method getStateByPartialCompositeKey (line 111) | @Override
      method getStateByPartialCompositeKey (line 117) | @Override
      method getStateByPartialCompositeKey (line 124) | @Override
      method getStateByPartialCompositeKeyWithPagination (line 130) | @Override
      method createCompositeKey (line 137) | @Override
      method splitCompositeKey (line 143) | @Override
      method getQueryResult (line 149) | @Override
      method getQueryResultWithPagination (line 155) | @Override
      method getHistoryForKey (line 162) | @Override
      method getPrivateData (line 168) | @Override
      method getPrivateDataHash (line 173) | @Override
      method getPrivateDataValidationParameter (line 179) | @Override
      method putPrivateData (line 185) | @Override
      method setPrivateDataValidationParameter (line 191) | @Override
      method delPrivateData (line 197) | @Override
      method purgePrivateData (line 203) | @Override
      method getPrivateDataByRange (line 209) | @Override
      method getPrivateDataByPartialCompositeKey (line 216) | @Override
      method getPrivateDataByPartialCompositeKey (line 223) | @Override
      method getPrivateDataByPartialCompositeKey (line 230) | @Override
      method getPrivateDataQueryResult (line 237) | @Override
      method setEvent (line 243) | @Override
      method getEvent (line 249) | @Override
      method getSignedProposal (line 255) | @Override
      method getTxTimestamp (line 261) | @Override
      method getCreator (line 267) | @Override
      method getTransient (line 273) | @Override
      method getBinding (line 279) | @Override
      method getMspId (line 285) | @Override
    method testDefaultMethods (line 292) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/ChaincodeTest.java
  class ChaincodeTest (line 14) | final class ChaincodeTest {
    method testResponse (line 15) | @Test
    method testResponseWithCode (line 24) | @Test
    method testStatus (line 48) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/ChatChaincodeWithPeerTest.java
  class ChatChaincodeWithPeerTest (line 43) | @ExtendWith(SystemStubsExtension.class)
    method setEnv (line 50) | @BeforeEach
    method clearEnv (line 60) | @AfterEach
    method initNull (line 70) | @Test
    method init (line 80) | @Test
    method initEmptyId (line 97) | @Test
    method connectEnvNotSet (line 116) | @Test
    method connectNull (line 126) | @Test
    method connectAndReceiveRegister (line 139) | @Test
    method connectAndReceiveRegisterComplete (line 223) | @Test
    method connectAndReceiveRegisterException (line 253) | @Test
    method connectOnCompletedException (line 278) | @Test
    method testMockChaincodeBase (line 310) | @Test
    method testMockChaincodeBaseThrowIOException (line 331) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/NettyGrpcServerTest.java
  class NettyGrpcServerTest (line 23) | @ExtendWith(SystemStubsExtension.class)
    method setEnv (line 28) | @BeforeEach
    method clearEnv (line 39) | @AfterEach
    method initNoTls (line 50) | @Test
    method validationNoChaincodeServerPropertiesg (line 62) | @Test
    method validationPortChaincodeServer (line 73) | @Test
    method validationKeepAliveTimeMinutes (line 87) | @Test
    method validationKeepAliveTimeoutSeconds (line 101) | @Test
    method validationPermitKeepAliveTimeMinutes (line 115) | @Test
    method validationMaxConnectionAgeSeconds (line 129) | @Test
    method validationMaxInboundMetadataSize (line 143) | @Test
    method validationMaxInboundMessageSize (line 157) | @Test
    method validationTlsEnabledButKeyNotSet (line 171) | @Test
    method initNull (line 188) | @Test
    method initNullEnvNotSet (line 198) | @Test
    method initEnvNotSet (line 206) | @Test
    method initEnvSetPortChaincodeServerAndCoreChaincodeIdName (line 215) | @Test
    method startAndStopSetCoreChaincodeIdName (line 231) | @Test
    method startAndStop (line 265) | @Test
    method startAndStopTlsPassword (line 292) | @Test
    method startAndStopTlsWithoutPassword (line 323) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/chaincode/EmptyChaincode.java
  class EmptyChaincode (line 12) | public final class EmptyChaincode extends ChaincodeBase {
    method init (line 13) | @Override
    method invoke (line 18) | @Override

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/ext/sbe/StateBasedEndorsementTest.java
  class StateBasedEndorsementTest (line 13) | final class StateBasedEndorsementTest {
    method testRoleType (line 14) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/ext/sbe/impl/StateBasedEndorsementFactoryTest.java
  class StateBasedEndorsementFactoryTest (line 14) | final class StateBasedEndorsementFactoryTest {
    method getInstance (line 15) | @Test
    method newStateBasedEndorsement (line 21) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/ext/sbe/impl/StateBasedEndorsementImplTest.java
  class StateBasedEndorsementImplTest (line 23) | final class StateBasedEndorsementImplTest {
    method addOrgs (line 25) | @Test
    method delOrgs (line 41) | @Test
    method listOrgs (line 68) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/fvt/ChaincodeFVTest.java
  class ChaincodeFVTest (line 63) | @ExtendWith(SystemStubsExtension.class)
    method afterTest (line 71) | @AfterEach
    method testRegister (line 79) | @Test
    method testRegisterAndEmptyInit (line 96) | @Test
    method testInitAndInvoke (line 132) | @Test
    method testStateValidationParameter (line 206) | @Test
    method testInvokeRangeQ (line 274) | @Test
    method testGetQueryResult (line 353) | @Test
    method testGetHistoryForKey (line 428) | @Test
    method testInvokeChaincode (line 492) | @Test
    method testErrorInitInvoke (line 542) | @Test
    method testStreamShutdown (line 598) | @Test
    method testChaincodeLogLevel (line 636) | @Test
    method setLogLevel (line 655) | private void setLogLevel(final String logLevel) {

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/impl/ChaincodeMessageFactoryTest.java
  class ChaincodeMessageFactoryTest (line 18) | final class ChaincodeMessageFactoryTest {
    method testNewGetPrivateDataHashEventMessage (line 35) | @Test
    method testNewGetStateEventMessage (line 40) | @Test
    method testNewGetStateMetadataEventMessage (line 45) | @Test
    method testNewPutStateEventMessage (line 50) | @Test
    method testNewPutStateMetadataEventMessage (line 55) | @Test
    method testNewDeleteStateEventMessage (line 60) | @Test
    method testNewErrorEventMessage (line 65) | @Test
    method testNewCompletedEventMessage (line 72) | @Test
    method testNewInvokeChaincodeMessage (line 78) | @Test
    method testNewRegisterChaincodeMessage (line 83) | @Test
    method testNewEventMessageTypeStringStringByteString (line 88) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/impl/ChaincodeSupportClientTest.java
  class ChaincodeSupportClientTest (line 26) | @ExtendWith(SystemStubsExtension.class)
    method testStartInvocationTaskManagerAndRequestObserverNull (line 31) | @Test
    method testStartInvocationTaskManagerNullAndRequestObserver (line 61) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/impl/InnvocationTaskManagerTest.java
  class InnvocationTaskManagerTest (line 30) | @ExtendWith(SystemStubsExtension.class)
    method setEnv (line 35) | @BeforeEach
    method clearEnv (line 45) | @AfterEach
    method getManager (line 55) | @Test
    method getManagerChaincodeIDNull (line 71) | @Test
    method getManagerChaincodeBaseNull (line 90) | @Test
    method onChaincodeMessage (line 104) | @Test
    method setResponseConsumer (line 123) | @Test
    method registerException (line 140) | @Test
    method onChaincodeMessageREGISTER (line 158) | @Test
    method onChaincodeMessageInvokeChaincode (line 181) | @Test
    method onChaincodeMessagePutState (line 206) | @Test
    method shutdown (line 231) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/impl/InvocationStubImplTest.java
  class InvocationStubImplTest (line 28) | final class InvocationStubImplTest {
    class GetStateByRangeTests (line 34) | @Nested
      method beforeEach (line 41) | @BeforeEach
      method regular (line 54) | @Test
      method nullvalues (line 70) | @Test
      method unbounded (line 87) | @Test
      method simplekeys (line 104) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/impl/InvocationTaskManagerTest.java
  class InvocationTaskManagerTest (line 26) | final class InvocationTaskManagerTest {
    method setup (line 32) | @BeforeEach
    method teardown (line 47) | @AfterEach
    method register (line 54) | @Test
    method onMessageTestTx (line 59) | @Test
    method onWrongCreatedState (line 70) | @Test
    method onWrongEstablishedState (line 82) | @Test
    method onErrorResponse (line 95) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/impl/KeyModificationImplTest.java
  class KeyModificationImplTest (line 18) | final class KeyModificationImplTest {
    method testKeyModificationImpl (line 20) | @Test
    method testGetTxId (line 30) | @Test
    method testGetValue (line 39) | @Test
    method testGetStringValue (line 48) | @Test
    method testGetTimestamp (line 57) | @Test
    method testIsDeleted (line 68) | @Test
    method testHashCode (line 79) | @Test
    method testEquals (line 93) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/impl/KeyValueImplTest.java
  class KeyValueImplTest (line 16) | final class KeyValueImplTest {
    method testKeyValueImpl (line 18) | @Test
    method testGetKey (line 26) | @Test
    method testGetValue (line 35) | @Test
    method testGetStringValue (line 44) | @Test
    method testHashCode (line 53) | @Test
    method testEquals (line 61) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/impl/QueryResultsIteratorWithMetadataImplTest.java
  class QueryResultsIteratorWithMetadataImplTest (line 19) | final class QueryResultsIteratorWithMetadataImplTest {
    method getMetadata (line 22) | @Test
    method getInvalidMetadata (line 30) | @Test
    method prepareQueryResponse (line 37) | private QueryResponse prepareQueryResponse() {
    method prepareQueryResponseWrongMeta (line 49) | private QueryResponse prepareQueryResponseWrongMeta() {

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/ledger/CompositeKeyTest.java
  class CompositeKeyTest (line 19) | final class CompositeKeyTest {
    method testValidateSimpleKeys (line 20) | @Test
    method testValidateSimpleKeysException (line 25) | @Test
    method testCompositeKeyStringStringArray (line 31) | @Test
    method testCompositeKeyStringListOfString (line 39) | @Test
    method testEmptyAttributes (line 47) | @Test
    method testCompositeKeyWithInvalidObjectTypeDelimiter (line 55) | @Test
    method testCompositeKeyWithInvalidAttributeDelimiter (line 61) | @Test
    method testCompositeKeyWithInvalidObjectTypeMaxCodePoint (line 67) | @Test
    method testCompositeKeyWithInvalidAttributeMaxCodePoint (line 73) | @Test
    method testGetObjectType (line 79) | @Test
    method testGetAttributes (line 85) | @Test
    method testToString (line 93) | @Test
    method testParseCompositeKey (line 99) | @Test
    method testParseCompositeKeyInvalidObjectType (line 108) | @Test
    method testParseCompositeKeyInvalidAttribute (line 115) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/ChaincodeMockPeer.java
  class ChaincodeMockPeer (line 26) | public final class ChaincodeMockPeer {
    method ChaincodeMockPeer (line 40) | public ChaincodeMockPeer(final List<ScenarioStep> scenario, final int ...
    method start (line 48) | @SuppressWarnings("PMD.SystemPrintln")
    method stop (line 64) | public void stop() {
    method send (line 79) | public void send(final ChaincodeMessage msg) {
    method getLastExecutedStep (line 91) | public int getLastExecutedStep() {
    method getLastMessageRcvd (line 96) | public ChaincodeMessage getLastMessageRcvd() {
    method getAllReceivedMessages (line 100) | public List<ChaincodeMessage> getAllReceivedMessages() {
    method getLastMessageSend (line 105) | public ChaincodeMessage getLastMessageSend() {
    method startServer (line 116) | public static ChaincodeMockPeer startServer(final List<ScenarioStep> s...
    class ChaincodeMockPeerService (line 122) | private static class ChaincodeMockPeerService extends ChaincodeSupport...
      method ChaincodeMockPeerService (line 133) | ChaincodeMockPeerService(final List<ScenarioStep> scenario) {
      method send (line 138) | public void send(final ChaincodeMessage msg) {
      method register (line 151) | @Override
    method checkScenarioStepEnded (line 208) | @SuppressWarnings("PMD.SystemPrintln")

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/CompleteStep.java
  class CompleteStep (line 14) | public final class CompleteStep implements ScenarioStep {
    method expected (line 15) | @Override
    method next (line 20) | @Override

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/DelValueStep.java
  class DelValueStep (line 16) | public final class DelValueStep implements ScenarioStep {
    method expected (line 19) | @Override
    method next (line 25) | @Override

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/ErrorResponseStep.java
  class ErrorResponseStep (line 13) | public final class ErrorResponseStep implements ScenarioStep {
    method expected (line 14) | @Override
    method next (line 19) | @Override

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/GetHistoryForKeyStep.java
  class GetHistoryForKeyStep (line 19) | public final class GetHistoryForKeyStep implements ScenarioStep {
    method GetHistoryForKeyStep (line 30) | public GetHistoryForKeyStep(final boolean hasNext, final String... val...
    method expected (line 35) | @Override
    method next (line 41) | @Override

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/GetQueryResultStep.java
  class GetQueryResultStep (line 14) | public final class GetQueryResultStep extends QueryResultStep {
    method GetQueryResultStep (line 22) | public GetQueryResultStep(final boolean hasNext, final String... vals) {
    method expected (line 26) | @Override

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/GetStateByRangeStep.java
  class GetStateByRangeStep (line 14) | public final class GetStateByRangeStep extends QueryResultStep {
    method GetStateByRangeStep (line 22) | public GetStateByRangeStep(final boolean hasNext, final String... vals) {
    method expected (line 26) | @Override

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/GetStateMetadata.java
  class GetStateMetadata (line 20) | public final class GetStateMetadata implements ScenarioStep {
    method GetStateMetadata (line 25) | public GetStateMetadata(final StateBasedEndorsement sbe) {
    method expected (line 29) | @Override
    method next (line 35) | @Override

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/GetValueStep.java
  class GetValueStep (line 14) | public final class GetValueStep implements ScenarioStep {
    method GetValueStep (line 19) | public GetValueStep(final String val) {
    method expected (line 23) | @Override
    method next (line 29) | @Override

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/InvokeChaincodeStep.java
  class InvokeChaincodeStep (line 19) | public final class InvokeChaincodeStep implements ScenarioStep {
    method expected (line 22) | @Override
    method next (line 31) | @Override

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/PurgeValueStep.java
  class PurgeValueStep (line 16) | public final class PurgeValueStep implements ScenarioStep {
    method expected (line 20) | @Override
    method next (line 26) | @Override

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/PutStateMetadata.java
  class PutStateMetadata (line 20) | public final class PutStateMetadata implements ScenarioStep {
    method PutStateMetadata (line 24) | public PutStateMetadata(final StateBasedEndorsement sbe) {
    method expected (line 34) | @Override
    method next (line 52) | @Override

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/PutValueStep.java
  class PutValueStep (line 20) | public final class PutValueStep implements ScenarioStep {
    method PutValueStep (line 29) | public PutValueStep(final String val) {
    method expected (line 39) | @Override
    method next (line 52) | @Override

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/QueryCloseStep.java
  class QueryCloseStep (line 16) | public final class QueryCloseStep implements ScenarioStep {
    method expected (line 19) | @Override
    method next (line 26) | @Override

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/QueryNextStep.java
  class QueryNextStep (line 14) | public final class QueryNextStep extends QueryResultStep {
    method QueryNextStep (line 22) | public QueryNextStep(final boolean hasNext, final String... vals) {
    method expected (line 26) | @Override

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/QueryResultStep.java
  class QueryResultStep (line 20) | public abstract class QueryResultStep implements ScenarioStep {
    method QueryResultStep (line 31) | QueryResultStep(final boolean hasNext, final String... vals) {
    method next (line 41) | @Override

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/RegisterStep.java
  class RegisterStep (line 17) | public final class RegisterStep implements ScenarioStep {
    method expected (line 21) | @Override
    method next (line 27) | @Override

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/mock/peer/ScenarioStep.java
  type ScenarioStep (line 12) | public interface ScenarioStep {
    method expected (line 19) | boolean expected(ChaincodeMessage msg);
    method next (line 26) | List<ChaincodeMessage> next();

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/utils/MessageUtil.java
  class MessageUtil (line 13) | public final class MessageUtil {
    method MessageUtil (line 15) | private MessageUtil() {}
    method newEventMessage (line 27) | public static ChaincodeMessage newEventMessage(

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/utils/TimeoutUtil.java
  class TimeoutUtil (line 15) | public final class TimeoutUtil {
    method TimeoutUtil (line 17) | private TimeoutUtil() {}
    method runWithTimeout (line 19) | public static void runWithTimeout(final Runnable callable, final long ...

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/traces/TracesTest.java
  class TracesTest (line 22) | final class TracesTest {
    class TestProvider (line 24) | private static final class TestProvider implements TracesProvider {
      method TestProvider (line 26) | public TestProvider() {}
      method initialize (line 28) | @Override
      method createSpan (line 31) | @Override
    class Initialize (line 37) | @Nested
      method tracesDisabled (line 41) | @Test
      method tracesEnabledUnknownProvider (line 47) | @Test
      method tracesNoProvider (line 61) | @Test
      method tracesOpenTelemetryProvider (line 70) | @Test
      method tracesValid (line 80) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/traces/impl/DefaultProviderTest.java
  class DefaultProviderTest (line 15) | final class DefaultProviderTest {
    method testDefaultProvider (line 17) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/traces/impl/OpenTelemetryPropertiesTest.java
  class OpenTelemetryPropertiesTest (line 24) | final class OpenTelemetryPropertiesTest {
    method testOverrideValue (line 26) | @Test
    method testCanGetDurationDays (line 33) | @Test
    method testCanGetDurationHours (line 39) | @Test
    method testCanGetDurationMinutes (line 45) | @Test
    method testCanGetDurationSeconds (line 51) | @Test
    method testCanGetDurationMilliSeconds (line 57) | @Test
    method testCanGetDurationInvalid (line 63) | @Test
    method testGetDouble (line 69) | @Test
    method testGetDoubleInvalid (line 76) | @Test
    method testGetLong (line 82) | @Test
    method testGetInt (line 89) | @Test
    method testGetBoolean (line 96) | @Test
    method testGetList (line 103) | @Test
    method testGetMap (line 110) | @Test
    method testGetMapInvalid (line 120) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/traces/impl/OpenTelemetryTracesProviderTest.java
  class OpenTelemetryTracesProviderTest (line 40) | final class OpenTelemetryTracesProviderTest {
    class ContextGetterChaincode (line 42) | private final class ContextGetterChaincode extends ChaincodeBase {
      method init (line 44) | @Override
      method invoke (line 49) | @Override
      method getChaincodeConfig (line 54) | @Override
    method testProvider (line 60) | @Test
    method testTracing (line 70) | @Test

FILE: fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/traces/impl/TestSpanExporterProvider.java
  class TestSpanExporterProvider (line 17) | public final class TestSpanExporterProvider implements ConfigurableSpanE...
    method export (line 22) | @Override
    method flush (line 28) | @Override
    method shutdown (line 33) | @Override
    method createExporter (line 39) | @Override
    method getName (line 44) | @Override
Condensed preview — 334 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,048K chars).
[
  {
    "path": ".github/dependabot.yml",
    "chars": 1306,
    "preview": "version: 2\n\nmulti-ecosystem-groups:\n  java:\n    schedule:\n      interval: daily\n\nupdates:\n  - package-ecosystem: docker\n"
  },
  {
    "path": ".github/settings.yml",
    "chars": 545,
    "preview": "#\n# SPDX-License-Identifier: Apache-2.0\n#\n\nrepository:\n  name: fabric-chaincode-java\n  description: Hyperledger Fabric C"
  },
  {
    "path": ".github/workflows/pull_request.yml",
    "chars": 548,
    "preview": "# Copyright the Hyperledger Fabric contributors. All rights reserved.\n# SPDX-License-Identifier: Apache-2.0\n\nname: Pull "
  },
  {
    "path": ".github/workflows/push.yml",
    "chars": 235,
    "preview": "# Copyright the Hyperledger Fabric contributors. All rights reserved.\n# SPDX-License-Identifier: Apache-2.0\n\nname: Push\n"
  },
  {
    "path": ".github/workflows/release.yml",
    "chars": 6418,
    "preview": "# Copyright the Hyperledger Fabric contributors. All rights reserved.\n#\n# SPDX-License-Identifier: Apache-2.0\n\nname: Rel"
  },
  {
    "path": ".github/workflows/scan.yml",
    "chars": 998,
    "preview": "name: \"Scheduled vulnerability scan\"\r\n\r\non:\r\n  workflow_call:\r\n    inputs:\r\n      ref:\r\n        description: Branch, tag"
  },
  {
    "path": ".github/workflows/schedule.yml",
    "chars": 138,
    "preview": "name: Scheduled build\n\non:\n  schedule:\n    - cron: \"5 4 * * 0\"\n  workflow_dispatch:\n\njobs:\n  main:\n    uses: ./.github/w"
  },
  {
    "path": ".github/workflows/scheduled-scan.yml",
    "chars": 813,
    "preview": "name: \"Scheduled vulnerability scan\"\r\n\r\non:\r\n  schedule:\r\n    - cron: \"20 3 * * *\"\r\n  workflow_dispatch:\r\n\r\npermissions:"
  },
  {
    "path": ".github/workflows/test.yml",
    "chars": 3786,
    "preview": "# Copyright the Hyperledger Fabric contributors. All rights reserved.\n#\n# SPDX-License-Identifier: Apache-2.0\n\nname: Tes"
  },
  {
    "path": ".gitignore",
    "chars": 509,
    "preview": "/.settings/\n/.project\n*.log\n*.swp\n.gradletasknamecache\n.classpath\n**/bin/\n/build/\nbuild/*\nsettings-gradle.lockfile\nconfi"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 38083,
    "preview": "# Changelog\n\nNotable changes in each release are documented on the project's [GitHub releases](https://github.com/hyperl"
  },
  {
    "path": "CODEOWNERS",
    "chars": 124,
    "preview": "# SPDX-License-Identifier: Apache-2.0\n\n# Fabric Chaincode Java Maintainers\n*\t@hyperledger/fabric-chaincode-java-maintain"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 597,
    "preview": "Code of Conduct Guidelines\n==========================\n\nPlease review the Hyperledger [Code of\nConduct](https://wiki.hype"
  },
  {
    "path": "COMPATIBILITY.md",
    "chars": 3108,
    "preview": "# Support and Compatibility\n\nGithub is used for code base management and issue tracking.\n\n## Summary of Compatibility\n\nT"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 4045,
    "preview": "# Contributing to fabric-chaincode-java\n\nWe welcome contributions to the [Hyperledger Fabric](https://hyperledger-fabric"
  },
  {
    "path": "LICENSE",
    "chars": 11358,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "MAINTAINERS.md",
    "chars": 2546,
    "preview": "# Maintainers\n\n| Name         | GitHub                                                | Chat            | email         "
  },
  {
    "path": "Makefile",
    "chars": 1193,
    "preview": "#\r\n# SPDX-License-Identifier: Apache-2.0\r\n#\r\n\r\nbin_dir := bin\r\nosv-scanner := $(bin_dir)/osv-scanner\r\n\r\nkernel_name := $"
  },
  {
    "path": "README.md",
    "chars": 4305,
    "preview": "# Hyperledger Fabric Chaincode Java\n\n[![Build Status](https://dev.azure.com/Hyperledger/Fabric-Chaincode-Java/_apis/buil"
  },
  {
    "path": "RELEASING.md",
    "chars": 1767,
    "preview": "# Releasing\n\nThe following artifacts are created as a result of releasing Fabric Chaincode Java:\n\n- `fabric-javaenv` Doc"
  },
  {
    "path": "SECURITY.md",
    "chars": 1027,
    "preview": "# Hyperledger Security Policy\n\n## Reporting a Security Bug\n\nIf you think you have discovered a security issue in any of "
  },
  {
    "path": "build.gradle",
    "chars": 2567,
    "preview": "/*\n * Copyright IBM Corp. 2018 All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nplugins {\n    id \"com"
  },
  {
    "path": "docs/404.md",
    "chars": 192,
    "preview": "---\ntitle: \"404 - Page Not Found\"\npermalink: /404.html\n---\n\n## The page you wanted does not exist\n\nIf you were looking f"
  },
  {
    "path": "docs/_config.yml",
    "chars": 96,
    "preview": "theme: minima\ntitle: \"fabric-chaincode-java\"\nreleases:\n  - main\n  - release-1.4\n  - release-2.2\n"
  },
  {
    "path": "docs/_includes/footer.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "docs/_includes/header.html",
    "chars": 1094,
    "preview": "<header class=\"site-header\">\n\n  <div class=\"wrapper\">\n    <a class=\"site-title\" rel=\"author\" href=\"{{ \"/\" | relative_url"
  },
  {
    "path": "docs/_includes/javadocs.html",
    "chars": 169,
    "preview": "<ul>\n  {%- for release in site.releases -%}\n    <li><a class=\"page-link\" href=\"{{ release | relative_url }}/api/\">{{ rel"
  },
  {
    "path": "docs/index.md",
    "chars": 1725,
    "preview": "---\nlayout: home\n---\n\nHyperledger Fabric offers a number of SDKs to support developing smart contracts (chaincode)\nin va"
  },
  {
    "path": "examples/fabric-contract-example-as-service/Dockerfile",
    "chars": 697,
    "preview": "# Copyright 2019 IBM All Rights Reserved.\n# SPDX-License-Identifier: Apache-2.0\n\n# Example multi-stage dockerfile for Ja"
  },
  {
    "path": "examples/fabric-contract-example-as-service/README.md",
    "chars": 1456,
    "preview": "# Java Chaincode -as-a-service\n\nThis example shows how to start the chaincode in it's 'as-a-service' mode.\nNote that thi"
  },
  {
    "path": "examples/fabric-contract-example-as-service/build.gradle",
    "chars": 1122,
    "preview": "plugins {\n    id 'com.gradleup.shadow' version '9.3.1'\n    id 'java'\n}\n\nversion = '0.0.1'\n\nrepositories {\n    mavenCentr"
  },
  {
    "path": "examples/fabric-contract-example-as-service/src/main/java/org/example/contract/MyAsset.java",
    "chars": 782,
    "preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.example.contract;\n\nimport org.hyperledger.fabric.contract.ann"
  },
  {
    "path": "examples/fabric-contract-example-as-service/src/main/java/org/example/contract/MyAssetContract.java",
    "chars": 2314,
    "preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.example.contract;\n\nimport static java.nio.charset.StandardChar"
  },
  {
    "path": "examples/fabric-contract-example-as-service/src/test/java/org/example/MyAssetContractTest.java",
    "chars": 5900,
    "preview": "/*\n * SPDX-License-Identifier: Apache License 2.0\n */\n\npackage org.example;\n\nimport static java.nio.charset.StandardChar"
  },
  {
    "path": "examples/fabric-contract-example-gradle/.gitignore",
    "chars": 20,
    "preview": ".gradle/\nbuild/\nbin/"
  },
  {
    "path": "examples/fabric-contract-example-gradle/README.md",
    "chars": 171,
    "preview": "This example needs to use gradle4.6  please install this first\n\neg using sdkman\n\n`sdk install gradle 4.6`\n\n\nand then add"
  },
  {
    "path": "examples/fabric-contract-example-gradle/build.gradle",
    "chars": 1145,
    "preview": "plugins {\n    id 'com.gradleup.shadow' version '9.3.1'\n    id 'java'\n}\n\nversion = '0.0.1'\n\nrepositories {\n    mavenCentr"
  },
  {
    "path": "examples/fabric-contract-example-gradle/src/main/java/org/example/MyAsset.java",
    "chars": 832,
    "preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.example;\n\nimport org.hyperledger.fabric.contract.annotation.C"
  },
  {
    "path": "examples/fabric-contract-example-gradle/src/main/java/org/example/MyAssetContract.java",
    "chars": 3003,
    "preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.example;\n\nimport org.hyperledger.fabric.contract.Context;\nimpo"
  },
  {
    "path": "examples/fabric-contract-example-gradle/src/test/java/org/example/MyAssetContractTest.java",
    "chars": 5533,
    "preview": "/*\n * SPDX-License-Identifier: Apache License 2.0\n */\n\npackage org.example;\nimport static java.nio.charset.StandardChars"
  },
  {
    "path": "examples/fabric-contract-example-gradle-kotlin/.fabricignore",
    "chars": 108,
    "preview": "#\n# SPDX-License-Identifier: Apache-2.0\n#\n\n/.classpath\n/.git/\n/.gradle/\n/.project\n/.settings/\n/bin/\n/build/\n"
  },
  {
    "path": "examples/fabric-contract-example-gradle-kotlin/.gitignore",
    "chars": 101,
    "preview": "#\n# SPDX-License-Identifier: Apache-2.0\n#\n\n/.classpath\n/.gradle/\n/.project\n/.settings/\n/bin/\n/build/\n"
  },
  {
    "path": "examples/fabric-contract-example-gradle-kotlin/build.gradle.kts",
    "chars": 1180,
    "preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\nimport com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar\n\n\nplugin"
  },
  {
    "path": "examples/fabric-contract-example-gradle-kotlin/gradle/wrapper/gradle-wrapper.properties",
    "chars": 250,
    "preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributi"
  },
  {
    "path": "examples/fabric-contract-example-gradle-kotlin/gradlew",
    "chars": 8669,
    "preview": "#!/bin/sh\n\n#\n# Copyright © 2015-2021 the original authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "examples/fabric-contract-example-gradle-kotlin/gradlew.bat",
    "chars": 2918,
    "preview": "@rem\r\n@rem Copyright 2015 the original author or authors.\r\n@rem\r\n@rem Licensed under the Apache License, Version 2.0 (th"
  },
  {
    "path": "examples/fabric-contract-example-gradle-kotlin/settings.gradle.kts",
    "chars": 82,
    "preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\n\nrootProject.name = \"gradle-kotlin\"\n"
  },
  {
    "path": "examples/fabric-contract-example-gradle-kotlin/src/main/kotlin/org/example/MyAsset.kt",
    "chars": 547,
    "preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.example\n\nimport org.hyperledger.fabric.contract.annotation.Da"
  },
  {
    "path": "examples/fabric-contract-example-gradle-kotlin/src/main/kotlin/org/example/MyAssetContract.kt",
    "chars": 2588,
    "preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.example\n\nimport org.hyperledger.fabric.contract.Context\nimpor"
  },
  {
    "path": "examples/fabric-contract-example-gradle-kotlin/src/test/kotlin/org/example/MyAssetContractTest.kt",
    "chars": 4385,
    "preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.example\n\nimport org.junit.jupiter.api.BeforeEach\nimport org.j"
  },
  {
    "path": "examples/fabric-contract-example-maven/.gitignore",
    "chars": 6,
    "preview": "target"
  },
  {
    "path": "examples/fabric-contract-example-maven/pom.xml",
    "chars": 4348,
    "preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLoca"
  },
  {
    "path": "examples/fabric-contract-example-maven/src/main/java/org/example/MyAsset.java",
    "chars": 832,
    "preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.example;\n\nimport org.hyperledger.fabric.contract.annotation.C"
  },
  {
    "path": "examples/fabric-contract-example-maven/src/main/java/org/example/MyAssetContract.java",
    "chars": 3027,
    "preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.example;\n\nimport org.hyperledger.fabric.contract.Context;\nimpo"
  },
  {
    "path": "examples/fabric-contract-example-maven/src/test/java/org/example/MyAssetContractTest.java",
    "chars": 5533,
    "preview": "/*\n * SPDX-License-Identifier: Apache License 2.0\n */\n\npackage org.example;\nimport static java.nio.charset.StandardChars"
  },
  {
    "path": "examples/ledger-api/.gitignore",
    "chars": 20,
    "preview": ".gradle/\nbuild/\nbin/"
  },
  {
    "path": "examples/ledger-api/README.md",
    "chars": 171,
    "preview": "This example needs to use gradle4.6  please install this first\n\neg using sdkman\n\n`sdk install gradle 4.6`\n\n\nand then add"
  },
  {
    "path": "examples/ledger-api/build.gradle",
    "chars": 1141,
    "preview": "plugins {\n    id 'com.gradleup.shadow' version '9.3.1'\n    id 'java'\n}\n\nversion '0.0.1'\n\nrepositories {\n    mavenCentral"
  },
  {
    "path": "examples/ledger-api/src/main/java/org/example/LedgerAPIContract.java",
    "chars": 2350,
    "preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.example;\n\nimport org.hyperledger.fabric.contract.Context;\nimpo"
  },
  {
    "path": "examples/ledger-api/src/main/java/org/example/MyAsset.java",
    "chars": 832,
    "preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.example;\n\nimport org.hyperledger.fabric.contract.annotation.C"
  },
  {
    "path": "fabric-chaincode-docker/.gitignore",
    "chars": 6,
    "preview": "/bin/\n"
  },
  {
    "path": "fabric-chaincode-docker/Dockerfile",
    "chars": 2188,
    "preview": "ARG JAVA_IMAGE=eclipse-temurin:25-jdk\n\nFROM ${JAVA_IMAGE} AS builder\n\nRUN apt-get update \\\n    && apt-get install -y cur"
  },
  {
    "path": "fabric-chaincode-docker/README.md",
    "chars": 741,
    "preview": "# Quick reference\n\n- **Maintained by**:  \n  [The Fabric Java chaincode maintainers](https://github.com/hyperledger/fabri"
  },
  {
    "path": "fabric-chaincode-docker/build.gradle",
    "chars": 1650,
    "preview": "/*\n * Copyright IBM Corp. 2018 All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nplugins {\n    id 'com"
  },
  {
    "path": "fabric-chaincode-docker/build.sh",
    "chars": 1920,
    "preview": "#!/usr/bin/env bash\nset -ex\n\nINPUT_DIR=/chaincode/input\nOUTPUT_DIR=/chaincode/output\nTMP_DIR=$(mktemp -d)\n\nNUM_JARS=$(fi"
  },
  {
    "path": "fabric-chaincode-docker/start",
    "chars": 740,
    "preview": "#!/usr/bin/env bash\nset -ex\n\nROOT_DIR=/root/chaincode-java\nLIB_DIR=${ROOT_DIR}/lib\nCHAINCODE_DIR=${ROOT_DIR}/chaincode\nL"
  },
  {
    "path": "fabric-chaincode-integration-test/.gitignore",
    "chars": 33,
    "preview": "repository\n_cfg\n*.tar.gz\nlog.txt\n"
  },
  {
    "path": "fabric-chaincode-integration-test/build.gradle",
    "chars": 666,
    "preview": "dependencies {\n    implementation project(':fabric-chaincode-docker')\n    implementation project(':fabric-chaincode-shim"
  },
  {
    "path": "fabric-chaincode-integration-test/chaincodebootstrap.gradle",
    "chars": 220,
    "preview": "allprojects {\n    apply plugin: 'maven-publish'\n\n    publishing {\n        repositories {\n            maven {\n           "
  },
  {
    "path": "fabric-chaincode-integration-test/src/contracts/bare-gradle/build.gradle",
    "chars": 722,
    "preview": "plugins {\n    id 'com.gradleup.shadow' version '9.3.1'\n    id 'java'\n}\n\ngroup 'org.hyperledger.fabric-chaincode-java'\nve"
  },
  {
    "path": "fabric-chaincode-integration-test/src/contracts/bare-gradle/src/main/java/org/hyperledger/fabric/example/BareGradle.java",
    "chars": 1313,
    "preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabric.example;\n\nimport org.hyperledger.fabric.con"
  },
  {
    "path": "fabric-chaincode-integration-test/src/contracts/bare-gradle/src/main/resources/config.props",
    "chars": 120,
    "preview": "MAX_INBOUND_MESSAGE_SIZE=4000\nCHAINCODE_METRICS_ENABLED=true\nTP_CORE_POOL_SIZE=4\nTP_MAX_POOL_SIZE=4\nTP_QUEUE_SIZE=4000\n "
  },
  {
    "path": "fabric-chaincode-integration-test/src/contracts/bare-maven/.gitignore",
    "chars": 6,
    "preview": "target"
  },
  {
    "path": "fabric-chaincode-integration-test/src/contracts/bare-maven/pom.xml",
    "chars": 2683,
    "preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLoca"
  },
  {
    "path": "fabric-chaincode-integration-test/src/contracts/bare-maven/src/main/java/org/hyperledger/fabric/example/BareMaven.java",
    "chars": 1310,
    "preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabric.example;\n\nimport org.hyperledger.fabric.con"
  },
  {
    "path": "fabric-chaincode-integration-test/src/contracts/bare-maven/src/main/resources/config.props",
    "chars": 120,
    "preview": "MAX_INBOUND_MESSAGE_SIZE=4000\nCHAINCODE_METRICS_ENABLED=true\nTP_CORE_POOL_SIZE=4\nTP_MAX_POOL_SIZE=4\nTP_QUEUE_SIZE=4000\n "
  },
  {
    "path": "fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/build.gradle",
    "chars": 710,
    "preview": "plugins {\n    id 'com.gradleup.shadow' version '9.3.1'\n    id 'java'\n}\n\ngroup 'org.hyperledger.fabric-chaincode-java'\nve"
  },
  {
    "path": "fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradle/wrapper/gradle-wrapper.properties",
    "chars": 253,
    "preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributi"
  },
  {
    "path": "fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew",
    "chars": 8739,
    "preview": "#!/bin/sh\n\n#\n# Copyright © 2015-2021 the original authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew.bat",
    "chars": 2966,
    "preview": "@rem\r\n@rem Copyright 2015 the original author or authors.\r\n@rem\r\n@rem Licensed under the Apache License, Version 2.0 (th"
  },
  {
    "path": "fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/settings.gradle",
    "chars": 52,
    "preview": "rootProject.name = 'fabric-chaincode-example-sacc'\n\n"
  },
  {
    "path": "fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/src/main/java/org/hyperledger/fabric/example/AllLedgerAPI.java",
    "chars": 1450,
    "preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabric.example;\n\nimport org.hyperledger.fabric.con"
  },
  {
    "path": "fabric-chaincode-integration-test/src/contracts/fabric-shim-api/build.gradle",
    "chars": 835,
    "preview": "plugins {\n    id 'com.gradleup.shadow' version '9.3.1'\n    id 'java'\n}\n\ngroup 'org.hyperledger.fabric-chaincode-java'\nve"
  },
  {
    "path": "fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradle/wrapper/gradle-wrapper.properties",
    "chars": 253,
    "preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributi"
  },
  {
    "path": "fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradlew",
    "chars": 8710,
    "preview": "#!/bin/sh\n\n#\n# Copyright © 2015-2021 the original authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradlew.bat",
    "chars": 2937,
    "preview": "@rem\r\n@rem Copyright 2015 the original author or authors.\r\n@rem\r\n@rem Licensed under the Apache License, Version 2.0 (th"
  },
  {
    "path": "fabric-chaincode-integration-test/src/contracts/fabric-shim-api/settings.gradle",
    "chars": 52,
    "preview": "rootProject.name = 'fabric-chaincode-example-sacc'\n\n"
  },
  {
    "path": "fabric-chaincode-integration-test/src/contracts/fabric-shim-api/src/main/java/org/hyperledger/fabric/example/AllAPI.java",
    "chars": 4017,
    "preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabric.example;\n\nimport org.hyperledger.fabric.con"
  },
  {
    "path": "fabric-chaincode-integration-test/src/contracts/fabric-shim-api/src/main/java/org/hyperledger/fabric/example/EndorsementCC.java",
    "chars": 6396,
    "preview": "package org.hyperledger.fabric.example;\n\nimport static java.nio.charset.StandardCharsets.UTF_8;\n\nimport java.util.List;\n"
  },
  {
    "path": "fabric-chaincode-integration-test/src/contracts/fabric-shim-api/src/main/resources/config.props",
    "chars": 120,
    "preview": "MAX_INBOUND_MESSAGE_SIZE=4000\nCHAINCODE_METRICS_ENABLED=true\nTP_CORE_POOL_SIZE=4\nTP_MAX_POOL_SIZE=4\nTP_QUEUE_SIZE=4000\n "
  },
  {
    "path": "fabric-chaincode-integration-test/src/contracts/wrapper-maven/.gitignore",
    "chars": 6,
    "preview": "target"
  },
  {
    "path": "fabric-chaincode-integration-test/src/contracts/wrapper-maven/.mvn/wrapper/maven-wrapper.properties",
    "chars": 277,
    "preview": "wrapperVersion=3.3.4\ndistributionType=bin\ndistributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-m"
  },
  {
    "path": "fabric-chaincode-integration-test/src/contracts/wrapper-maven/mvnw",
    "chars": 11336,
    "preview": "#!/bin/sh\n# ----------------------------------------------------------------------------\n# Licensed to the Apache Softwa"
  },
  {
    "path": "fabric-chaincode-integration-test/src/contracts/wrapper-maven/mvnw.cmd",
    "chars": 7903,
    "preview": "@REM ----------------------------------------------------------------------------\r\n@REM Licensed to the Apache Software "
  },
  {
    "path": "fabric-chaincode-integration-test/src/contracts/wrapper-maven/pom.xml",
    "chars": 2829,
    "preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLoca"
  },
  {
    "path": "fabric-chaincode-integration-test/src/contracts/wrapper-maven/src/main/java/org/hyperledger/fabric/example/WrapperMaven.java",
    "chars": 1319,
    "preview": "/*\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabric.example;\n\nimport org.hyperledger.fabric.con"
  },
  {
    "path": "fabric-chaincode-integration-test/src/contracts/wrapper-maven/src/main/resources/config.props",
    "chars": 120,
    "preview": "MAX_INBOUND_MESSAGE_SIZE=4000\nCHAINCODE_METRICS_ENABLED=true\nTP_CORE_POOL_SIZE=4\nTP_MAX_POOL_SIZE=4\nTP_QUEUE_SIZE=4000\n "
  },
  {
    "path": "fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/contractinstall/ContractInstallTest.java",
    "chars": 1245,
    "preview": "/*\nCopyright IBM Corp. All Rights Reserved.\n\nSPDX-License-Identifier: Apache-2.0\n*/\npackage org.hyperleder.fabric.shim.i"
  },
  {
    "path": "fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/ledgertests/LedgerIntegrationTest.java",
    "chars": 896,
    "preview": "/*\nCopyright IBM Corp. All Rights Reserved.\n\nSPDX-License-Identifier: Apache-2.0\n*/\npackage org.hyperleder.fabric.shim.i"
  },
  {
    "path": "fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/shimtests/SACCIntegrationTest.java",
    "chars": 1379,
    "preview": "/*\nCopyright IBM Corp. All Rights Reserved.\n\nSPDX-License-Identifier: Apache-2.0\n*/\npackage org.hyperleder.fabric.shim.i"
  },
  {
    "path": "fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/shimtests/SBECCIntegrationTest.java",
    "chars": 5746,
    "preview": "/*\nCopyright IBM Corp. All Rights Reserved.\n\nSPDX-License-Identifier: Apache-2.0\n*/\npackage org.hyperleder.fabric.shim.i"
  },
  {
    "path": "fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Bash.java",
    "chars": 1787,
    "preview": "/*\nCopyright IBM Corp. All Rights Reserved.\n\nSPDX-License-Identifier: Apache-2.0\n*/\npackage org.hyperleder.fabric.shim.i"
  },
  {
    "path": "fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Command.java",
    "chars": 4217,
    "preview": "/*\nCopyright IBM Corp. All Rights Reserved.\n\nSPDX-License-Identifier: Apache-2.0\n*/\n\npackage org.hyperleder.fabric.shim."
  },
  {
    "path": "fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Docker.java",
    "chars": 2102,
    "preview": "/*\nCopyright IBM Corp. All Rights Reserved.\n\nSPDX-License-Identifier: Apache-2.0\n*/\npackage org.hyperleder.fabric.shim.i"
  },
  {
    "path": "fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/DockerCompose.java",
    "chars": 1757,
    "preview": "/*\nCopyright IBM Corp. All Rights Reserved.\n\nSPDX-License-Identifier: Apache-2.0\n*/\npackage org.hyperleder.fabric.shim.i"
  },
  {
    "path": "fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/FabricState.java",
    "chars": 1466,
    "preview": "/*\nCopyright IBM Corp. All Rights Reserved.\n\nSPDX-License-Identifier: Apache-2.0\n*/\npackage org.hyperleder.fabric.shim.i"
  },
  {
    "path": "fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/InvokeHelper.java",
    "chars": 1535,
    "preview": "package org.hyperleder.fabric.shim.integration.util;\n\nimport java.util.Arrays;\nimport java.util.Map;\nimport java.util.st"
  },
  {
    "path": "fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/Peer.java",
    "chars": 4700,
    "preview": "/*\nCopyright IBM Corp. All Rights Reserved.\n\nSPDX-License-Identifier: Apache-2.0\n*/\npackage org.hyperleder.fabric.shim.i"
  },
  {
    "path": "fabric-chaincode-integration-test/src/test/resources/docker-compose-microfab.yaml",
    "chars": 494,
    "preview": "# Copyright IBM Corp. All Rights Reserved.\n#\n# SPDX-License-Identifier: Apache-2.0\n#\n\nversion: '2'\n\nservices:\n\n  microfa"
  },
  {
    "path": "fabric-chaincode-integration-test/src/test/resources/scripts/ccutils.sh",
    "chars": 8992,
    "preview": "#!/bin/bash\n\nC_RESET='\\033[0m'\nC_RED='\\033[0;31m'\nC_GREEN='\\033[0;32m'\nC_BLUE='\\033[0;34m'\nC_YELLOW='\\033[1;33m'\n\nexport"
  },
  {
    "path": "fabric-chaincode-integration-test/src/test/resources/scripts/collection_config.json",
    "chars": 193,
    "preview": "[\n{\n  \"name\": \"col\",\n  \"policy\": \"OR( OR('org1MSP.member','org1MSP.admin') , OR('org2MSP.member','org2MSP.admin') )\",\n  "
  },
  {
    "path": "fabric-chaincode-integration-test/src/test/resources/scripts/mfsetup.sh",
    "chars": 3173,
    "preview": "#!/bin/bash\nset -x\n\nDIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\" )\"/.. && pwd )\"\nexport CFG=\"${DIR}/_cfg\"\nmkdir -p \"${CFG}\"\n"
  },
  {
    "path": "fabric-chaincode-shim/build.gradle",
    "chars": 13215,
    "preview": "/*\n * Copyright IBM Corp. 2018 All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nplugins {\n    id 'mav"
  },
  {
    "path": "fabric-chaincode-shim/javabuild.sh",
    "chars": 2183,
    "preview": "#!/bin/bash\n\n#\n#Copyright DTCC 2016 All Rights Reserved.\n#\n#Licensed under the Apache License, Version 2.0 (the \"License"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/Logger.java",
    "chars": 2425,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/Logging.java",
    "chars": 3425,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/ClientIdentity.java",
    "chars": 7034,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/Context.java",
    "chars": 1668,
    "preview": "/*\n * Copyright 2019 IBM DTCC All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledge"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/ContextFactory.java",
    "chars": 677,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/ContractInterface.java",
    "chars": 3860,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/ContractRouter.java",
    "chars": 7198,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/ContractRuntimeException.java",
    "chars": 1044,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Contact.java",
    "chars": 704,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Contract.java",
    "chars": 1583,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/DataType.java",
    "chars": 1093,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Default.java",
    "chars": 617,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Info.java",
    "chars": 1221,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/License.java",
    "chars": 645,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Property.java",
    "chars": 1285,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Serializer.java",
    "chars": 923,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Transaction.java",
    "chars": 2017,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/package-info.java",
    "chars": 277,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Provides annotations"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/ExecutionFactory.java",
    "chars": 1151,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/ExecutionService.java",
    "chars": 718,
    "preview": "/*\n * Copyright 2019 IBM DTCC All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledge"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/InvocationRequest.java",
    "chars": 653,
    "preview": "/*\n * Copyright 2019 IBM DTCC All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledge"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/JSONTransactionSerializer.java",
    "chars": 13072,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/SerializerInterface.java",
    "chars": 1216,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/impl/ContractExecutionService.java",
    "chars": 4325,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/impl/ContractInvocationRequest.java",
    "chars": 2316,
    "preview": "/*\n * Copyright 2019 IBM DTCC All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledge"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/impl/package-info.java",
    "chars": 156,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/** */\npackage org.hyperled"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/package-info.java",
    "chars": 151,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/** */\npackage org.hyperled"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/metadata/MetadataBuilder.java",
    "chars": 10367,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/metadata/TypeSchema.java",
    "chars": 9915,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/metadata/package-info.java",
    "chars": 150,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/** */\npackage org.hyperled"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/package-info.java",
    "chars": 618,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Provides interfaces "
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/ContractDefinition.java",
    "chars": 2151,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/DataTypeDefinition.java",
    "chars": 612,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/ParameterDefinition.java",
    "chars": 557,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/PropertyDefinition.java",
    "chars": 516,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/RoutingRegistry.java",
    "chars": 1711,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/TransactionType.java",
    "chars": 337,
    "preview": "/*\n * Copyright 2019 IBM DTCC All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/TxFunction.java",
    "chars": 2331,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/TypeRegistry.java",
    "chars": 922,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/ContractDefinitionImpl.java",
    "chars": 4183,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/DataTypeDefinitionImpl.java",
    "chars": 3902,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/ParameterDefinitionImpl.java",
    "chars": 1384,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/PropertyDefinitionImpl.java",
    "chars": 1191,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/RoutingRegistryImpl.java",
    "chars": 8827,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/SerializerRegistryImpl.java",
    "chars": 3603,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/TxFunctionImpl.java",
    "chars": 7079,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/TypeRegistryImpl.java",
    "chars": 1978,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/impl/package-info.java",
    "chars": 154,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/** */\npackage org.hyperled"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/package-info.java",
    "chars": 149,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/** */\npackage org.hyperled"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/systemcontract/SystemContract.java",
    "chars": 1064,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/systemcontract/package-info.java",
    "chars": 156,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/** */\npackage org.hyperled"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/ledger/Collection.java",
    "chars": 536,
    "preview": "/*\n * Copyright 2020 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/ledger/Ledger.java",
    "chars": 2253,
    "preview": "/*\n * Copyright 2020 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/ledger/impl/LedgerImpl.java",
    "chars": 1018,
    "preview": "/*\n * Copyright 2020 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/ledger/impl/package-info.java",
    "chars": 136,
    "preview": "/*\n * Copyright 2023 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/ledger/package-info.java",
    "chars": 199,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/** Provides the API for co"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/metrics/Metrics.java",
    "chars": 2521,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/metrics/MetricsProvider.java",
    "chars": 1378,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/metrics/TaskMetricsCollector.java",
    "chars": 1334,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/metrics/impl/DefaultProvider.java",
    "chars": 2246,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/metrics/impl/NullProvider.java",
    "chars": 340,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/metrics/impl/package-info.java",
    "chars": 145,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/** */\npackage org.hyperled"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/metrics/package-info.java",
    "chars": 1365,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Provides interfaces "
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/overview.html",
    "chars": 2506,
    "preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n<!-- SPDX-License-Identifier: Apache-2.0 -->\n<html>\n  <bo"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/package-info.java",
    "chars": 158,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/** Provides logging classe"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/Chaincode.java",
    "chars": 5108,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeBase.java",
    "chars": 26641,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeException.java",
    "chars": 4128,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeServer.java",
    "chars": 554,
    "preview": "/*\n * Copyright 2020 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeServerProperties.java",
    "chars": 11748,
    "preview": "/*\n * Copyright 2020 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeStub.java",
    "chars": 30953,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChatChaincodeWithPeer.java",
    "chars": 1683,
    "preview": "/*\n * Copyright 2020 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/GrpcServer.java",
    "chars": 641,
    "preview": "/*\n * Copyright 2020 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/NettyChaincodeServer.java",
    "chars": 1287,
    "preview": "/*\n * Copyright 2020 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/NettyGrpcServer.java",
    "chars": 6932,
    "preview": "/*\n * Copyright 2020 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ResponseUtils.java",
    "chars": 2839,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/StateBasedEndorsement.java",
    "chars": 2769,
    "preview": "/*\n * Copyright 2019 IBM DTCC All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/impl/StateBasedEndorsementFactory.java",
    "chars": 954,
    "preview": "/*\n * Copyright 2019 IBM DTCC All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/impl/StateBasedEndorsementImpl.java",
    "chars": 4492,
    "preview": "/*\n * Copyright 2019 IBM DTCC All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/impl/StateBasedEndorsementUtils.java",
    "chars": 2688,
    "preview": "/*\n * Copyright 2019 IBM DTCC All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/impl/package-info.java",
    "chars": 142,
    "preview": "/*\n * Copyright 2023 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/package-info.java",
    "chars": 228,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/** Provides an interface f"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/ChaincodeInvocationTask.java",
    "chars": 10320,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/ChaincodeMessageFactory.java",
    "chars": 8722,
    "preview": "/*\n * Copyright 2019 IBM DTCC All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/ChaincodeSupportClient.java",
    "chars": 3883,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\npackage org.hyperledger.fabr"
  },
  {
    "path": "fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/InvocationStubImpl.java",
    "chars": 29262,
    "preview": "/*\n * Copyright 2019 IBM All Rights Reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\npackage org.hyperledger.fab"
  }
]

// ... and 134 more files (download for full content)

About this extraction

This page contains the full source code of the hyperledger/fabric-chaincode-java GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 334 files (953.0 KB), approximately 234.0k tokens, and a symbol index with 1482 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!