2014-10-01 3 views
1

저는 여러 응용 프로그램간에 공유되는 couchbase 데이터베이스를 사용하여 문서를 json으로 저장합니다. 네이티브 java 바이너리 직렬화에 의존하는 것으로 보이기 때문에 내 Java 응용 프로그램에 데이터를 가져올 수 없습니다.json 문서를 java의 couchbase에서 어떻게 구할 수 있습니까?

이 코드 :

net.spy.memcached.transcoders.SerializingTranscoder: Failed to decompress data 
java.util.zip.ZipException: Not in GZIP format 

에서

CouchbaseClient client = new CouchbaseClient(hosts,"bucket",""); 
System.out.println((String)client.get("someKey")); 

결과는 기본적으로 직렬화하려고하기 때문이다. 나는 내 자신의 트랜스 코더를 제공 할 수 있다는 것을 알아 차리지 만 gson이나 다른 것을 사용하여 json이 직접 파싱 할 수 있도록 실제 문자열 데이터를 원한다. 사용할 수있는 트랜스 코더 중 아무 것도 나에게 이것을주지 않는 것 같습니다.

couchbase 문서에는 json을 설정하는 예제가 있지만 읽을 수는 없습니다. json을 java로 읽는 사람들은 어떤 사람들입니까?

답변

3

먼저이 문제는 Couchbase "2.0 SDKs"가 서로간에 공통 플래그를 구현하므로이 문제가 발생하지 않도록 곧 사라질 것입니다. Michael's blogs은 좋은 결과입니다. 여기서 어떤 일이 일어나고 있는지 알고 싶다면 문제의 첫 번째 이유는 1.x 시리즈에서 Couchbase가 기존 애플리케이션 코드 및 memcached와의 호환성을 유지하려고 시도했기 때문입니다. memcached 세계에서 고객은 다른 시간에 다른 사람들에 의해 모두 작성되었습니다.

예외를 기반으로, 나는 아마도 .NET에 저장된 항목을 읽으 려한다고 생각합니다. 몇 주 전부터 사용할 수있는 sample transcoder이 있습니다.

+0

예 내 항목은 .net에 저장되었지만 기본 이진 직렬화 된 양식 대신 StoreJson 방법을 사용했습니다. – captncraig

+0

또한 2.0 베타 2 클라이언트를 사용하려고하는데 플래그 오류가 발생합니다. com.couchbase.client.java.error.TranscodingException : 플래그 (0x112)는 someKey id가 아닌 JSON 문서를 나타내며 디코딩 할 수 없습니다. ' – captncraig

+0

1.x와 사용자 정의 트랜스 코더를 사용하여 작동 시키지만 다른 SDK에서 설정 한 플래그를 기반으로 한 SDK가 실패하게되어 매우 실망 스럽습니다. – captncraig

1

당신이 최신 CB 자바 클라이언트를 사용하고 있는지 확인하십시오 :

<dependencies> 
    <dependency> 
    <groupId>com.couchbase.client</groupId> 
    <artifactId>couchbase-client</artifactId> 
    <version>1.4.4</version> 
    </dependency> 
</dependencies> 

참조를 : Couchbase Java Client Library 1.4

내가 잘 실행 CB 클라이언트를 사용하여 내 서비스가있다. 여기에 내가 클라이언트 만드는 방법은 다음과 같습니다

CouchbaseConnectionFactoryBuilder cfb = new CouchbaseConnectionFactoryBuilder(); 
cfb.setOpTimeout(10000); 
cfb.setOpQueueMaxBlockTime(5000); 
CouchbaseClient client = new CouchbaseClient(cfb.buildCouchbaseConnection(baseURIs, bucketName, "")); 

을 그리고 여기가 원시 문자열을 얻을 POJO를로 변환하는 방법 예는 다음과 같습니다 유발하는 샘플 JSON의 문서로 질문을, 또한

MyPOJO get(CouchbaseClient client, String key) 
{ 
    com.google.gson.Gson gson = new com.google.gson.Gson(); 
    String jsonValue = (String) client.get(key); 
    return gson.fromJson(jsonValue, MyPOJO.class); 
} 

를 업데이트 이 문제. 아마도 그것은 문서 자체의 형식과 관련이 있습니다.