java - 尝试将 Hyperledger Fabric SDK 与 Spring boot 集成时出现以下错误

标签 java spring spring-boot hyperledger-fabric

我正在尝试将 Hyperledger Fabric SDK 集成到 Spring boot 中,但在运行应用程序时遇到以下错误,

java.lang.UnsupportedOperationException: null
    at javax.json.spi.JsonProvider.createObjectBuilder(JsonProvider.java:281) ~[javax.json-1.1.4.jar:1.1.4]
    at javax.json.Json.createObjectBuilder(Json.java:327) ~[javax.json-1.1.4.jar:1.1.4]
    at org.hyperledger.fabric.sdk.NetworkConfig.fromYamlStream(NetworkConfig.java:342) ~[fabric-sdk-java-1.4.8.jar:na]
    at org.hyperledger.fabric.gateway.impl.GatewayImpl$Builder.networkConfig(GatewayImpl.java:99) ~[fabric-gateway-java-1.4.3.jar:na]
    at org.hyperledger.fabric.gateway.impl.GatewayImpl$Builder.networkConfig(GatewayImpl.java:88) ~[fabric-gateway-java-1.4.3.jar:na]
    at org.hyperledger.fabric.gateway.impl.GatewayImpl$Builder.networkConfig(GatewayImpl.java:69) ~[fabric-gateway-java-1.4.3.jar:na]
    at com.person.fabricclient.controllers.PersonController.getPerson(PersonController.java:69) ~[classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_242]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_242]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_242]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_242]
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]

以下是其余 Controller 代码,

   @RequestMapping(value = "/hello/createperson",method = RequestMethod.GET)
    public String getPerson() throws IOException {
        Gateway.Builder builder = Gateway.createBuilder();

        try {
            // A wallet stores a collection of identities
            Path walletPath = Paths.get("/home/Fabric-samples_1.4/fabric-samples/commercial-paper/organization/magnetocorp/identity/user/isabella/wallet");
            Wallet wallet = Wallet.createFileSystemWallet(walletPath);

            String userName = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="451036203774052a3722746b203d24283529206b262a28" rel="noreferrer noopener nofollow">[email protected]</a>";

            Path connectionProfile = Paths.get("/home/Fabric-samples_1.4/fabric-samples/commercial-paper/organization/magnetocorp/gateway/networkConnection.yaml");

            // Set connection options on the gateway builder
            builder.identity(wallet, userName).networkConfig(connectionProfile).discovery(false);

            // Connect to gateway using application specified parameters
            try(Gateway gateway = builder.connect()) {

                // Access PaperNet network
                System.out.println("Use network channel: mychannel.");
                Network network = gateway.getNetwork("mychannel");

                // Get addressability to commercial paper contract
                System.out.println("Use org.papernet.commercialpaper smart contract.");
                Contract contract = network.getContract("person", "org.go.smartcontract");

                // Issue commercial paper
                System.out.println("Submit commercial paper issue transaction.");
                byte[] response = contract.submitTransaction("createCar", "go", "Hello", "2020-05-31");

                // Process response
                System.out.println("Process issue transaction response.");
//                CommercialPaper paper = CommercialPaper.deserialize(response);
//                System.out.println(paper);
            } catch (TimeoutException e) {
                e.printStackTrace();
            } catch (ContractException e) {
                e.printStackTrace();
            }
        } catch (InterruptedException | IOException e) {
            e.printStackTrace();
            System.exit(-1);
        }
        return "created";
    }

当我尝试调试以下类中发生的问题时,当我在 Spring Boot 中运行时,服务加载程序返回一个对象,但是当我尝试不使用 Spring Boot 时,服务加载程序不会返回任何对象,并且此行得到已执行

Class<?> clazz = Class.forName("org.glassfish.json.JsonProviderImpl");

在下面的类(class)中。

    //
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package javax.json.spi;

import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
import java.util.ServiceLoader;
import javax.json.JsonArray;
import javax.json.JsonArrayBuilder;
import javax.json.JsonBuilderFactory;
import javax.json.JsonException;
import javax.json.JsonMergePatch;
import javax.json.JsonNumber;
import javax.json.JsonObject;
import javax.json.JsonObjectBuilder;
import javax.json.JsonPatch;
import javax.json.JsonPatchBuilder;
import javax.json.JsonPointer;
import javax.json.JsonReader;
import javax.json.JsonReaderFactory;
import javax.json.JsonString;
import javax.json.JsonStructure;
import javax.json.JsonValue;
import javax.json.JsonWriter;
import javax.json.JsonWriterFactory;
import javax.json.stream.JsonGenerator;
import javax.json.stream.JsonGeneratorFactory;
import javax.json.stream.JsonParser;
import javax.json.stream.JsonParserFactory;

