From 782f0ee6dd1a3598ad1b34108936e2f737b46e47 Mon Sep 17 00:00:00 2001 From: zhaoguangwei Date: Wed, 27 May 2020 14:57:43 +0800 Subject: [PATCH] add the ContractExecuteException in the AbstractModule.java; --- .../blockchain/contract/jvm/AbstractContractCode.java | 10 ++++------ .../jd/blockchain/ledger/ContractExecuteException.java | 1 + source/runtime/runtime-context/pom.xml | 6 ++++++ .../java/com/jd/blockchain/runtime/AbstractModule.java | 3 ++- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/source/contract/contract-jvm/src/main/java/com/jd/blockchain/contract/jvm/AbstractContractCode.java b/source/contract/contract-jvm/src/main/java/com/jd/blockchain/contract/jvm/AbstractContractCode.java index f5b866c8..e9afd83d 100644 --- a/source/contract/contract-jvm/src/main/java/com/jd/blockchain/contract/jvm/AbstractContractCode.java +++ b/source/contract/contract-jvm/src/main/java/com/jd/blockchain/contract/jvm/AbstractContractCode.java @@ -76,15 +76,13 @@ public abstract class AbstractContractCode implements ContractCode { BytesValueList bytesValues = eventContext.getArgs(); Object[] args = BytesValueEncoding.decode(bytesValues, handleMethod.getParameterTypes()); - try { - retn = ReflectionUtils.invokeMethod(handleMethod, contractInstance, args); - } catch (Throwable e) { - throw new ContractExecuteException(String.format("Contract[%s:%s] has no handle method to handle event[%s]!", address.toString(), - contractDefinition.getType().getName(), eventContext.getEvent())); - } + retn = ReflectionUtils.invokeMethod(handleMethod, contractInstance, args); } catch (Exception e) { error = e; + } catch (Error e) { + throw new ContractExecuteException(String.format("Contract[%s:%s] has no handle method to handle event[%s]!", address.toString(), + contractDefinition.getType().getName(), eventContext.getEvent())); } if (evtProcAwire != null) { diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/ContractExecuteException.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/ContractExecuteException.java index 87b5779e..fce0e7a3 100644 --- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/ContractExecuteException.java +++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/ContractExecuteException.java @@ -13,6 +13,7 @@ public class ContractExecuteException extends LedgerException { public ContractExecuteException(String message, Throwable cause) { super(message, cause); + setState(TransactionState.CONTRACT_EXECUTE_ERROR); } public ContractExecuteException() { diff --git a/source/runtime/runtime-context/pom.xml b/source/runtime/runtime-context/pom.xml index be55a091..d73390c6 100644 --- a/source/runtime/runtime-context/pom.xml +++ b/source/runtime/runtime-context/pom.xml @@ -15,5 +15,11 @@ utils-common ${project.version} + + + com.jd.blockchain + ledger-model + ${project.version} + \ No newline at end of file diff --git a/source/runtime/runtime-context/src/main/java/com/jd/blockchain/runtime/AbstractModule.java b/source/runtime/runtime-context/src/main/java/com/jd/blockchain/runtime/AbstractModule.java index e7045d68..e3faa296 100644 --- a/source/runtime/runtime-context/src/main/java/com/jd/blockchain/runtime/AbstractModule.java +++ b/source/runtime/runtime-context/src/main/java/com/jd/blockchain/runtime/AbstractModule.java @@ -3,6 +3,7 @@ package com.jd.blockchain.runtime; import java.io.InputStream; import java.util.concurrent.Callable; +import com.jd.blockchain.ledger.ContractExecuteException; import com.jd.blockchain.utils.concurrent.AsyncFuture; import com.jd.blockchain.utils.concurrent.CompletableAsyncFuture; @@ -93,7 +94,7 @@ public abstract class AbstractModule implements Module { try { return callable.call(); } catch (Exception e) { - throw new IllegalStateException(e.getMessage(), e); + throw new ContractExecuteException(e.getMessage(), e); } finally { if (origClassLoader != Thread.currentThread().getContextClassLoader()) { Thread.currentThread().setContextClassLoader(origClassLoader);