Contract.java에 있는 subscribe 함수 호출 시 에러

baobab넷에서 이거저거 테스트해보는데

contract.subscribe(eventName, new EventFilterOptions(), data → {
System.out.println("getJsonrpc ::: "+data.getJsonrpc());
System.out.println("getMethod ::: "+data.getMethod());
System.out.println("getBlockNumber ::: "+data.getParams().getResult().getBlockNumber());
});

위와 같이 했는데 에러가 나네요…
해당 컨트랙트에서 테스트하려는 eventName으로 getPastEvent로 이벤트 로그는 잘 가져와지는데… subscribe 호출하면 아래와 같이 에러가 뜨네요…ㅠ

at org.web3j.protocol.Service.subscribe(Service.java:99)
at com.klaytn.caver.rpc.Klay.subscribeFlowable(Klay.java:1809)
at com.klaytn.caver.contract.ContractEvent.getFlowable(ContractEvent.java:187)
at com.klaytn.caver.contract.Contract.subscribe(Contract.java:308)
at com.example.caver.services.CaverService.subscribe

안녕하세요.

아래의 코드로 테스트를 해봤을 때, 에러가 발생하지 않는 것을 확인했습니다.
에러 원인 파악을 위하여 사용하고 계신 버전과 재현 가능한 코드 제공해 주시면 감사하겠습니다.

        WebSocketService webSocketService = new WebSocketService("ws://localhost:8552", false);
        Caver caver = new Caver(webSocketService);
        webSocketService.connect();

        Contract contract = caver.contract.create(jsonObj, contractAddress);

        ContractEvent event = contract.getEvents().get("Transfer");
        Disposable disposable = contract.subscribe(event.getName(), new EventFilterOptions(), data -> {
            System.out.println("getJsonrpc ::: " + data.getJsonrpc());
            System.out.println("getMethod ::: " + data.getMethod());
            System.out.println("getBlockNumber ::: " + data.getParams().getResult().getBlockNumber());
        });

감사합니다

안녕하세요!

public void subscribeTest() throws IOException, ClassNotFoundException, InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
		Caver caver = new Caver("https://api.baobab.klaytn.net:8651/");

		String abi = new String(Files.readAllBytes(Paths.get(abiPath)));
		Contract contract = Contract.create(caver, abi);

		EventFilterOptions options = new EventFilterOptions();

		contract.subscribe("eventName", options, data -> {
			System.out.println("getJsonrpc ::: "+data.getJsonrpc());
			System.out.println("getMethod ::: "+data.getMethod());
			System.out.println("getBlockNumber ::: "+data.getParams().getResult().getBlockNumber());
		});
	}

이렇게 테스트를 했었습니다

java.lang.UnsupportedOperationException: Service HttpService does not support subscriptions
에러가 발생하구요

http 프로바이더를 사용해서 발생하는 에러입니다.
아래 참고하여 웹소켓 프로바이더를 사용해 주시기 바랍니다.

        WebSocketService webSocketService = new WebSocketService("ws://localhost:8552", false);
        Caver caver = new Caver(webSocketService);
        webSocketService.connect();

아 웹소켓 프로바이더 사용하니 위 문제는 해결되었습니다 감사합니다.