Exception when calling a couchbase view from JAVA

Hello!! I’m having a eception when I call a couchbase view.

I’m using the following method:

public static List<Object> getView(String designDoc, String view, final Class<?> class1) {
	
	System.out.println("CouchBase: getView " + designDoc + " " + view);

	final List<Object> result = new ArrayList<Object>();
	final CountDownLatch latch = new CountDownLatch(1);
	System.out.println("METHOD START");

	bucket.async().query(
		ViewQuery.from(designDoc, view).limit(300).stale(Stale.FALSE))
		.doOnNext(new rx.functions.Action1<AsyncViewResult>() {
			public void call(AsyncViewResult viewResult) {
				if (!viewResult.success()) {
					System.out.println("ERROR" + viewResult.error());
				} else {
					System.out.println("Query is running!");
				}
			}
		}).flatMap(new Func1<AsyncViewResult, Observable<AsyncViewRow>>() {
			public Observable<AsyncViewRow> call(AsyncViewResult viewResult) {
				return viewResult.rows();
			}
		}).subscribe(new Subscriber<AsyncViewRow>() {
			public void onCompleted() {
				latch.countDown();
			}
			public void onError(Throwable throwable) {
				System.err.println("Whoops: " + throwable.getMessage());
			}
			public void onNext(AsyncViewRow viewRow) {
				Class<?> c;
				Constructor<?> cons;
				Object object = null;
				
				try {
					c = Class.forName(class1.getName());
					cons = c.getConstructor();
					object = cons.newInstance();
					Class[] paramTypes = new Class[1];
					paramTypes[0]=AsyncViewRow.class;
					Method m = c.getDeclaredMethod("getClass", paramTypes);
					Object object2 = m.invoke(object, viewRow);
					result.add(object2);
				} catch (Exception e) {
					e.printStackTrace();
				}
								
				
			}
		});
	try {
		latch.await();
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
	
	return result;
}

And the exception is the following:

SEVERE: Exception processing: 19 com.couchbase.client.core.ResponseEvent@77ae1d74
java.lang.NoSuchMethodError: com.couchbase.client.core.message.view.ViewQueryResponse.responseCode()I
	at com.couchbase.client.java.view.ViewRetryHandler.passThroughOrThrow(ViewRetryHandler.java:97)
	at com.couchbase.client.java.view.ViewRetryHandler.access$100(ViewRetryHandler.java:43)
	at com.couchbase.client.java.view.ViewRetryHandler$2.call(ViewRetryHandler.java:67)
	at com.couchbase.client.java.view.ViewRetryHandler$2.call(ViewRetryHandler.java:64)
	at rx.internal.operators.OperatorMap$1.onNext(OperatorMap.java:55)
	at rx.internal.operators.OperatorSubscribeOn$1$1$1.onNext(OperatorSubscribeOn.java:76)
	at rx.subjects.SubjectSubscriptionManager$SubjectObserver.onNext(SubjectSubscriptionManager.java:224)
	at rx.internal.operators.NotificationLite.accept(NotificationLite.java:150)
	at rx.subjects.ReplaySubject$UnboundedReplayState.accept(ReplaySubject.java:473)
	at rx.subjects.ReplaySubject$UnboundedReplayState.replayObserverFromIndex(ReplaySubject.java:522)
	at rx.subjects.ReplaySubject$UnboundedReplayState.replayObserver(ReplaySubject.java:510)
	at rx.subjects.ReplaySubject.caughtUp(ReplaySubject.java:430)
	at rx.subjects.ReplaySubject.onNext(ReplaySubject.java:370)
	at com.couchbase.client.core.ResponseHandler.onEvent(ResponseHandler.java:97)
	at com.couchbase.client.core.ResponseHandler.onEvent(ResponseHandler.java:43)
	at com.couchbase.client.deps.com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:128)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at com.couchbase.client.deps.io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137)
	at java.lang.Thread.run(Thread.java:745)

Exception in thread "cb-core-6-1" java.lang.RuntimeException: java.lang.NoSuchMethodError: com.couchbase.client.core.message.view.ViewQueryResponse.responseCode()I
	at com.couchbase.client.deps.com.lmax.disruptor.FatalExceptionHandler.handleEventException(FatalExceptionHandler.java:45)
	at com.couchbase.client.deps.com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:147)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at com.couchbase.client.deps.io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoSuchMethodError: com.couchbase.client.core.message.view.ViewQueryResponse.responseCode()I
	at com.couchbase.client.java.view.ViewRetryHandler.passThroughOrThrow(ViewRetryHandler.java:97)
	at com.couchbase.client.java.view.ViewRetryHandler.access$100(ViewRetryHandler.java:43)
	at com.couchbase.client.java.view.ViewRetryHandler$2.call(ViewRetryHandler.java:67)
	at com.couchbase.client.java.view.ViewRetryHandler$2.call(ViewRetryHandler.java:64)
	at rx.internal.operators.OperatorMap$1.onNext(OperatorMap.java:55)
	at rx.internal.operators.OperatorSubscribeOn$1$1$1.onNext(OperatorSubscribeOn.java:76)
	at rx.subjects.SubjectSubscriptionManager$SubjectObserver.onNext(SubjectSubscriptionManager.java:224)
	at rx.internal.operators.NotificationLite.accept(NotificationLite.java:150)
	at rx.subjects.ReplaySubject$UnboundedReplayState.accept(ReplaySubject.java:473)
	at rx.subjects.ReplaySubject$UnboundedReplayState.replayObserverFromIndex(ReplaySubject.java:522)
	at rx.subjects.ReplaySubject$UnboundedReplayState.replayObserver(ReplaySubject.java:510)
	at rx.subjects.ReplaySubject.caughtUp(ReplaySubject.java:430)
	at rx.subjects.ReplaySubject.onNext(ReplaySubject.java:370)
	at com.couchbase.client.core.ResponseHandler.onEvent(ResponseHandler.java:97)
	at com.couchbase.client.core.ResponseHandler.onEvent(ResponseHandler.java:43)
	at com.couchbase.client.deps.com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:128)
	... 4 more

I tested the indicated method from a java program and worked fine. However, I have this error when I tried to run it from the Web Application.

I have to define another method or event?

Thanks!
Carlos

looks like you have the wrong jars on your classpath. What jars do you have there (exact versions)?

Hi @daschl! That was the problem! :smile:
I changed the core-io version from 1.0.0 to 1.0.3 and works fine!

Please take a look at the related dependencies:

	<dependency>
		<groupId>com.opentok.api</groupId>
		<artifactId>opentok-java-sdk</artifactId>
		<version>2.0.0</version>
	</dependency>

	<dependency>
		<groupId>com.couchbase.client</groupId>
		<artifactId>core-io</artifactId>
		<version>1.0.3</version>
	</dependency>

	<dependency>
		<groupId>com.couchbase.client</groupId>
		<artifactId>java-client</artifactId>
		<version>2.0.3</version>
	</dependency>

Thanks!,
Carlos

Great, in general if you use maven you do not need to specific the transitive dependencies. Just do

   <dependency>
	<groupId>com.couchbase.client</groupId>
	<artifactId>java-client</artifactId>
	<version>2.0.3</version>
</dependency>

and it will fetch the right core and rxjava versions.

Hi daschl, thanks for your feedback.
I modified my pom.xml file and deleted those dependencies.

It works fine now!