2017-02-18 10 views
0
User user = OfyService.ofy().load().type(User.class).id(id).now(); 
    JSONObject jsonUser = new JSONObject(); 
    jsonUser.put("user_id", user.getUser_id()); 
    jsonUser.put("device_id", user.getDevice_id()); 
    jsonUser.put("email", user.getEmail()); 
    jsonUser.put("name", user.getName()); 
    jsonUser.put("push_token", user.getPush_token()); 
    jsonUser.put("user_pic", user.getUser_pic()); 
    jsonUser.put("userWishList", ObjectifyService.ofy().load().refs(user.getUserWishList()).values()); 
    return Response.status(200).entity((jsonUser.toString())).build(); 

этот код корректно работает на локальном хосте, но не после развертывания, StackOverflow происходит:StackOverflow На GAE, но не locallly

Caused by: java.lang.StackOverflowError 
    at java.security.ProtectionDomain.implies(ProtectionDomain.java:300) 
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:462) 
    at java.security.AccessController.checkPermission(AccessController.java:698) 
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) 
    at java.lang.reflect.Method.invoke(Method.java:47) 
    at org.json.JSONObject.populateMap(JSONObject.java:1167) 
    at org.json.JSONObject.<init>(JSONObject.java:281) 

Я не знаю, почему это, кажется, на локальном хосте я отлажена его и работает правильно, как это также должно быть я не вижу никакого рекурсивного вызова для этих ошибок, возможно, это делает это косвенно. Любая помощь была бы высоко оценена!

+0

Ошибка, по-видимому, вызвана классом 'JSONObject', возможно, она имеет некоторые рекурсивные внутренние вызовы, а в Google App Engine есть (слишком слишком) стеки? (Просто догадаться, поскольку я не знаком с GAE) – BackSlash

+0

Да, видимо, потому что я не вижу никакого рекурсивного вызова, и он работает локально. –

ответ

0

Если один и тот же код производит разные результаты (например, StackOverflowError) в разных средах, вы должны посмотреть на конфигурацию JVM.

Например, размер стека может отличаться для разных JVM. Вы можете увеличить размер стека, чтобы разрешить большее количество вызовов. В зависимости от установленной виртуальной машины Java (JVM) размер стека по умолчанию может равняться либо 512 КБ, либо 1 МБ. Вы можете увеличить размер стека потоков с помощью флага -Xss. Этот флаг можно указать либо через конфигурацию проекта, либо через командную строку.

+0

приложение развернуто на GAE и почему эта ошибка связана с JSONObject? –