hyperledger / hyperledger/fabric-chaincode-java
NullPointerException trying to handle an unannotated return type via contract-api
- 主要語言
- Java
- 星號
- 323
- 分支
- 210
- 平均合併
- 8 小時 1 分鐘
- 30 天內合併 PR
- 8
描述
Using 2.2.3LTS using the contract-api I have this method
```
@Transaction(submit=false)
public QueryResponse paginatedRichQuery(Context ctx, String queryString, String pagesize, String passedBookmark) {
logger.debug("Entering paginatedRichQuery with pagesize [" + pagesize + "] and query string: " + queryString);
int pageSize = Integer.parseInt(pagesize);
final QueryResultsIteratorWithMetadata iterator = ctx.getStub().getQueryResultWithPagination(queryString, pageSize, passedBookmark);
QueryResponseMetadata metadata = iterator.getMetadata();
ArrayList results = this.getAllResults(iterator);
QueryResponse response = new QueryResponse(results.toArray(new String[results.size()]), new ResponseMetadata(metadata));
logger.debug("Exiting paginatedRichQuery with response: " + response.toString());
return response;
}
```
QueryResponse is defined as follows
```
public class QueryResponse {
private T[] results;
private ResponseMetadata responseMetadata;
public QueryResponse(T[] results, ResponseMetadata responseMetadata) {
this.results = results;
this.responseMetadata = responseMetadata;
}
public T[] getResults() {
return results;
}
public void setResults(T[] results) {
this.results = results;
}
public ResponseMetadata getResponseMetadata() {
return responseMetadata;
}
public void setResponseMetadata(ResponseMetadata responseMetadata) {
this.responseMetadata = responseMetadata;
}
}
```
When I invoke the transaction it fails due to trying because of the return value with
```
Thread[fabric-txinvoke:5,5,main] 12:04:38:330 INFO org.hyperledger.fabric.contract.ContractRouter processRequest Got routing:paginatedRichQuery:org.example.FixedAssetContract
Thread[fabric-txinvoke:5,5,main] 12:04:38:345 SEVERE org.hyperledger.fabric.Logger error nulljava.lang.NullPointerException
at org.hyperledger.fabric.contract.execution.JSONTransactionSerializer.toBuffer(JSONTransactionSerializer.java:84)
at org.hyperledger.fabric.contract.execution.impl.ContractExecutionService.convertReturn(ContractExecutionService.java:89)
at org.hyperledger.fabric.contract.execution.impl.ContractExecutionService.executeRequest(ContractExecutionService.java:67)
at org.hyperledger.fabric.contract.ContractRouter.processRequest(ContractRouter.java:119)
at org.hyperledger.fabric.contract.ContractRouter.invoke(ContractRouter.java:130)
at org.hyperledger.fabric.shim.impl.ChaincodeInvocationTask.call(ChaincodeInvocationTask.java:100)
at org.hyperledger.fabric.shim.impl.InvocationTaskManager.lambda$newTask$17(InvocationTaskManager.java:265)
at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1736)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
```
貢獻指南
評估
這個 Issue 還沒有評估資料。