2014-01-11 1 views
0

Jersey 클라이언트를 사용하여 webservice에 큰 JSON 문자열을 android에서 게시해야합니다. 아래 코드는 HTTP 상태 505 오류와 함께 실패합니다. JSON 문자열의 길이가 너무 길지 않을 때 호출이 잘 작동하기 때문에 JSON 문자열의 길이가 문제가되는 것 같습니다 (200 자 길이로 테스트했습니다). 나는 또한이 정확한 코드가 일식에서 실행중인 저지 클라이언트에서 잘 작동하기 때문에 이것이 android에서 저지 라이브러리와 관련이 있다고 의심한다. 일식에서는 요청에 압축 헤더를 설정할 필요조차 없습니다. 아무도 내가 여기 놓친 게 뭔지 알 수 있니?android에 저지 클라이언트로 큰 JSON 문자열을 게시하는 중

formData.add("payload",payload); 
config = new DefaultClientConfig(); // SSL configuration 
config.getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES, 
     new HTTPSProperties(JerseyClientBKS.getHostnameVerifier(), JerseyClientBKS.getSSLContext(getApplicationContext()))); 
ServiceFinder.setIteratorProvider(new AndroidServiceIteratorProvider()); 
client = Client.create(config); 
webResource = client.resource(getSeletctedAddress()+"/api/document/submitHybridJSON"); 
builder = webResource.queryParams(formData).getRequestBuilder(); 
for (NewCookie c : getCookies()) { 
    if (c.getValue().indexOf("_") != -1){ 
     builder = builder.cookie(c); 
    } 
} 
builder = builder.header("Content-Encoding", "gzip"); 
builder = builder.header("Accept-Encoding", "gzip"); 
Log.d(TAG, "posting.... = "); 
response =builder.type(MediaType.APPLICATION_FORM_URLENCODED).post(ClientResponse.class); 
Log.d(TAG,"response code "+response.getStatus()); 
Log.d(TAG,"valuesets "+response.getEntity(String.class)); 
+0

5xx 오류는 서버의 오류 로그에 오류에 대한 세부 정보가 있어야합니다. 거기에 단서를 찾으십시오. –

+0

@MarcB jboss를 사용합니다. 서버가 요청을받지 않은 것처럼 server.log에 아무것도 표시되지 않습니다. 오류에 대한 정보를 어디에서 찾을 수 있는지 알고 계십니까? 내가 말했듯이 JSON 문자열의 길이와 관련이 있어야합니다. –

+0

200 바이트는 아무 것도 아니며 심지어 200KB는 문제가되지 않습니다. "gzip"으로 헤더를 제거하십시오. 나는 그들을 설정하는 것이 당신의 일이 아니라고 생각합니다. 이것은 적절한 경우 저지를해야합니다. – hgoebl

답변

0

긴 JSON 문자열 대신 InputStream을 게시하여이 문제를 해결했습니다.