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

**URL:** <https://devforum.kaia.io/t/contract-java-subscribe/5897>\
**Category:** Caver\
**Tags:** caver-java, smart-contract, klaytn\
**Created:** [8월 22, 2022, 6:44오전 UTC](https://devforum.kaia.io/t/contract-java-subscribe/5897 "2022-08-22T06:44:57Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![leo\_sh](https://avatars.discourse-cdn.com/v4/letter/l/59ef9b/32.png) [@leo\_sh](https://devforum.kaia.io/u/leo_sh)\
**Post date:** [8월 22, 2022, 6:44오전 UTC](https://devforum.kaia.io/t/contract-java-subscribe/5897/1 "2022-08-22T06:44:57Z")

</div>

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 |

---

<div class="post-metadata">

**Author:** ![Jamie](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/jamie/32/1472_2.png) [@Jamie](https://devforum.kaia.io/u/Jamie)\
**Post date:** [8월 23, 2022, 6:30오전 UTC](https://devforum.kaia.io/t/contract-java-subscribe/5897/2 "2022-08-23T06:30:56Z")

</div>

안녕하세요.

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

```auto
        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());
        });

```

감사합니다

---

<div class="post-metadata">

**Author:** ![leo\_sh](https://avatars.discourse-cdn.com/v4/letter/l/59ef9b/32.png) [@leo\_sh](https://devforum.kaia.io/u/leo_sh)\
**Post date:** [8월 23, 2022, 7:34오전 UTC](https://devforum.kaia.io/t/contract-java-subscribe/5897/3 "2022-08-23T07:34:48Z")

</div>

안녕하세요!

```auto
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  
에러가 발생하구요

---

<div class="post-metadata">

**Author:** ![Jamie](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/jamie/32/1472_2.png) [@Jamie](https://devforum.kaia.io/u/Jamie)\
**Post date:** [8월 23, 2022, 7:47오전 UTC](https://devforum.kaia.io/t/contract-java-subscribe/5897/4 "2022-08-23T07:47:21Z")

</div>

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

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

```

---

<div class="post-metadata">

**Author:** ![leo\_sh](https://avatars.discourse-cdn.com/v4/letter/l/59ef9b/32.png) [@leo\_sh](https://devforum.kaia.io/u/leo_sh)\
**Post date:** [8월 23, 2022, 1:46오후 UTC](https://devforum.kaia.io/t/contract-java-subscribe/5897/5 "2022-08-23T13:46:47Z")

</div>

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