Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

Methods without @Property got invoked during serialization

Ouverte
#233 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
35/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
java
Domaine
backend

Piste de recherche

Reproduisez le comportement à l’aide de l’exemple Sale de asset-transfer-basic/chaincode-java et du point d’entrée getSale, puis exécutez la peer chaincode query documentée tout en vérifiant les peer logs. Suivez le chemin de sérialisation Java afin de déterminer pourquoi une méthode getName non annotée est appelée. Le travail est considéré comme terminé lorsque le comportement est corrigé ou que l’annotation requise et son utilisation sont clairement documentées, avec un test de régression si le dépôt fournit un emplacement de test approprié.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

I'm looking at version 2.3 but I think the behavior holds for the lastest version.

The following code is based on https://github.com/hyperledger/fabric-samples/tree/main/asset-transfer-basic/chaincode-java.

@DataType
public class Sale {
	public String getName() {
		System.out.println("getName");
		return getName();
	}
}

@Contract
public final class AssetTransfer implements ContractInterface {

    @Transaction(intent = Transaction.TYPE.EVALUATE)
    public Sale getSale(final Context ctx) {
        return new Sale();
    }
}

I deliberately wrote a recursion but it should be a factor because this method is not marked with @Property.

After I call peer chaincode query -C mychannel -n basic -c '{"Args":["getSale"]}', I then check the docker logs by running (zsh)

docker logs $(docker ps -n 1 --filter 'name=dev-peer0.org1' --format '{{.ID}}') |& vim -

I see a huge number of output "getName", which indicates getName() is called although it's not marked with @Property.

In this example code, there is nothing going wrong. But if the method returns an object that requires another serialization or has cyclic reference, this unexpected call is very likely to cause uncatched StackOverflowError or other errors.

This log is from my real project. You can see I eventually get

thread[fabric-txinvoke:3,5,main] 05:37:40:138 severe  org.hyperledger.fabric.logger error                                              nulljava.lang.stackoverflowerror

infinite-call.log

I feel I should use the magic word "@JSONPropertyIgnore" on getName().

This secret word didn't appear on https://hyperledger-fabric.readthedocs.io/en/latest/search.html?q=JSONPropertyIgnore&check_keywords=yes nor this repo.

Should we add @JSONPropertyIgnore somewhere?

Langage dominant
Java
Étoiles
322
Forks
210
Merge moyen
15 h 16 min
PR mergées (30 j)
29

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de hyperledger/fabric-chaincode-java

Toutes les issues de hyperledger/fabric-chaincode-java

Issues similaires

Plus d'issues Java

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.