From 25616008dbf829910851f42345883b0dbb7cae62 Mon Sep 17 00:00:00 2001 From: maggie Date: Tue, 28 Jul 2020 17:44:11 +0800 Subject: [PATCH] add amop module interface --- .../bcos/sdk/eventsub/SubscribeTest.java | 31 +++++++++ .../java/org/fisco/bcos/sdk/amop/Amop.java | 30 ++++++--- .../org/fisco/bcos/sdk/amop/AmopCallback.java | 20 ++++++ .../java/org/fisco/bcos/sdk/amop/AmopImp.java | 66 +++++++++++++++++++ .../java/org/fisco/bcos/sdk/amop/AmopMsg.java | 18 +++++ .../sdk/amop/exception/AmopException.java | 30 +++++++++ .../bcos/sdk/amop/topic/AmopMsgHandler.java | 32 +++++++++ .../fisco/bcos/sdk/amop/topic/AmopTopic.java | 25 +++++++ .../bcos/sdk/amop/topic/TopicManager.java | 43 ++++++++++++ .../org/fisco/bcos/sdk/client/ClientImpl.java | 2 +- .../fisco/bcos/sdk/client/JsonRpcService.java | 2 +- .../protocol/request}/JsonRpcRequest.java | 21 +++--- .../protocol/response}/JsonRpcResponse.java | 0 .../bcos/sdk/eventsub/EventSubscribe.java | 2 +- .../bcos/sdk/network/ConnectionManager.java | 19 +++--- .../core/impl/executor/TransactionPusher.java | 2 +- .../fisco/bcos/sdk/amop/TestTopicManager.java | 18 +++++ 17 files changed, 330 insertions(+), 31 deletions(-) create mode 100644 src/integration-test/java/org/fisco/bcos/sdk/eventsub/SubscribeTest.java create mode 100644 src/main/java/org/fisco/bcos/sdk/amop/AmopCallback.java create mode 100644 src/main/java/org/fisco/bcos/sdk/amop/AmopImp.java create mode 100644 src/main/java/org/fisco/bcos/sdk/amop/AmopMsg.java create mode 100644 src/main/java/org/fisco/bcos/sdk/amop/exception/AmopException.java create mode 100644 src/main/java/org/fisco/bcos/sdk/amop/topic/AmopMsgHandler.java create mode 100644 src/main/java/org/fisco/bcos/sdk/amop/topic/AmopTopic.java create mode 100644 src/main/java/org/fisco/bcos/sdk/amop/topic/TopicManager.java rename src/main/java/org/fisco/bcos/sdk/{model => client/protocol/request}/JsonRpcRequest.java (78%) rename src/main/java/org/fisco/bcos/sdk/{model => client/protocol/response}/JsonRpcResponse.java (100%) create mode 100644 src/test/java/org/fisco/bcos/sdk/amop/TestTopicManager.java diff --git a/src/integration-test/java/org/fisco/bcos/sdk/eventsub/SubscribeTest.java b/src/integration-test/java/org/fisco/bcos/sdk/eventsub/SubscribeTest.java new file mode 100644 index 000000000..fdc1c7fed --- /dev/null +++ b/src/integration-test/java/org/fisco/bcos/sdk/eventsub/SubscribeTest.java @@ -0,0 +1,31 @@ +/* + * Copyright 2014-2020 [fisco-dev] + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + * + */ + +package org.fisco.bcos.sdk.eventsub; + +import org.fisco.bcos.sdk.channel.Channel; +import org.fisco.bcos.sdk.service.GroupManagerService; +import org.fisco.bcos.sdk.service.GroupManagerServiceImpl; +import org.junit.Test; + +public class SubscribeTest { + + @Test + public void TestInitEventSubModule(){ + // Init event subscribe module. + + + } +} diff --git a/src/main/java/org/fisco/bcos/sdk/amop/Amop.java b/src/main/java/org/fisco/bcos/sdk/amop/Amop.java index 3bbbb780f..4fdfdc641 100644 --- a/src/main/java/org/fisco/bcos/sdk/amop/Amop.java +++ b/src/main/java/org/fisco/bcos/sdk/amop/Amop.java @@ -17,6 +17,8 @@ import java.util.List; import org.fisco.bcos.sdk.channel.Channel; +import org.fisco.bcos.sdk.config.ConfigOption; +import org.fisco.bcos.sdk.crypto.keystore.KeyManager; /** * AMOP module interface. @@ -28,10 +30,10 @@ public interface Amop { * Create a Amop object. * * @param channel - * @param configFile + * @param config * @return Amop instance */ - static Amop build(Channel channel, String configFile) { + static Amop build(Channel channel, ConfigOption config) { return null; } @@ -39,25 +41,29 @@ static Amop build(Channel channel, String configFile) { * Subscribe a normal topic. * * @param topicName + * @param callback callback is called when receive a msg relate to this topic */ - void subscribeTopic(String topicName); + void subscribeTopic(String topicName, AmopCallback callback); /** - * Subscribe a topic which need verify. + * Subscribe a private topic which need verify. * * @param topicName - * @param privateKey + * @param privateKeyManager the private key you used to prove your identity. + * @param callback callback is called when receive a msg relate to this topic */ - void subscribeNeedVerifyTopics(String topicName, String privateKey); + void subscribePrivateTopics( + String topicName, KeyManager privateKeyManager, AmopCallback callback); /** * Config a topic which is need verification, after that user can send message to verified * subscriber. * * @param topicName - * @param publicKeys + * @param publicKeyManagers the public keys of the target organizations that you want to + * communicate with */ - void addNeedVerifyTopics(String topicName, List publicKeys); + void setupPrivateTopic(String topicName, List publicKeyManagers); /** * Unsubscribe a topic. @@ -66,6 +72,14 @@ static Amop build(Channel channel, String configFile) { */ void unsubscribeTopic(String topicName); + /** + * Send amop msg + * + * @param msg + * @param callback + */ + void sendAmopMsg(AmopMsg msg, AmopCallback callback); + /** * Get all subscribe topics. * diff --git a/src/main/java/org/fisco/bcos/sdk/amop/AmopCallback.java b/src/main/java/org/fisco/bcos/sdk/amop/AmopCallback.java new file mode 100644 index 000000000..a6db948ff --- /dev/null +++ b/src/main/java/org/fisco/bcos/sdk/amop/AmopCallback.java @@ -0,0 +1,20 @@ +/* + * Copyright 2014-2020 [fisco-dev] + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + * + */ + +package org.fisco.bcos.sdk.amop; + +public abstract class AmopCallback { + public abstract void onSubscribedTopicMsg(); +} diff --git a/src/main/java/org/fisco/bcos/sdk/amop/AmopImp.java b/src/main/java/org/fisco/bcos/sdk/amop/AmopImp.java new file mode 100644 index 000000000..035b18553 --- /dev/null +++ b/src/main/java/org/fisco/bcos/sdk/amop/AmopImp.java @@ -0,0 +1,66 @@ +/* + * Copyright 2014-2020 [fisco-dev] + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + * + */ + +package org.fisco.bcos.sdk.amop; + +import java.util.List; +import org.fisco.bcos.sdk.amop.exception.AmopException; +import org.fisco.bcos.sdk.channel.Channel; +import org.fisco.bcos.sdk.config.ConfigOption; +import org.fisco.bcos.sdk.crypto.keystore.KeyManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Amop implement + * + * @author Maggie + */ +public class AmopImp implements Amop { + private static Logger logger = LoggerFactory.getLogger(AmopImp.class); + private Channel ch; + + public AmopImp(Channel channel, ConfigOption config) throws AmopException { + this.ch = channel; + // todo load topics ConfigOption + } + + @Override + public void subscribeTopic(String topicName, AmopCallback callback) {} + + @Override + public void subscribePrivateTopics( + String topicName, KeyManager privateKeyManager, AmopCallback callback) {} + + @Override + public void setupPrivateTopic(String topicName, List publicKeyManagers) {} + + @Override + public void unsubscribeTopic(String topicName) {} + + @Override + public void sendAmopMsg(AmopMsg msg, AmopCallback callback) {} + + @Override + public List getSubTopics() { + return null; + } + + @Override + public void start() {} + + @Override + public void stop() {} +} diff --git a/src/main/java/org/fisco/bcos/sdk/amop/AmopMsg.java b/src/main/java/org/fisco/bcos/sdk/amop/AmopMsg.java new file mode 100644 index 000000000..c38875fea --- /dev/null +++ b/src/main/java/org/fisco/bcos/sdk/amop/AmopMsg.java @@ -0,0 +1,18 @@ +/* + * Copyright 2014-2020 [fisco-dev] + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + * + */ + +package org.fisco.bcos.sdk.amop; + +public class AmopMsg {} diff --git a/src/main/java/org/fisco/bcos/sdk/amop/exception/AmopException.java b/src/main/java/org/fisco/bcos/sdk/amop/exception/AmopException.java new file mode 100644 index 000000000..3a2b2601b --- /dev/null +++ b/src/main/java/org/fisco/bcos/sdk/amop/exception/AmopException.java @@ -0,0 +1,30 @@ +/* + * Copyright 2014-2020 [fisco-dev] + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + * + */ + +package org.fisco.bcos.sdk.amop.exception; + +public class AmopException extends Exception { + public AmopException(String message) { + super(message); + } + + public AmopException(Throwable cause) { + super(cause); + } + + public AmopException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/src/main/java/org/fisco/bcos/sdk/amop/topic/AmopMsgHandler.java b/src/main/java/org/fisco/bcos/sdk/amop/topic/AmopMsgHandler.java new file mode 100644 index 000000000..dafe41075 --- /dev/null +++ b/src/main/java/org/fisco/bcos/sdk/amop/topic/AmopMsgHandler.java @@ -0,0 +1,32 @@ +/* + * Copyright 2014-2020 [fisco-dev] + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + * + */ + +package org.fisco.bcos.sdk.amop.topic; + +import io.netty.channel.ChannelHandlerContext; +import org.fisco.bcos.sdk.model.Message; +import org.fisco.bcos.sdk.network.MsgHandler; + +public class AmopMsgHandler implements MsgHandler { + + @Override + public void onConnect(ChannelHandlerContext ctx) {} + + @Override + public void onMessage(ChannelHandlerContext ctx, Message msg) {} + + @Override + public void onDisconnect(ChannelHandlerContext ctx) {} +} diff --git a/src/main/java/org/fisco/bcos/sdk/amop/topic/AmopTopic.java b/src/main/java/org/fisco/bcos/sdk/amop/topic/AmopTopic.java new file mode 100644 index 000000000..d2e8094a0 --- /dev/null +++ b/src/main/java/org/fisco/bcos/sdk/amop/topic/AmopTopic.java @@ -0,0 +1,25 @@ +/* + * Copyright 2014-2020 [fisco-dev] + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + * + */ + +package org.fisco.bcos.sdk.amop.topic; + +import org.fisco.bcos.sdk.amop.AmopCallback; + +public class AmopTopic { + private String topicName; + private String type; + private String topicString; + private AmopCallback callback; +} diff --git a/src/main/java/org/fisco/bcos/sdk/amop/topic/TopicManager.java b/src/main/java/org/fisco/bcos/sdk/amop/topic/TopicManager.java new file mode 100644 index 000000000..5f2aa8f99 --- /dev/null +++ b/src/main/java/org/fisco/bcos/sdk/amop/topic/TopicManager.java @@ -0,0 +1,43 @@ +/* + * Copyright 2014-2020 [fisco-dev] + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + * + */ + +package org.fisco.bcos.sdk.amop.topic; + +import java.security.KeyStore; +import java.util.List; +import java.util.Map; +import org.fisco.bcos.sdk.amop.AmopCallback; + +public class TopicManager { + Map seq2Callback; + Map topic2PrivateKey; + Map> topic2PublicKey; + + public void addTopic(String topicName, AmopCallback callback) { + return; + } + + public void addPrivateTopic(String topicName, KeyStore privateKeyStore, AmopCallback callback) { + return; + } + + public void removeTopic(String topicName) { + return; + } + + public AmopCallback getCallback(String seq) { + return seq2Callback.get(seq); + } +} diff --git a/src/main/java/org/fisco/bcos/sdk/client/ClientImpl.java b/src/main/java/org/fisco/bcos/sdk/client/ClientImpl.java index 918dbaee9..f35e897dc 100644 --- a/src/main/java/org/fisco/bcos/sdk/client/ClientImpl.java +++ b/src/main/java/org/fisco/bcos/sdk/client/ClientImpl.java @@ -22,6 +22,7 @@ import org.fisco.bcos.sdk.client.exceptions.ClientException; import org.fisco.bcos.sdk.client.protocol.request.GenerateGroupParam; import org.fisco.bcos.sdk.client.protocol.request.JsonRpcMethods; +import org.fisco.bcos.sdk.client.protocol.request.JsonRpcRequest; import org.fisco.bcos.sdk.client.protocol.request.Transaction; import org.fisco.bcos.sdk.client.protocol.response.BcosBlock; import org.fisco.bcos.sdk.client.protocol.response.BcosBlockHeader; @@ -54,7 +55,6 @@ import org.fisco.bcos.sdk.client.protocol.response.TotalTransactionCount; import org.fisco.bcos.sdk.client.protocol.response.TransactionReceiptWithProof; import org.fisco.bcos.sdk.client.protocol.response.TransactionWithProof; -import org.fisco.bcos.sdk.model.JsonRpcRequest; import org.fisco.bcos.sdk.service.GroupManagerService; import org.fisco.bcos.sdk.utils.Numeric; diff --git a/src/main/java/org/fisco/bcos/sdk/client/JsonRpcService.java b/src/main/java/org/fisco/bcos/sdk/client/JsonRpcService.java index 31f7b7753..1e74ce1cf 100644 --- a/src/main/java/org/fisco/bcos/sdk/client/JsonRpcService.java +++ b/src/main/java/org/fisco/bcos/sdk/client/JsonRpcService.java @@ -19,8 +19,8 @@ import org.fisco.bcos.sdk.channel.ResponseCallback; import org.fisco.bcos.sdk.channel.model.Options; import org.fisco.bcos.sdk.client.exceptions.ClientException; +import org.fisco.bcos.sdk.client.protocol.request.JsonRpcRequest; import org.fisco.bcos.sdk.client.protocol.response.JsonRpcResponse; -import org.fisco.bcos.sdk.model.JsonRpcRequest; import org.fisco.bcos.sdk.model.Message; import org.fisco.bcos.sdk.model.MsgType; import org.fisco.bcos.sdk.model.Response; diff --git a/src/main/java/org/fisco/bcos/sdk/model/JsonRpcRequest.java b/src/main/java/org/fisco/bcos/sdk/client/protocol/request/JsonRpcRequest.java similarity index 78% rename from src/main/java/org/fisco/bcos/sdk/model/JsonRpcRequest.java rename to src/main/java/org/fisco/bcos/sdk/client/protocol/request/JsonRpcRequest.java index c5ea333ba..c8e8f8635 100644 --- a/src/main/java/org/fisco/bcos/sdk/model/JsonRpcRequest.java +++ b/src/main/java/org/fisco/bcos/sdk/client/protocol/request/JsonRpcRequest.java @@ -1,17 +1,18 @@ -/** - * Copyright 2014-2020 [fisco-dev] +/* + * Copyright 2014-2020 [fisco-dev] * - *

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at * - *

http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. * - *

Unless required by applicable law or agreed to in writing, software distributed under the - * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing permissions and - * limitations under the License. */ -package org.fisco.bcos.sdk.model; +package org.fisco.bcos.sdk.client.protocol.request; import java.util.List; import java.util.Objects; diff --git a/src/main/java/org/fisco/bcos/sdk/model/JsonRpcResponse.java b/src/main/java/org/fisco/bcos/sdk/client/protocol/response/JsonRpcResponse.java similarity index 100% rename from src/main/java/org/fisco/bcos/sdk/model/JsonRpcResponse.java rename to src/main/java/org/fisco/bcos/sdk/client/protocol/response/JsonRpcResponse.java diff --git a/src/main/java/org/fisco/bcos/sdk/eventsub/EventSubscribe.java b/src/main/java/org/fisco/bcos/sdk/eventsub/EventSubscribe.java index fe0689e4c..f12db52dc 100644 --- a/src/main/java/org/fisco/bcos/sdk/eventsub/EventSubscribe.java +++ b/src/main/java/org/fisco/bcos/sdk/eventsub/EventSubscribe.java @@ -29,7 +29,7 @@ public interface EventSubscribe { /** * Create a Event Subscribe instance * - * @param channel + * @param groupManagerService * @param groupId * @return EventSubscribe Object */ diff --git a/src/main/java/org/fisco/bcos/sdk/network/ConnectionManager.java b/src/main/java/org/fisco/bcos/sdk/network/ConnectionManager.java index 6c02d71da..afe728e97 100644 --- a/src/main/java/org/fisco/bcos/sdk/network/ConnectionManager.java +++ b/src/main/java/org/fisco/bcos/sdk/network/ConnectionManager.java @@ -114,9 +114,8 @@ public void startConnect() throws NetworkException { /** check available connection */ if (!atLeastOneConnectSuccess) { - logger.error(" all connections have failed, " + errorMessageList.toString()); - throw new NetworkException( - " Failed to connect to nodes: " + errorMessageList.toString()); + logger.error(" all connections have failed, {} ", errorMessageList); + throw new NetworkException(" Failed to connect to nodes: " + errorMessageList); } running = true; logger.debug(" start connect end. "); @@ -212,7 +211,9 @@ private SslContext initSslContext() throws NetworkException { .build(); return sslCtx; } catch (FileNotFoundException | SSLException e) { - throw new NetworkException(e); + throw new NetworkException( + "SSL context init failed, please make sure your cert and key files are properly configured. ", + e); } } @@ -233,7 +234,9 @@ private SslContext initSMSslContext() throws NetworkException { | NoSuchAlgorithmException | InvalidKeySpecException | NoSuchProviderException e) { - throw new NetworkException(e); + throw new NetworkException( + "SSL context init failed, please make sure your cert and key files are properly configured. ", + e); } } @@ -246,7 +249,6 @@ private void initNetty() throws NetworkException { bootstrap.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, (int) TimeoutConfig.connectTimeout); SslContext sslContext = (algorithm.equals("ecdsa") ? initSslContext() : initSMSslContext()); SslContext finalSslContext = sslContext; - ConnectionManager connectionManager = this; ChannelInitializer initializer = new ChannelInitializer() { @@ -281,15 +283,14 @@ private boolean checkConnectionResult( if (!connectFuture.isSuccess()) { /** connect failed. */ if (Objects.isNull(connectFuture.cause())) { - logger.error( - "connect to " + connInfo.getIp() + ":" + connInfo.getPort() + " failed"); + logger.error("connect to {}:{} failed. ", connInfo.getIp(), connInfo.getPort()); } else { connectFuture.cause().printStackTrace(); logger.error( "connect to {}:{} failed. {}", connInfo.getIp(), connInfo.getPort(), - connectFuture.cause()); + connectFuture.cause().getMessage()); } errorMessageList.add( "connect to " + connInfo.getIp() + ":" + connInfo.getPort() + " failed"); diff --git a/src/main/java/org/fisco/bcos/sdk/transaction/core/impl/executor/TransactionPusher.java b/src/main/java/org/fisco/bcos/sdk/transaction/core/impl/executor/TransactionPusher.java index b2193f957..a60931414 100644 --- a/src/main/java/org/fisco/bcos/sdk/transaction/core/impl/executor/TransactionPusher.java +++ b/src/main/java/org/fisco/bcos/sdk/transaction/core/impl/executor/TransactionPusher.java @@ -35,7 +35,7 @@ public TransactionReceipt push(String signedTransaction) { } @Override - public TransactionReceipt push(String signedTransaction, RespCallback callback) { + public TransactionReceipt push(String e, RespCallback callback) { // TODO Auto-generated method stub return null; } diff --git a/src/test/java/org/fisco/bcos/sdk/amop/TestTopicManager.java b/src/test/java/org/fisco/bcos/sdk/amop/TestTopicManager.java new file mode 100644 index 000000000..33cb39ad9 --- /dev/null +++ b/src/test/java/org/fisco/bcos/sdk/amop/TestTopicManager.java @@ -0,0 +1,18 @@ +/* + * Copyright 2014-2020 [fisco-dev] + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + * + */ + +package org.fisco.bcos.sdk.amop; + +public class TestTopicManager {}