Java 使用清漆后的restlet时出错(反向代理)
我使用的是restlet服务器,它为我的移动应用程序提供了一个RESTful提供者。为了让restlet正常工作,是否需要使用清漆 事实上,如果不使用varnish并使我的应用程序直接与我的rest服务器联系,一切都可以正常工作 这里是restlet服务器返回的异常:Java 使用清漆后的restlet时出错(反向代理),java,android,json,restlet,varnish,Java,Android,Json,Restlet,Varnish,我使用的是restlet服务器,它为我的移动应用程序提供了一个RESTful提供者。为了让restlet正常工作,是否需要使用清漆 事实上,如果不使用varnish并使我的应用程序直接与我的rest服务器联系,一切都可以正常工作 这里是restlet服务器返回的异常: May 14, 2012 7:48:10 PM org.restlet.resource.UniformResource doCatch WARNING: Exception or error caught in resource
May 14, 2012 7:48:10 PM org.restlet.resource.UniformResource doCatch
WARNING: Exception or error caught in resource
java.lang.NullPointerException
at fr.evoxmusic.ebackupserver.rest.IsGoogleRegistered.isGoogleRegistered(IsGoogleRegistered.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.restlet.resource.ServerResource.doHandle(ServerResource.java:449)
at org.restlet.resource.ServerResource.post(ServerResource.java:1114)
at org.restlet.resource.ServerResource.doHandle(ServerResource.java:533)
at org.restlet.resource.ServerResource.doNegotiatedHandle(ServerResource.java:590)
at org.restlet.resource.ServerResource.doConditionalHandle(ServerResource.java:302)
at org.restlet.resource.ServerResource.handle(ServerResource.java:849)
注意:我使用的是Reslet客户端。这里是我联系服务器的代码
public class RestletClient extends ClientResource {
private static final String TAG = "RestletClient";
private static final String UserAgent = "eBackupSMS";
public static JSONObject SendHttpPost(String URL, JSONObject entity) {
JSONObject result = new JSONObject();
JsonRepresentation jr = new JsonRepresentation(entity);
Client client = new Client(new Context(), Protocol.HTTP);
client.getContext().getParameters().add("useForwardedForHeader", "true");
ClientResource cr = new ClientResource(URL);
cr.setNext(client);
List<Preference<Encoding>> preflist = cr.getClientInfo().getAcceptedEncodings();
preflist.add(new Preference<Encoding>(Encoding.GZIP));
preflist.add(new Preference<Encoding>(Encoding.DEFLATE));
cr.getClientInfo().setAgent(UserAgent);
// Others params.
cr.setRetryDelay(10000);
cr.setRetryAttempts(3);
cr.setRetryOnError(true);
try {
cr.post(jr);
jr = new JsonRepresentation(cr.getResponseEntity());
cr.release();
result = jr.getJsonObject();
} catch (Exception e) {
Log.e(TAG, e.toString());
}
return result;
}
}
第30行:
wrapper = entity.getJsonObject().getJSONObject("google");
谢谢。通过使用socat,我发现varnish似乎没有正确地将分块http请求转发到后端 下面是防止在restlet中使用分块http请求的代码。ClientResource.setEntityBufferingtrue;
wrapper = entity.getJsonObject().getJSONObject("google");