googleapis / googleapis/google-http-java-client

Apache HTTP client does not support GET requests with content

Abierto
#1,442 1 comentario 0 reacciones 0 asignados Ver en GitHub
type: feature request
Lenguaje dominante
Java
Estrellas
1.4k
Forks
473
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

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

```java
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).

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.