public abstract class JsonProvider {
    private static final String DEFAULT_PROVIDER = "org.glassfish.json.JsonProviderImpl";

    protected JsonProvider() {
    }

    public static JsonProvider provider() {
        ServiceLoader<JsonProvider> loader = ServiceLoader.load(JsonProvider.class);
        Iterator<JsonProvider> it = loader.iterator();
        if (it.hasNext()) {
            return (JsonProvider)it.next();
        } else {
            try {
                Class<?> clazz = Class.forName("org.glassfish.json.JsonProviderImpl");
                return (JsonProvider)clazz.newInstance();
            } catch (ClassNotFoundException var3) {
                throw new JsonException("Provider org.glassfish.json.JsonProviderImpl not found", var3);
            } catch (Exception var4) {
                throw new JsonException("Provider org.glassfish.json.JsonProviderImpl could not be instantiated: " + var4, var4);
            }
        }
    }

    public abstract JsonParser createParser(Reader var1);

    public abstract JsonParser createParser(InputStream var1);

    public abstract JsonParserFactory createParserFactory(Map<String, ?> var1);

    public abstract JsonGenerator createGenerator(Writer var1);

    public abstract JsonGenerator createGenerator(OutputStream var1);

    public abstract JsonGeneratorFactory createGeneratorFactory(Map<String, ?> var1);

    public abstract JsonReader createReader(Reader var1);

    public abstract JsonReader createReader(InputStream var1);

    public abstract JsonWriter createWriter(Writer var1);

    public abstract JsonWriter createWriter(OutputStream var1);

    public abstract JsonWriterFactory createWriterFactory(Map<String, ?> var1);

    public abstract JsonReaderFactory createReaderFactory(Map<String, ?> var1);

    public abstract JsonObjectBuilder createObjectBuilder();

    public JsonObjectBuilder createObjectBuilder(JsonObject object) {
        throw new UnsupportedOperationException();
    }

    public JsonObjectBuilder createObjectBuilder(Map<String, Object> map) {
        throw new UnsupportedOperationException();
    }

    public abstract JsonArrayBuilder createArrayBuilder();

    public JsonArrayBuilder createArrayBuilder(JsonArray array) {
        throw new UnsupportedOperationException();
    }

    public JsonPointer createPointer(String jsonPointer) {
        throw new UnsupportedOperationException();
    }

    public JsonPatchBuilder createPatchBuilder() {
        throw new UnsupportedOperationException();
    }

    public JsonPatchBuilder createPatchBuilder(JsonArray array) {
        throw new UnsupportedOperationException();
    }

    public JsonPatch createPatch(JsonArray array) {
        throw new UnsupportedOperationException();
    }

    public JsonPatch createDiff(JsonStructure source, JsonStructure target) {
        throw new UnsupportedOperationException();
    }

    public JsonMergePatch createMergePatch(JsonValue patch) {
        throw new UnsupportedOperationException();
    }

    public JsonMergePatch createMergeDiff(JsonValue source, JsonValue target) {
        throw new UnsupportedOperationException();
    }

    public JsonArrayBuilder createArrayBuilder(Collection<?> collection) {
        throw new UnsupportedOperationException();
    }

    public abstract JsonBuilderFactory createBuilderFactory(Map<String, ?> var1);

    public JsonString createValue(String value) {
        throw new UnsupportedOperationException();
    }

    public JsonNumber createValue(int value) {
        throw new UnsupportedOperationException();
    }

    public JsonNumber createValue(long value) {
        throw new UnsupportedOperationException();
    }

    public JsonNumber createValue(double value) {
        throw new UnsupportedOperationException();
    }

    public JsonNumber createValue(BigDecimal value) {
        throw new UnsupportedOperationException();
    }

    public JsonNumber createValue(BigInteger value) {
        throw new UnsupportedOperationException();
    }
}

最佳答案

问题出在服务加载器上,我不得不提到它应该在 META_INF/Services/中加载的正确类,该文件应该包含应该加载的类。

关于java - 尝试将 Hyperledger Fabric SDK 与 Spring boot 集成时出现以下错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61028961/

相关文章:

java - 从文件中用java解析JSON

java - 在 tomcat 上安装 newrelic 代理进行故障排除

spring - Spring 基于注释的验证中的和/或条件

java - Spring Data REST - 通过使用实体列表无法识别字段 "_embedded",Java HATEOAS

java - 使用时从 ArrayList 中删除元素

java - 如何修复 "java.lang.OutOfMemoryError at sun.misc.Unsafe.allocateMemory(Native Method)"?

java - 使用 spring 数据从 mongodb 中选择随机条目

java - 为什么 jackson 将 ZonedDateTime 转换为十进制?

java - 使用 Spring Data JPA @LastModifiedDate 从审计中排除某些字段

eclipse - Spring Boot、Spring Loaded、Eclipse、Maven 基本示例