Spring boot 使用Spring Boot替换提供隐私保护的Corda服务器应该是32位的例外

Spring boot 使用Spring Boot替换提供隐私保护的Corda服务器应该是32位的例外,spring-boot,corda,Spring Boot,Corda,我试着从Corda服务器迁移到Spring Boot,我参考了Joel在Kotlin的项目(Corda official),但在尝试使用RPCOP时遇到了这个异常 RPCClientProxyHandler.artemisMessageHandler - RPC reply arrived to unknown RPC ID RpcRequestId(toLong=2111196934580277300), this indicates an internal RPC error.

我试着从Corda服务器迁移到Spring Boot,我参考了Joel在Kotlin的项目(Corda official),但在尝试使用RPCOP时遇到了这个异常

RPCClientProxyHandler.artemisMessageHandler - RPC reply arrived to unknown RPC ID RpcRequestId(toLong=2111196934580277300), this indicates an internal RPC error.
        [ERROR] 2018-02-02T07:54:05,227 [Thread-0 (ActiveMQ-client-global-threads)] client - AMQ214000: Failed to call onMessage
    com.esotericsoftware.kryo.KryoException: java.lang.IllegalArgumentException: Privacy salt should be 32 bytes.
    Serialization trace:
    legalIdentitiesAndCerts (net.corda.core.node.NodeInfo)
    value (net.corda.core.utilities.Try$Success)
        at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:144) ~[kryo-4.0.0.jar:?]
        at com.esotericsoftware.kryo.serializers.CompatibleFieldSerializer.read(CompatibleFieldSerializer.java:147) ~[kryo-4.0.0.jar:?]
        at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:813) ~[kryo-4.0.0.jar:?]
        at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:134) ~[kryo-4.0.0.jar:?]
        at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:40) ~[kryo-4.0.0.jar:?]
        at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:731) ~[kryo-4.0.0.jar:?]
        at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:125) ~[kryo-4.0.0.jar:?]
        at com.esotericsoftware.kryo.serializers.CompatibleFieldSerializer.read(CompatibleFieldSerializer.java:147) ~[kryo-4.0.0.jar:?]
        at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:813) ~[kryo-4.0.0.jar:?]
        at net.corda.nodeapi.internal.serialization.AbstractKryoSerializationScheme$deserialize$$inlined$use$lambda$1$1.invoke(SerializationScheme.kt:209) ~[corda-node-api-2.0.0.jar:?]
        at net.corda.nodeapi.internal.serialization.AbstractKryoSerializationScheme$deserialize$$inlined$use$lambda$1$1.invoke(SerializationScheme.kt:152) ~[corda-node-api-2.0.0.jar:?]
        at net.corda.nodeapi.internal.serialization.AbstractKryoSerializationScheme.withContext(SerializationScheme.kt:191) ~[corda-node-api-2.0.0.jar:?]
        at net.corda.nodeapi.internal.serialization.AbstractKryoSerializationScheme.access$withContext(SerializationScheme.kt:152) ~[corda-node-api-2.0.0.jar:?]
        at net.corda.nodeapi.internal.serialization.AbstractKryoSerializationScheme$deserialize$$inlined$use$lambda$1.execute(SerializationScheme.kt:206) ~[corda-node-api-2.0.0.jar:?]
        at com.esotericsoftware.kryo.pool.KryoPoolQueueImpl.run(KryoPoolQueueImpl.java:61) ~[kryo-4.0.0.jar:?]
        at net.corda.nodeapi.internal.serialization.AbstractKryoSerializationScheme.deserialize(SerializationScheme.kt:205) ~[corda-node-api-2.0.0.jar:?]
        at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$deserialize$1$1.invoke(SerializationScheme.kt:115) ~[corda-node-api-2.0.0.jar:?]
        at net.corda.core.serialization.SerializationFactory.withCurrentContext(SerializationAPI.kt:53) ~[corda-core-2.0.0.jar:?]
        at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$deserialize$1.invoke(SerializationScheme.kt:115) ~[corda-node-api-2.0.0.jar:?]
        at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$deserialize$1.invoke(SerializationScheme.kt:95) ~[corda-node-api-2.0.0.jar:?]
        at net.corda.core.serialization.SerializationFactory.asCurrent(SerializationAPI.kt:67) ~[corda-core-2.0.0.jar:?]
        at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl.deserialize(SerializationScheme.kt:115) ~[corda-node-api-2.0.0.jar:?]
        at net.corda.nodeapi.RPCApi$ServerToClient$Companion.fromClientMessage(RPCApi.kt:234) ~[corda-node-api-2.0.0.jar:?]
        at net.corda.client.rpc.internal.RPCClientProxyHandler.artemisMessageHandler(RPCClientProxyHandler.kt:242) ~[corda-rpc-2.0.0.jar:?]
        at net.corda.client.rpc.internal.RPCClientProxyHandler.access$artemisMessageHandler(RPCClientProxyHandler.kt:65) ~[corda-rpc-2.0.0.jar:?]
        at net.corda.client.rpc.internal.RPCClientProxyHandler$start$3.invoke(RPCClientProxyHandler.kt:192) ~[corda-rpc-2.0.0.jar:?]
        at net.corda.client.rpc.internal.RPCClientProxyHandler$start$3.invoke(RPCClientProxyHandler.kt:65) ~[corda-rpc-2.0.0.jar:?]
        at net.corda.client.rpc.internal.RPCClientProxyHandlerKt$sam$MessageHandler$cbde6789.onMessage(RPCClientProxyHandler.kt) ~[corda-rpc-2.0.0.jar:?]
        at org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl.callOnMessage(ClientConsumerImpl.java:997) ~[artemis-core-client-2.1.0.jar:2.1.0]
        at org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl.access$400(ClientConsumerImpl.java:49) ~[artemis-core-client-2.1.0.jar:2.1.0]
        at org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl$Runner.run(ClientConsumerImpl.java:1120) [artemis-core-client-2.1.0.jar:2.1.0]
        at org.apache.activemq.artemis.utils.OrderedExecutorFactory$OrderedExecutor$ExecutorTask.run(OrderedExecutorFactory.java:101) [artemis-commons-2.1.0.jar:2.1.0]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_144]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_144]
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_144]
    Caused by: java.lang.IllegalArgumentException: Privacy salt should be 32 bytes.
        at net.corda.core.contracts.PrivacySalt.<init>(Structures.kt:272) ~[corda-core-2.0.0.jar:?]
        at net.corda.nodeapi.internal.serialization.DefaultKryoCustomizer$PrivacySaltSerializer.read(DefaultKryoCustomizer.kt:188) ~[corda-node-api-2.0.0.jar:?]
        at net.corda.nodeapi.internal.serialization.DefaultKryoCustomizer$PrivacySaltSerializer.read(DefaultKryoCustomizer.kt:182) ~[corda-node-api-2.0.0.jar:?]
        at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:813) ~[kryo-4.0.0.jar:?]
        at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:134) ~[kryo-4.0.0.jar:?]
        at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:40) ~[kryo-4.0.0.jar:?]
        at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:731) ~[kryo-4.0.0.jar:?]
        at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:125) ~[kryo-4.0.0.jar:?]
        ... 34 more
