2017-02-22 62 views
5

我創建了一個默認的GWT項目,並嘗試使用CouchDB作爲我的數據庫以簡單條目創建數據庫中的文檔。以前我們使用的是CouchDB 1.6,即被褥作爲用戶界面。現在,最近嘗試使用CouchDB 2.0即Fauxton作爲UI。使用Java在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 ************************/ Link where mentioned about update_seq

  • 問題是我們沒有通過我們的代碼更新update_seq,它的auto在創建數據庫文件時已經完成了。所以,不知道這個問題是什麼。

  • 忘了寫數據庫是通過CouchDB 2.0上的java輕鬆創建的。

  • 我們是否需要使用新版本的JAR文件>?COUCHDB JARS(USED AT TIME OF 1\COUCHDB 1.6

+0

我覺得這個錯誤幾乎說明了問題所在。更新後的用戶界面發送'update_seq'作爲字符串和服務器仍然在1.x服務器上期待長期價值。所以將服務器更新到2.x將是一個好的開始。 – Veeram

+0

先生,已經轉移到2.0,並試圖在那裏做基本功能,但沒有成功。我們沒有做任何與update_seq字段其自動生成的領域。 couchdb 2.0官方文檔中update_seq字段的值仍然顯示爲int。我發佈了該鏈接。 – Vartika

+0

您是否更新過服務器庫到2.0?在你分享的截圖中的罐子 – Veeram

回答

2

這個問題有做couchdb4j是舊的(最後一次提交GitHub上幾乎是5年前)。

這篇文章還闡述了一個建議,使用客戶端庫,這是更積極的工作,例如, Ektorp(參見CouchDB Java client)。

背景上couchbd4j-問題,你所面臨的

您鏈接遷移文檔(https://blog.couchdb.org/2016/08/17/migrating-to-couchdb-2-0/)規定:

最重要的是,更新序列,或序列,是不是數字的任何 更長,但一個字符串。

正如你說你不處理update_seq直接,但couchdb4j一樣。

當前實現couchdb4j客戶端庫的使用下面的代碼解析服務器響應特性update_seq爲整數:

updateSeq = json.getInt("update_seq"); 

,這將不再使用CouchDB 2工作。0

下面是一個包含這條線鏈接到最近的代碼:https://github.com/mbreese/couchdb4j/blob/master/src/java/com/fourspaces/couchdb/Database.java(見第59行)

我希望這有助於, 基督教

+0

對不起,但仍有一些困惑。你是否告訴我使用ektorp jar來代替couchb4j。由於couchdb4j已經很久沒有更新過了。請原諒我,但沒有明白答案。您希望我如何更改update_seq數據類型 – Vartika

+0

對此沒有完全清楚感到抱歉。至於我的調查,最新的couchdb4j客戶端庫和couchdb 2.0在處理update_seq的方式上是不兼容的。所以你需要切換到另一個客戶端庫。討論良好的客戶端庫的couchdb可以在我提供的鏈接中找到。 –

+0

對不起,先生試圖搜索其他圖書館找到的雲,但無法使用它,可能會漏掉一些東西。代碼將如何像我們將如何創建會話,獲取數據庫並創建文檔?對不起 – Vartika

0

配套使用或jar文件的新版本無處不在的客戶端爲以及服務器。可以做文件版本的目錄搜索。清理並重建整個項目,以消除挑選舊文件的可能性。