googleapis / googleapis/google-http-java-client

Apache HTTP client does not support GET requests with content

Đang mở
#1,442 1 bình luận 0 reaction 0 người được giao Xem trên GitHub
type: feature request
Ngôn ngữ chính
Java
Star
1.4k
Fork
473
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

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

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.