连接成功发生,但当我尝试使用RPC连接器时,出现以下错误: 下面是我的控制器。当我尝试获取所有节点时,会出现以下错误:

@Autowired
private RPConnector rpcOps;
private final List<String> serviceNames = ImmutableList.of("Controller", "Network Map Service");

@GetMapping("/allnodes")
@Produces(MediaType.APPLICATION_JSON)
public Map<String, List<CordaX500Name>> getAllNodes() {
    List<NodeInfo> nodeInfoSnapshot = rpcOps.getRPCops().networkMapSnapshot();
    return ImmutableMap.of("allnodes",
            nodeInfoSnapshot.stream().map(node -> node.getLegalIdentities().get(0).getName()).filter(
                    name -> !name.equals(rpcOps.getRPCops().nodeInfo().getLegalIdentities().get(0).getName())
                            && !serviceNames.contains(name.getOrganisation()))
                    .collect(toList()));
}
@Autowired
专用RPCOP;
私有最终列表serviceNames=ImmutableList.of(“控制器”、“网络地图服务”);
@GetMapping(“/allnodes”)
@产生(MediaType.APPLICATION_JSON)
公共映射getAllNodes(){
List nodeinfo snapshot=rpcOps.getRPCops().networkmapsnashot();
返回ImmutableMap.of(“所有节点”,
nodeInfoSnapshot.stream().map(节点->节点.getLegalIdentities().get(0.getName()).filter(
name->!name.equals(rpcOps.getRPCops().nodeInfo().getLegalIdentities().get(0.getName())
&&!serviceNames.contains(name.getOrganization()))
.collect(toList());
}
多谢各位

错误时更新,存在空指针异常:

java.lang.NullPointerException
    at net.corda.core.serialization.SerializedBytes.getHash(SerializationAPI.kt)
    at net.corda.core.serialization.SerializedBytes.<init>(SerializationAPI.kt:201)
    at net.corda.nodeapi.internal.serialization.AbstractKryoSerializationScheme$serialize$1$1.invoke(SerializationScheme.kt:233)
    at net.corda.nodeapi.internal.serialization.AbstractKryoSerializationScheme$serialize$1$1.invoke(SerializationScheme.kt:152)
    at net.corda.nodeapi.internal.serialization.AbstractKryoSerializationScheme.withContext(SerializationScheme.kt:191)
    at net.corda.nodeapi.internal.serialization.AbstractKryoSerializationScheme.access$withContext(SerializationScheme.kt:152)
    at net.corda.nodeapi.internal.serialization.AbstractKryoSerializationScheme$serialize$1.execute(SerializationScheme.kt:221)
    at net.corda.nodeapi.internal.serialization.AbstractKryoSerializationScheme$serialize$1.execute(SerializationScheme.kt:152)
    at com.esotericsoftware.kryo.pool.KryoPoolQueueImpl.run(KryoPoolQueueImpl.java:61)
    at net.corda.nodeapi.internal.serialization.AbstractKryoSerializationScheme.serialize(SerializationScheme.kt:220)
    at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$serialize$1$1.invoke(SerializationScheme.kt:119)
    at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$serialize$1$1.invoke(SerializationScheme.kt:95)
    at net.corda.core.serialization.SerializationFactory.withCurrentContext(SerializationAPI.kt:53)
    at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$serialize$1.invoke(SerializationScheme.kt:119)
    at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$serialize$1.invoke(SerializationScheme.kt:95)
    at net.corda.core.serialization.SerializationFactory.asCurrent(SerializationAPI.kt:67)
    at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl.serialize(SerializationScheme.kt:119)
    at net.corda.core.serialization.SerializationAPIKt.serialize(SerializationAPI.kt:191)
    at net.corda.core.serialization.SerializationAPIKt.serialize$default(SerializationAPI.kt:190)
    at net.corda.nodeapi.RPCApi$ClientToServer$RpcRequest.writeToClientMessage(RPCApi.kt:113)
    at net.corda.client.rpc.internal.RPCClientProxyHandler.invoke(RPCClientProxyHandler.kt:215)
    at com.sun.proxy.$Proxy22.networkMapSnapshot(Unknown Source)
java.lang.NullPointerException
位于net.corda.core.serialization.SerializationDBytes.getHash(SerializationAPI.kt)
位于net.corda.core.serialization.SerializationDBytes。(SerializationAPI.kt:201)
位于net.corda.nodeapi.internal.serialization.AbstractKryoSerializationScheme$serialize$1$1.invoke(SerializationScheme.kt:233)
net.corda.nodeapi.internal.serialization.AbstractKryoSerializationScheme$serialize$1$1.invoke(SerializationScheme.kt:152)
位于net.corda.nodeapi.internal.serialization.AbstractKryoSerializationScheme.withContext(SerializationScheme.kt:191)
位于net.corda.nodeapi.internal.serialization.AbstractKryoSerializationScheme.access$withContext(SerializationScheme.kt:152)
net.corda.nodeapi.internal.serialization.AbstractKryoSerializationScheme$serialization$1.execute(SerializationScheme.kt:221)
net.corda.nodeapi.internal.serialization.AbstractKryoSerializationScheme$serialization$1.execute(SerializationScheme.kt:152)
位于com.esotericsoftware.kryo.pool.KryoPoolQueueImpl.run(KryoPoolQueueImpl.java:61)
位于net.corda.nodeapi.internal.serialization.AbstractKryoSerializationScheme.serialization(SerializationScheme.kt:220)
在net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$serialization$1$1.invoke(SerializationScheme.kt:119)
在net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$serialization$1$1.invoke(SerializationScheme.kt:95)
位于net.corda.core.serialization.SerializationFactory.withCurrentContext(SerializationAPI.kt:53)
在net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$serialize$1.invoke(SerializationScheme.kt:119)中
在net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$serialization$1.invoke(SerializationScheme.kt:95)中
位于net.corda.core.serialization.SerializationFactory.asCurrent(SerializationAPI.kt:67)
在net.corda.nodeapi.internal.serialization.SerializationFactoryImpl.serialization(SerializationScheme.kt:119)中
在net.corda.core.serialization.SerializationAPIKt.serialization(SerializationAPI.kt:191)中
在net.corda.core.serialization.SerializationAPIKt.serialization$default处(SerializationAPI.kt:190)
位于net.corda.nodeapi.RPCApi$ClientToServer$RpcRequest.writeToClientMessage(RPCApi.kt:113)
位于net.corda.client.rpc.internal.RPCClientProxyHandler.invoke(RPCClientProxyHandler.kt:215)
位于com.sun.proxy.$Proxy22.networkmapsnashot(未知源)

这可以通过清除本地缓存来解决。

如前所述,这可能与google Guava library的冲突有关。Corda 3使用番石榴21。在我的例子中,我的build.gradle没有明确的Guava语句,但我的jHipster版本使用的是Guava 27。我只是在build.gradle的依赖项末尾添加了以下内容,它解决了这个问题

compile group: 'com.google.guava', name: 'guava', version: '21.0'

其他类型的RPC操作是否有效(例如,
protocolVersion
)?它正在使用protocolVersion。我得到的协议版本是2。虽然启用了跟踪日志并发现异常:T 19:30:42 1拓扑。-Topology@4ef782af创建java.lang.Exception:trace at org.apache.activemq.artemis.core.client.impl.Topology.(Topology.java:83)[artemis-core-client-2.1.0.jar:2.1.0]at org.apache.activemq.artemis.core.client.impl.Topology.(Topology.java:71)[artemis-core-client-2.1.0.jar:2.1.0]在org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.(ServerLocatorImpl.java:435)上,尝试使用vault查询获取状态。获取缓冲区下溢异常:E 19:49:57+0530[Thread-6(ActiveMQ客户端全局线程)]core.client.run-AMQ214000:未能调用onMessage com.esotericsoftware.kryo.KryoException:缓冲区下溢。在com.esotericsoftware.kryo.io.Input.require(Input.java:199)~[kryo-4.0.0.jar:?]在com.esotericsoftware.kryo.io.Input.readBoolean(Input.java:801)~[kryo-4.0.0.jar:?]在de.javakaffee.kryoserializers.bitsserializer.read(bitsserializer.java:39)~[kryo-serializers-0.41.jar:?]a您是否可以使用服务器代码链接到存储库?我不能重复这个问题。我认为这可能是一个与类路径上不存在类有关的问题。我只是目睹了一些非常奇怪的事情。我在eclipse中创建了整个项目。虽然有点麻烦,但我喜欢日食。它刚刚切换到intellij并创建了一个模板客户端来检查我是否有任何错误猜猜什么没有错误!该节点一直在运行。我没有再次部署节点,只是在相同的运行节点上进行了测试。而且很有效!。eclipse和intellij中的两个客户端完全相同。我甚至删除了.gradle文件夹。重新启动eclipse并尝试。java版本在两者中都是相同的,eclipse客户端在intellij工作时仍然给出错误。这真的很奇怪。你能详细说明一下,并解释为什么会发生这种情况,以及解决这种情况的确切步骤吗?
compile group: 'com.google.guava', name: 'guava', version: '21.0'