5

У меня есть метод ниже в AppEngine:Google Cloud Endpoints EOFException

@ApiMethod(name = "authed", path = "greeting/authed") 
public HelloGreeting authedGreeting(User user) { 
    ... 
} 
метод

Мой doInBackground в Android AsyncTask:

HelloGreeting hg = null; 
try { 
    hg = service.authed().execute(); 
} catch (IOException e) { 
    Log.d("error", e.getMessage(), e); 
} 
return hg; 

я встретил ошибку ФФ:

/_ah/api/.../v1/greeting/authed: java.io.EOFException 

В logcat:

Problem accessing /_ah/api/.../v1/greeting/authed. Reason: INTERNAL_SERVER_ERROR 
    at java.util.zip.GZIPInputStream.readUByte 
    at java.util.zip.GZIPInputStream.readUShort 
    at java.util.zip.GZIPInputStream.readUShort 

Он работает только при вызове метода non-auth. Как это исправить?

Я использую локальный сервер.

+0

Является ли это на локальном сервере? –

+0

есть, локальный сервер. –

ответ

7

У меня возникла аналогичная проблема, когда я призывал вставлять значения. Мина немного отличается, потому что я не использую аутентификацию, однако я получаю то же исключение. Я использую appengine-java-sdk-1.8.8. Я смог сделать другие вызовы конечной точки, имеющие эту ошибку. Я посмотрел на сгенерированный код, и разница, которую я видел с рабочими вызовами по сравнению с нерабочими вызовами, была HttpMethod. Неисправный вызов был определен как "POST". Я смог изменить это, используя атрибут аннотации httpMethod=ApiMethod.HttpMethod.GET в аннотации @ApiMethod.

@ApiMethod(httpMethod = ApiMethod.HttpMethod.GET, name = "insertUserArtist", path = "insertUserArtist") 

Я регенерирую код клиента, и я был в состоянии сделать вызов без получения страшного EOFException. Я не уверен, почему POST работает неправильно, но сменил его на GET. Это, возможно, представляет некоторые вопросы о том, сколько данных может быть отправлено и должно быть адресовано (возможно, проблема с библиотекой). Я собираюсь изучить создание демонстрационного приложения для отправки в Google.

+3

У кого-нибудь есть идея, почему это сработало? – sauce

0

Если вы передали объект "entity", тогда POST будет работать. Если вы передаете примитивный тип данных, вы будете зависеть от использования HttpMethod.GET.

0

Если вы работаете на локальном dev-сервере, , то добавьте следующий фрагмент в MyApi.Builder, чтобы правильно настроить его после установки корневого URL-адреса.

.setGoogleClientRequestInitializer(new GoogleClientRequestInitializer() { 
       @Override 
       public void initialize(AbstractGoogleClientRequest<?> abstractGoogleClientRequest) throws IOException { 
        abstractGoogleClientRequest.setDisableGZipContent(true); 
       } 
      }) 

Источник: https://github.com/GoogleCloudPlatform/gradle-appengine-templates/tree/master/HelloEndpoints

Смежные вопросы