运行 hyperledger fabric java 网关示例代码抛出必须设置网关标识
Running hyperledger fabric java gateway example code throws The gateway identity must be set
我正在尝试在基础网络上编写一个结构网关应用程序,我的代码如下所示。
public static void main(String[] args) throws Exception {
// Load a file system based wallet for managing identities.
Path walletPath = Paths.get("wallet");
Wallet wallet = Wallet.createFileSystemWallet(walletPath);
// load a CCP
Path networkConfigPath = Paths.get("..", "..", "basic-network", "connection.yaml");
Gateway.Builder builder = Gateway.createBuilder();
builder.identity(wallet, "user1");
builder.networkConfig(networkConfigPath).discovery(true);
// create a gateway connection
try (Gateway gateway = builder.connect()) {
System.out.println("Hello");
}
catch(Exception e) {
e.printStackTrace();
}
}
当我 运行 代码时,它抛出错误
Exception in thread "main" java.lang.IllegalStateException: The gateway identity must be set
请帮我看看如何设置这个网络的身份?
我的 connection.yaml 是
name: basic-network
version: 1.0.0
client:
organization: Org1
connection:
timeout:
peer:
endorser: '300'
orderer: '300'
channels:
mychannel:
orderers:
- orderer.example.com
peers:
peer0.org1.example.com: {}
organizations:
Org1:
mspid: Org1MSP
peers:
- peer0.org1.example.com
certificateAuthorities:
- ca.example.com
orderers:
orderer.example.com:
url: grpc://localhost:7050
peers:
peer0.org1.example.com:
url: grpc://localhost:7051
certificateAuthorities:
ca.example.com:
url: http://localhost:7054
caName: ca.example.com
有一个名为 User1@org1.example.com
的文件夹位于 basic-network/crypto-config/peerOrganizations/org1.example.com/users/
好的,我明白你的问题了。您错误地运行从织物样品中提取了 fabcar 示例。
在 Java 文件夹中,您有 2 个目录:wallet 和 src。
在 src 中你会找到你的代码,而在 wallet 中你会存储你的用户证书。
在运行申请之前,您应该创建证书,而您目前没有证书。
在 运行 ClientApp.java 所在的文件夹中,您应该找到另外 2 个文件:EnrollAdmin.java 和 RegisterUser.java.
首先,运行EnrollAdmin.java。这将联系您的 CA 并为管理员用户获取证书。
接下来,运行RegisterUser.java创建用户证书。
您的 ClientApp 当前正在寻找 user1 证书,但您的钱包文件夹中没有 user1。
这样做之后,再次 运行 ClientApp.java 你应该没问题。
在您的评论中,您提到了 basic-network/crypto-config/peerOrganizations/org1.example.com/users/
中的 User1@org1.example.com
文件夹,但您不应将其用于此示例,因为您需要从 SDK 发布的 X509 证书与 CA 联系。
我正在尝试在基础网络上编写一个结构网关应用程序,我的代码如下所示。
public static void main(String[] args) throws Exception {
// Load a file system based wallet for managing identities.
Path walletPath = Paths.get("wallet");
Wallet wallet = Wallet.createFileSystemWallet(walletPath);
// load a CCP
Path networkConfigPath = Paths.get("..", "..", "basic-network", "connection.yaml");
Gateway.Builder builder = Gateway.createBuilder();
builder.identity(wallet, "user1");
builder.networkConfig(networkConfigPath).discovery(true);
// create a gateway connection
try (Gateway gateway = builder.connect()) {
System.out.println("Hello");
}
catch(Exception e) {
e.printStackTrace();
}
}
当我 运行 代码时,它抛出错误
Exception in thread "main" java.lang.IllegalStateException: The gateway identity must be set
请帮我看看如何设置这个网络的身份?
我的 connection.yaml 是
name: basic-network
version: 1.0.0
client:
organization: Org1
connection:
timeout:
peer:
endorser: '300'
orderer: '300'
channels:
mychannel:
orderers:
- orderer.example.com
peers:
peer0.org1.example.com: {}
organizations:
Org1:
mspid: Org1MSP
peers:
- peer0.org1.example.com
certificateAuthorities:
- ca.example.com
orderers:
orderer.example.com:
url: grpc://localhost:7050
peers:
peer0.org1.example.com:
url: grpc://localhost:7051
certificateAuthorities:
ca.example.com:
url: http://localhost:7054
caName: ca.example.com
有一个名为 User1@org1.example.com
的文件夹位于 basic-network/crypto-config/peerOrganizations/org1.example.com/users/
好的,我明白你的问题了。您错误地运行从织物样品中提取了 fabcar 示例。
在 Java 文件夹中,您有 2 个目录:wallet 和 src。 在 src 中你会找到你的代码,而在 wallet 中你会存储你的用户证书。
在运行申请之前,您应该创建证书,而您目前没有证书。 在 运行 ClientApp.java 所在的文件夹中,您应该找到另外 2 个文件:EnrollAdmin.java 和 RegisterUser.java.
首先,运行EnrollAdmin.java。这将联系您的 CA 并为管理员用户获取证书。 接下来,运行RegisterUser.java创建用户证书。
您的 ClientApp 当前正在寻找 user1 证书,但您的钱包文件夹中没有 user1。
这样做之后,再次 运行 ClientApp.java 你应该没问题。
在您的评论中,您提到了 basic-network/crypto-config/peerOrganizations/org1.example.com/users/
中的 User1@org1.example.com
文件夹,但您不应将其用于此示例,因为您需要从 SDK 发布的 X509 证书与 CA 联系。