-
Notifications
You must be signed in to change notification settings - Fork 465
Description
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):
Lines 68 to 76 in 7ebc6ca
| private static final String[] SUPPORTED_METHODS = { | |
| HttpMethods.DELETE, | |
| HttpMethods.GET, | |
| HttpMethods.HEAD, | |
| HttpMethods.OPTIONS, | |
| HttpMethods.POST, | |
| HttpMethods.PUT, | |
| HttpMethods.TRACE | |
| }; |
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:
Lines 59 to 71 in 7ebc6ca
| if (getStreamingContent() != null) { | |
| Preconditions.checkState( | |
| request instanceof HttpEntityEnclosingRequest, | |
| "Apache HTTP client does not support %s requests with content.", | |
| request.getRequestLine().getMethod()); | |
| ContentEntity entity = new ContentEntity(getContentLength(), getStreamingContent()); | |
| entity.setContentEncoding(getContentEncoding()); | |
| entity.setContentType(getContentType()); | |
| if (getContentLength() == -1) { | |
| entity.setChunked(true); | |
| } | |
| ((HttpEntityEnclosingRequest) request).setEntity(entity); | |
| } |
but in this case
getContentStreaming() is returning an com.google.api.client.http.EmptyContet due to googleapis/gax-java#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
- Specify the API at the beginning of the title. For example, "BigQuery: ...").
google-cloud-compute-1.3.0 - OS type and version: RHEL 8.3
- Java version: 11.0.10
- 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).