From 54066eb2346d64e93ee5b65cd9c470ae29bfd68d Mon Sep 17 00:00:00 2001 From: dalaocu Date: Thu, 22 Oct 2020 11:24:04 +0800 Subject: [PATCH 1/2] fix bug of event decode --- .../codec/decode/TransactionDecoderInterface.java | 2 +- .../codec/decode/TransactionDecoderService.java | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/codec/decode/TransactionDecoderInterface.java b/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/codec/decode/TransactionDecoderInterface.java index 5f3d8c4a3..e7aa437c8 100644 --- a/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/codec/decode/TransactionDecoderInterface.java +++ b/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/codec/decode/TransactionDecoderInterface.java @@ -43,6 +43,6 @@ public TransactionResponse decodeReceiptWithoutValues( String abi, TransactionReceipt transactionReceipt) throws TransactionException, IOException, ABICodecException; - public Map> decodeEvents(String abi, List logs) + public Map>> decodeEvents(String abi, List logs) throws ABICodecException; } diff --git a/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/codec/decode/TransactionDecoderService.java b/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/codec/decode/TransactionDecoderService.java index 24ad678f6..ce2fa1c19 100644 --- a/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/codec/decode/TransactionDecoderService.java +++ b/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/codec/decode/TransactionDecoderService.java @@ -15,6 +15,7 @@ package org.fisco.bcos.sdk.transaction.codec.decode; import java.io.IOException; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -111,12 +112,12 @@ public TransactionResponse decodeReceiptStatus(TransactionReceipt receipt) { @SuppressWarnings("static-access") @Override - public Map> decodeEvents(String abi, List logs) + public Map>> decodeEvents(String abi, List logs) throws ABICodecException { ABIDefinitionFactory abiDefinitionFactory = new ABIDefinitionFactory(cryptoSuite); ContractABIDefinition contractABIDefinition = abiDefinitionFactory.loadABI(abi); Map> eventsMap = contractABIDefinition.getEvents(); - Map> result = new HashMap<>(); + Map>> result = new HashMap<>(); eventsMap.forEach( (name, events) -> { for (ABIDefinition abiDefinition : events) { @@ -136,9 +137,11 @@ public Map> decodeEvents(String abi, List logs) abiCodecObject.decodeJavaObject( outputObject, log.getData()); if (result.containsKey(name)) { - result.get("name").addAll(list); + result.get(name).add(list); } else { - result.put(name, list); + List> l = new ArrayList<>(); + l.add(list); + result.put(name, l); } } catch (Exception e) { logger.error( From 972061aa7247e18c9e58b51cdfbf2264502a77df Mon Sep 17 00:00:00 2001 From: dalaocu Date: Thu, 22 Oct 2020 11:37:21 +0800 Subject: [PATCH 2/2] fix test cases --- .../transaction/model/dto/TransactionResponse.java | 6 ++++-- .../sdk/transaction/decoder/EventDecodeTest.java | 4 ++-- .../decoder/TransactionDecoderServiceTest.java | 8 +++++--- .../manager/AssembleTransactionProcessorTest.java | 14 +++++++------- 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/model/dto/TransactionResponse.java b/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/model/dto/TransactionResponse.java index 7fc4d292f..312a1c1dd 100644 --- a/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/model/dto/TransactionResponse.java +++ b/sdk-transaction/src/main/java/org/fisco/bcos/sdk/transaction/model/dto/TransactionResponse.java @@ -14,6 +14,7 @@ */ package org.fisco.bcos.sdk.transaction.model.dto; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.core.type.TypeReference; import java.util.List; import java.util.Map; @@ -92,11 +93,12 @@ public String getEvents() { return events; } - public Map> getEventResultMap() { + @JsonIgnore + public Map>> getEventResultMap() { if (StringUtils.isEmpty(events)) { return null; } - return JsonUtils.fromJson(events, new TypeReference>>() {}); + return JsonUtils.fromJson(events, new TypeReference>>>() {}); } /** @param events the events to set */ diff --git a/src/integration-test/java/org/fisco/bcos/sdk/transaction/decoder/EventDecodeTest.java b/src/integration-test/java/org/fisco/bcos/sdk/transaction/decoder/EventDecodeTest.java index 280efe612..730069ba0 100644 --- a/src/integration-test/java/org/fisco/bcos/sdk/transaction/decoder/EventDecodeTest.java +++ b/src/integration-test/java/org/fisco/bcos/sdk/transaction/decoder/EventDecodeTest.java @@ -67,7 +67,7 @@ public void testDecode() throws Exception { EventLog eventLog = new EventLog(log.getData(), log.getTopics()); List list = abiCodec.decodeEvent(abi, "LogInit", eventLog); Assert.assertEquals("test2", list.get(1)); - Map> map = response.getEventResultMap(); - Assert.assertEquals("test2", map.get("LogInit").get(1)); + Map>> map = response.getEventResultMap(); + Assert.assertEquals("test2", map.get("LogInit").get(0).get(1)); } } diff --git a/src/integration-test/java/org/fisco/bcos/sdk/transaction/decoder/TransactionDecoderServiceTest.java b/src/integration-test/java/org/fisco/bcos/sdk/transaction/decoder/TransactionDecoderServiceTest.java index e384a77b9..fb9a359b5 100644 --- a/src/integration-test/java/org/fisco/bcos/sdk/transaction/decoder/TransactionDecoderServiceTest.java +++ b/src/integration-test/java/org/fisco/bcos/sdk/transaction/decoder/TransactionDecoderServiceTest.java @@ -29,7 +29,6 @@ import org.fisco.bcos.sdk.transaction.manager.TransactionProcessorFactory; import org.fisco.bcos.sdk.transaction.model.dto.TransactionResponse; import org.fisco.bcos.sdk.transaction.tools.ContractLoader; -import org.fisco.bcos.sdk.transaction.tools.JsonUtils; import org.junit.Assert; import org.junit.Test; @@ -76,11 +75,14 @@ public void testDecode() throws Exception { Lists.newArrayList(BigInteger.valueOf(1))); TransactionResponse transactionResponseWithoutValues = decoder.decodeReceiptWithoutValues(abi, transactionReceipt); - System.out.println(JsonUtils.toJson(transactionResponseWithoutValues)); + // System.out.println(JsonUtils.toJson(transactionResponseWithoutValues)); TransactionResponse transactionResponseWithValues = decoder.decodeReceiptWithValues(abi, "incrementUint256", transactionReceipt); + // System.out.println(JsonUtils.toJson(transactionResponseWithValues)); Assert.assertEquals("Success", transactionResponseWithValues.getReceiptMessages()); - Map> events = decoder.decodeEvents(abi, transactionReceipt.getLogs()); + Map>> events = + decoder.decodeEvents(abi, transactionReceipt.getLogs()); + // System.out.println(JsonUtils.toJson(events)); Assert.assertEquals(1, events.size()); // setBytes List s = Lists.newArrayList("2".getBytes()); diff --git a/src/integration-test/java/org/fisco/bcos/sdk/transaction/manager/AssembleTransactionProcessorTest.java b/src/integration-test/java/org/fisco/bcos/sdk/transaction/manager/AssembleTransactionProcessorTest.java index c94c2e8af..76444758a 100644 --- a/src/integration-test/java/org/fisco/bcos/sdk/transaction/manager/AssembleTransactionProcessorTest.java +++ b/src/integration-test/java/org/fisco/bcos/sdk/transaction/manager/AssembleTransactionProcessorTest.java @@ -141,8 +141,8 @@ public void test2ComplexDeploy() throws Exception { contractAddress, "0x0000000000000000000000000000000000000000000000000000000000000000")); // System.out.println(JsonUtils.toJson(response)); - Map> map = response.getEventResultMap(); - Assert.assertEquals("test2", map.get("LogInit").get(1)); + Map>> map = response.getEventResultMap(); + Assert.assertEquals("test2", map.get("LogInit").get(0).get(1)); } @Test @@ -296,9 +296,9 @@ public void test6ComplexSetValues() throws Exception { transactionProcessor.sendTransactionAndGetResponse( contractAddress, abi, "setValues", paramsSetValues); // System.out.println(JsonUtils.toJson(transactionResponse)); - Map> eventsMap = transactionResponse.getEventResultMap(); + Map>> eventsMap = transactionResponse.getEventResultMap(); Assert.assertEquals(1, eventsMap.size()); - Assert.assertEquals("set values 字符串", eventsMap.get("LogSetValues").get(2)); + Assert.assertEquals("set values 字符串", eventsMap.get("LogSetValues").get(0).get(2)); } @Test @@ -330,10 +330,10 @@ public void test7ComplexSetBytes() throws Exception { Assert.assertEquals(transactionResponse3.getValuesList().size(), 1); Assert.assertEquals(transactionResponse3.getValuesList().get(0), "set bytes test"); - Map> eventsMap3 = transactionResponse3.getEventResultMap(); - // System.out.println(JsonUtils.toJson(eventsMap3)); + Map>> eventsMap3 = transactionResponse3.getEventResultMap(); + System.out.println(JsonUtils.toJson(eventsMap3)); Assert.assertEquals(1, eventsMap3.size()); - Assert.assertEquals("set bytes test", eventsMap3.get("LogSetBytes").get(1)); + Assert.assertEquals("set bytes test", eventsMap3.get("LogSetBytes").get(0).get(1)); // getBytes CallResponse callResponse4 =