java-api/src/main/java/blockchain/query/QueryWrapper.java
2019-04-02 20:25:03 +02:00

54 lines
2.4 KiB
Java

package blockchain.query;
import blockchain.client.ChannelClientWrapper;
import blockchain.client.FabricClientWrapper;
import blockchain.configuration.Config;
import blockchain.user.UserContext;
import blockchain.utility.Util;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;
import org.hyperledger.fabric.sdk.ChaincodeID;
import org.hyperledger.fabric.sdk.ChaincodeResponse;
import org.hyperledger.fabric.sdk.ProposalResponse;
import org.hyperledger.fabric.sdk.QueryByChaincodeRequest;
import java.util.Collection;
public class QueryWrapper {
private static Logger logger = Logger.getLogger(QueryWrapper.class);
public String sendQuery(String functionName,String[] args) throws Exception {
BasicConfigurator.configure();
UserContext user = Util.readUserContext(Config.ORG1, "admin");
String response = null;
FabricClientWrapper fabricClientWrapper = new FabricClientWrapper(user);
ChannelClientWrapper channelClientWrapper = ChannelClientWrapper.setupChannel(fabricClientWrapper);
ChaincodeID chaincodeID = ChaincodeID.newBuilder().setName(Config.CHAINCODE_NAME).build();
QueryByChaincodeRequest queryByChaincodeRequest = fabricClientWrapper.getClient().newQueryProposalRequest();
queryByChaincodeRequest.setArgs(args);
queryByChaincodeRequest.setFcn(functionName);
queryByChaincodeRequest.setChaincodeID(chaincodeID);
Collection<ProposalResponse> queryProposals;
try {
queryProposals = channelClientWrapper.queryByChainCode(queryByChaincodeRequest);
} catch (Exception e) {
throw new Exception(e);
}
for (ProposalResponse proposalResponse : queryProposals) {
if (!proposalResponse.isVerified() || proposalResponse.getStatus() != ChaincodeResponse.Status.SUCCESS) {
logger.error("Failed query proposal from peer " + proposalResponse.getPeer().getName() + " status : " + proposalResponse.getStatus() +
". Message : " + proposalResponse.getMessage() + ". Was verified : " + proposalResponse.isVerified());
} else {
response = new String(proposalResponse.getChaincodeActionResponsePayload());
logger.info("Query payload : " + response + " from peer : " + proposalResponse.getPeer().getName());
}
}
return response;
}
}