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

Chưa có ai nhận issue này.

Đánh giá

Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức phù hợp với người mới
48/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Đình trệ
Công nghệ
java

Hướng nghiên cứu

Bắt đầu với google-http-client-apache-v2/src/main/java/com/google/api/client/http/apache/v2/ApacheHttpRequest.java tại điều kiện tiên quyết được đề cập trong báo cáo, sau đó so sánh cách xử lý GET trong NetHttpTransport.java. Tái hiện ví dụ ImagesClient được cung cấp bằng ApacheHttpTransport và xác minh rằng việc xử lý nội dung GET không còn thất bại, trong khi PATCH vẫn được hỗ trợ.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

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

Ngôn ngữ chính
Java
Star
1.4k
Fork
476
Merge trung bình
10 giờ 47 phút
Pull request đã merge (30 ngày)
3

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của googleapis/google-http-java-client

Tất cả issue của googleapis/google-http-java-client

Issue tương tự

Thêm issue về Java

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.