Apache HTTP client does not support GET requests with content

Aberta
#1,442 1 comentário 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
3/5
Tempo estimado
1-2 dias
Facilidade para iniciantes
48/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Estagnada
Stack de tecnologia
java

Direção de pesquisa

Comece com google-http-client-apache-v2/src/main/java/com/google/api/client/http/apache/v2/ApacheHttpRequest.java na precondição mencionada no relatório e, em seguida, compare o tratamento de GET em NetHttpTransport.java. Reproduza o exemplo fornecido de ImagesClient com ApacheHttpTransport e verifique se o tratamento do conteúdo de GET não falha mais, enquanto PATCH continua sendo compatível.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

type: feature request

I'm trying to update a resource with google-cloud-compute-1.3.0, the client does this using HTTP PATCH. This is not supported with the default NetHttpTransport (#1316): https://github.com/googleapis/google-http-java-client/blob/7ebc6ca7807424b6372f1b52ac7b129752a9acf5/google-http-client/src/main/java/com/google/api/client/http/javanet/NetHttpTransport.java#L68-L76

To workaround that, I set the HTTP transport to ApacheHttpTransport, but then other requests fail with

Caused by: java.lang.IllegalStateException: Apache HTTP client does not support GET requests with content.
	at com.google.common.base.Preconditions.checkState(Preconditions.java:469)
	at com.google.api.client.util.Preconditions.checkState(Preconditions.java:113)
	at com.google.api.client.http.apache.v2.ApacheHttpRequest.execute(ApacheHttpRequest.java:60)
	at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1012)
	at com.google.api.gax.httpjson.HttpRequestRunnable.run(HttpRequestRunnable.java:143)
	... 6 more

This precondition is run when getContentStreaming() != null: https://github.com/googleapis/google-http-java-client/blob/7ebc6ca7807424b6372f1b52ac7b129752a9acf5/google-http-client-apache-v2/src/main/java/com/google/api/client/http/apache/v2/ApacheHttpRequest.java#L59-L71
but in this case getContentStreaming() is returning an com.google.api.client.http.EmptyContet due to https://github.com/googleapis/gax-java/pull/648

I think this precondition needs to be relaxed and be in-line with NetHttpTransport, which does support GET requests with non-null getContentStreaming().

Environment details
  1. Specify the API at the beginning of the title. For example, "BigQuery: ...").
    google-cloud-compute-1.3.0
  2. OS type and version: RHEL 8.3
  3. Java version: 11.0.10
  4. google-http-client version(s): 1.39.2
Code example
TransportChannelProvider transportChannelProvider = InstantiatingHttpJsonChannelProvider.newBuilder().setHttpTransport(new ApacheHttpTransport()).build();
ImagesSettings settings = ImagesSettings.newBuilder().setTransportChannelProvider(transportChannelProvider).build();
try (ImagesClient client = ImagesClient.create(settings)) {
    client.list("centos-cloud");
}

Will fail with the stacktrace above. Removing either .setTransportChannelProvider() or .setHttpTransport() (so that it defaults to NetHttpTransport) will fix this issue (but then PATCH doesn't work).

Linguagem predominante
Java
Estrelas
1.4k
Forks
476
Merge médio
10h 47min
PRs com merge (30d)
3

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de googleapis/google-http-java-client

Todas as issues de googleapis/google-http-java-client

Issues semelhantes

Mais issues de Java

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.