Создать документ в CouchDB 2.0 fauxton, используя Java

Я создал проект GWT по умолчанию и пытался создать документ в базе данных с простой записью, используя CouchDB в качестве базы данных. Ранее мы использовали CouchDB 1.6, то есть футон в качестве пользовательского интерфейса. Сейчас недавно пытаюсь использовать CouchDB 2.0 т.е. Fauxton в качестве пользовательского интерфейса.

ПРОБЛЕМА:-

Невозможно создать документ в CouchDB 2.0.

КОД СТОРОНЫ СЕРВЕРА:-

public String greetServer(String input) throws IllegalArgumentException {
        // Verify that the input is valid. 
        System.out.println(input);

        Session session=new Session("192.168.1.48",5984);
        Database db=session.getDatabase("testing");
        Document doc=new Document();
        doc.put("name", input);
        db.saveDocument(doc);

        return "Hello, " + input;
    }

ИСКЛЮЧЕНИЕ:-

2017-02-22 17:23:41.147:WARN:/:qtp10750155-45: Exception while dispatching incoming RPC call
com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract java.lang.String com.dbconnect.client.GreetingService.greetServer(java.lang.String) throws java.lang.IllegalArgumentException' threw an unexpected exception: net.sf.json.JSONException: JSONObject["update_seq"] is not a number.
    at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:416)
    at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:605)
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:333)
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:303)
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:373)
    at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:587)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
    at org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:95)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
    at org.eclipse.jetty.server.Server.handle(Server.java:499)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
    at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
    at java.lang.Thread.run(Unknown Source)
Caused by: 
net.sf.json.JSONException: JSONObject["update_seq"] is not a number.
    at net.sf.json.JSONObject.getDouble(JSONObject.java:2090)
    at net.sf.json.JSONObject.getInt(JSONObject.java:2109)
    at com.fourspaces.couchdb.Database.<init>(Database.java:50)
    at com.fourspaces.couchdb.Session.getDatabase(Session.java:185)
    at com.dbconnect.server.GreetingServiceImpl.greetServer(GreetingServiceImpl.java:22)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:587)
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:333)
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:303)
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:373)
    at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:587)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
    at org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:95)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
    at org.eclipse.jetty.server.Server.handle(Server.java:499)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
    at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
    at java.lang.Thread.run(Unknown Source)

/ ********************************** РЕДАКТИРОВАТЬ 1************************/ ссылка, где упоминалось об update_seq

  • Дело в том, что мы не обновляем update_seq через наш код, который был выполнен автоматически во время создания документа в базе данных. Итак, не знаю в чем проблема.

  • Забыл написать, что база данных была легко создана с помощью Java на CouchDB 2.0.

  • МЫ ДОЛЖНЫ ИСПОЛЬЗОВАТЬ НОВЫЕ ВЕРСИИ ФАЙЛОВ JAR>? JARS COUCHDB (ИСПОЛЬЗУЕТСЯ В ВРЕМЯ 1 \ COUCHDB 1.6

2 ответа

Решение

Проблема связана со старостью couchdb4j (последний коммит на github был почти 5 лет назад).

В этом посте также говорится, что предлагается использовать клиентскую библиотеку, над которой более активно работают, например, Ektorp (см. Клиент CouchDB Java).

Фон на couchbd4j-проблема, с которой вы столкнулись

Документация по миграции, на которую вы ссылаетесь ( https://blog.couchdb.org/2016/08/17/migrating-to-couchdb-2-0/), гласит:

Самое главное, что seq или последовательность update больше не число, а строка.

Как вы сказали, вы не работаете непосредственно с update_seq, а couchdb4j.

Текущая реализация клиентской библиотеки couchdb4j анализирует свойство server-response- update_seq как Integer, используя следующий код:

updateSeq = json.getInt("update_seq");

И это больше не будет работать с CouchDb 2.0

Вот ссылка на самый последний код, содержащий эту строку: https://github.com/mbreese/couchdb4j/blob/master/src/java/com/fourspaces/couchdb/Database.java (см. Строку 59)

Я надеюсь, что это помогло, Кристиан

Используйте совпадающую или новую версию файлов JAR везде на клиенте, а также на сервере. Можно выполнить поиск в каталоге для версий файлов. Очистите и пересоберите весь проект, чтобы исключить возможность выбора старых файлов.

Другие вопросы по тегам