diff --git a/.github/blunderbuss.yml b/.github/blunderbuss.yml index 1a23ea42b..2176b0543 100644 --- a/.github/blunderbuss.yml +++ b/.github/blunderbuss.yml @@ -1,5 +1,5 @@ # Configuration for the Blunderbuss GitHub app. For more info see -# https://github.com/googleapis/repo-automation-bots/tree/master/packages/blunderbuss +# https://github.com/googleapis/repo-automation-bots/tree/main/packages/blunderbuss assign_prs_by: - labels: - samples diff --git a/.github/readme/synth.py b/.github/readme/synth.py deleted file mode 100644 index 7b48cc28d..000000000 --- a/.github/readme/synth.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright 2020 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""This script is used to synthesize generated the README for this library.""" - -from synthtool.languages import java - -java.custom_templates(["java_library/README.md"]) diff --git a/.github/release-trigger.yml b/.github/release-trigger.yml new file mode 100644 index 000000000..d4ca94189 --- /dev/null +++ b/.github/release-trigger.yml @@ -0,0 +1 @@ +enabled: true diff --git a/.github/sync-repo-settings.yaml b/.github/sync-repo-settings.yaml index f5c2c2c4e..a1781ed43 100644 --- a/.github/sync-repo-settings.yaml +++ b/.github/sync-repo-settings.yaml @@ -2,19 +2,17 @@ rebaseMergeAllowed: false squashMergeAllowed: true mergeCommitAllowed: false branchProtectionRules: - - pattern: master + - pattern: main isAdminEnforced: true requiredApprovingReviewCount: 1 requiresCodeOwnerReviews: true requiresStrictStatusChecks: false requiredStatusCheckContexts: - - units (7) - units (8) - units (11) - windows - dependencies (8) - dependencies (11) - - linkage-monitor - lint - clirr - cla/google @@ -24,13 +22,11 @@ branchProtectionRules: requiresCodeOwnerReviews: true requiresStrictStatusChecks: false requiredStatusCheckContexts: - - units (7) - units (8) - units (11) - windows - dependencies (8) - dependencies (11) - - linkage-monitor - lint - clirr - cla/google diff --git a/.github/trusted-contribution.yml b/.github/trusted-contribution.yml index f247d5c78..a0ba1f7d9 100644 --- a/.github/trusted-contribution.yml +++ b/.github/trusted-contribution.yml @@ -1,2 +1,3 @@ trustedContributors: -- renovate-bot \ No newline at end of file +- renovate-bot +- gcf-owl-bot[bot] diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 0195b32f0..2425d7234 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -1,7 +1,7 @@ on: push: branches: - - master + - main pull_request: name: ci jobs: @@ -9,11 +9,15 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - java: [7, 8, 11] + java: [8, 11, 17] steps: - uses: actions/checkout@v2 - - uses: actions/setup-java@v1 + - uses: stCarolas/setup-maven@v4 with: + maven-version: 3.8.1 + - uses: actions/setup-java@v2 + with: + distribution: zulu java-version: ${{matrix.java}} - run: java -version - run: .kokoro/build.sh @@ -23,8 +27,12 @@ jobs: runs-on: windows-latest steps: - uses: actions/checkout@v2 - - uses: actions/setup-java@v1 + - uses: stCarolas/setup-maven@v4 + with: + maven-version: 3.8.1 + - uses: actions/setup-java@v2 with: + distribution: zulu java-version: 8 - run: java -version - run: .kokoro/build.bat @@ -34,33 +42,28 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - java: [8, 11] + java: [8, 11, 17] steps: - uses: actions/checkout@v2 - - uses: actions/setup-java@v1 + - uses: stCarolas/setup-maven@v4 + with: + maven-version: 3.8.1 + - uses: actions/setup-java@v2 with: + distribution: zulu java-version: ${{matrix.java}} - run: java -version - run: .kokoro/dependencies.sh - linkage-monitor: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-java@v1 - with: - java-version: 8 - - run: java -version - - name: Install artifacts to local Maven repository - run: .kokoro/build.sh - shell: bash - - name: Validate any conflicts with regard to com.google.cloud:libraries-bom (latest release) - uses: GoogleCloudPlatform/cloud-opensource-java/linkage-monitor@v1-linkagemonitor lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: actions/setup-java@v1 + - uses: stCarolas/setup-maven@v4 with: + maven-version: 3.8.1 + - uses: actions/setup-java@v2 + with: + distribution: zulu java-version: 8 - run: java -version - run: .kokoro/build.sh @@ -70,8 +73,12 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: actions/setup-java@v1 + - uses: stCarolas/setup-maven@v4 + with: + maven-version: 3.8.1 + - uses: actions/setup-java@v2 with: + distribution: zulu java-version: 8 - run: java -version - run: .kokoro/build.sh diff --git a/.kokoro/build.sh b/.kokoro/build.sh index 54b11ce71..0ab303fec 100755 --- a/.kokoro/build.sh +++ b/.kokoro/build.sh @@ -115,7 +115,7 @@ fi # fix output location of logs bash .kokoro/coerce_logs.sh -if [[ "${ENABLE_BUILD_COP}" == "true" ]] +if [[ "${ENABLE_FLAKYBOT}" == "true" ]] then chmod +x ${KOKORO_GFILE_DIR}/linux_amd64/flakybot ${KOKORO_GFILE_DIR}/linux_amd64/flakybot -repo=googleapis/google-http-java-client diff --git a/.kokoro/continuous/readme.cfg b/.kokoro/continuous/readme.cfg deleted file mode 100644 index 5056c884d..000000000 --- a/.kokoro/continuous/readme.cfg +++ /dev/null @@ -1,55 +0,0 @@ -# Copyright 2020 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/python-multi" -} - -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/google-http-java-client/.kokoro/readme.sh" -} - -# Build logs will be here -action { - define_artifacts { - regex: "**/*sponge_log.xml" - regex: "**/*sponge_log.log" - } -} - -# The github token is stored here. -before_action { - fetch_keystore { - keystore_resource { - keystore_config_id: 73713 - keyname: "yoshi-automation-github-key" - # TODO(theacodes): remove this after secrets have globally propagated - backend_type: FASTCONFIGPUSH - } - } -} - -# Common env vars for all repositories and builds. -env_vars: { - key: "GITHUB_USER" - value: "yoshi-automation" -} -env_vars: { - key: "GITHUB_EMAIL" - value: "yoshi-automation@google.com" -} diff --git a/.kokoro/dependencies.sh b/.kokoro/dependencies.sh index 9030ba8f9..9a5105d7e 100755 --- a/.kokoro/dependencies.sh +++ b/.kokoro/dependencies.sh @@ -28,7 +28,28 @@ source ${scriptDir}/common.sh java -version echo $JOB_TYPE -export MAVEN_OPTS="-Xmx1024m -XX:MaxPermSize=128m" +function determineMavenOpts() { + local javaVersion=$( + # filter down to the version line, then pull out the version between quotes, + # then trim the version number down to its minimal number (removing any + # update or suffix number). + java -version 2>&1 | grep "version" \ + | sed -E 's/^.*"(.*?)".*$/\1/g' \ + | sed -E 's/^(1\.[0-9]\.0).*$/\1/g' + ) + + case $javaVersion in + "17") + # MaxPermSize is no longer supported as of jdk 17 + echo -n "-Xmx1024m" + ;; + *) + echo -n "-Xmx1024m -XX:MaxPermSize=128m" + ;; + esac +} + +export MAVEN_OPTS=$(determineMavenOpts) # this should run maven enforcer retry_with_backoff 3 10 \ diff --git a/.kokoro/nightly/integration.cfg b/.kokoro/nightly/integration.cfg index 0048c8ece..e51c7b4c6 100644 --- a/.kokoro/nightly/integration.cfg +++ b/.kokoro/nightly/integration.cfg @@ -22,7 +22,7 @@ env_vars: { } env_vars: { - key: "ENABLE_BUILD_COP" + key: "ENABLE_FLAKYBOT" value: "true" } diff --git a/.kokoro/nightly/samples.cfg b/.kokoro/nightly/samples.cfg index f25429314..9761fd864 100644 --- a/.kokoro/nightly/samples.cfg +++ b/.kokoro/nightly/samples.cfg @@ -33,6 +33,6 @@ env_vars: { } env_vars: { - key: "ENABLE_BUILD_COP" + key: "ENABLE_FLAKYBOT" value: "true" } diff --git a/.kokoro/release/common.sh b/.kokoro/release/common.sh index 6e3f65999..7f78ee414 100755 --- a/.kokoro/release/common.sh +++ b/.kokoro/release/common.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2018 Google Inc. +# Copyright 2018 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/.kokoro/release/drop.sh b/.kokoro/release/drop.sh index 5c4551efa..742ec1a88 100755 --- a/.kokoro/release/drop.sh +++ b/.kokoro/release/drop.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2018 Google Inc. +# Copyright 2018 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/.kokoro/release/promote.sh b/.kokoro/release/promote.sh index 1fa95fa53..3cac3d8a9 100755 --- a/.kokoro/release/promote.sh +++ b/.kokoro/release/promote.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2018 Google Inc. +# Copyright 2018 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/.kokoro/release/publish_javadoc.sh b/.kokoro/release/publish_javadoc.sh index dcc867fa6..c131d1542 100755 --- a/.kokoro/release/publish_javadoc.sh +++ b/.kokoro/release/publish_javadoc.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2019 Google Inc. +# Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/.kokoro/release/publish_javadoc11.sh b/.kokoro/release/publish_javadoc11.sh index d89c03401..7c5f7f6f6 100755 --- a/.kokoro/release/publish_javadoc11.sh +++ b/.kokoro/release/publish_javadoc11.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2021 Google Inc. +# Copyright 2021 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/.kokoro/release/stage.sh b/.kokoro/release/stage.sh index 8a1033843..77dc4e8f0 100755 --- a/.kokoro/release/stage.sh +++ b/.kokoro/release/stage.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2018 Google Inc. +# Copyright 2018 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/.kokoro/trampoline.sh b/.kokoro/trampoline.sh index 9da0f8398..8b69b793c 100644 --- a/.kokoro/trampoline.sh +++ b/.kokoro/trampoline.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2018 Google Inc. +# Copyright 2018 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/.repo-metadata.json b/.repo-metadata.json index db2d13700..8413b6807 100644 --- a/.repo-metadata.json +++ b/.repo-metadata.json @@ -1,7 +1,7 @@ { "name": "google-http-client", "name_pretty": "Google HTTP Java Client", - "client_documentation": "https://googleapis.dev/java/google-http-client/latest/", + "client_documentation": "https://cloud.google.com/java/docs/reference/google-http-client/latest/history", "release_level": "ga", "language": "java", "repo": "googleapis/google-http-java-client", diff --git a/CHANGELOG.md b/CHANGELOG.md index c9af4966a..9c3c2da18 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,23 @@ # Changelog +### [1.40.1](https://www.github.com/googleapis/google-http-java-client/compare/v1.40.0...v1.40.1) (2021-10-07) + + +### Bug Fixes + +* add used packages to OSGI manifest again ([#1439](https://www.github.com/googleapis/google-http-java-client/issues/1439)) ([#1440](https://www.github.com/googleapis/google-http-java-client/issues/1440)) ([59fc8b0](https://www.github.com/googleapis/google-http-java-client/commit/59fc8b03e5518864c60ce4dd47664e8935da343b)) +* update NetHttpRequest to prevent silent retry of DELETE requests ([#1472](https://www.github.com/googleapis/google-http-java-client/issues/1472)) ([57ef11a](https://www.github.com/googleapis/google-http-java-client/commit/57ef11a0e1904bb932e5493a30f0a2ca2a2798cf)), closes [#1471](https://www.github.com/googleapis/google-http-java-client/issues/1471) + + +### Dependencies + +* update dependency com.fasterxml.jackson.core:jackson-core to v2.12.5 ([#1437](https://www.github.com/googleapis/google-http-java-client/issues/1437)) ([0ce8467](https://www.github.com/googleapis/google-http-java-client/commit/0ce84676bfbe4cc8e237d5e33dfaa532b13e798c)) +* update dependency com.fasterxml.jackson.core:jackson-core to v2.13.0 ([#1469](https://www.github.com/googleapis/google-http-java-client/issues/1469)) ([7d9a042](https://www.github.com/googleapis/google-http-java-client/commit/7d9a042110b8879b592d7e80bd73e77c7a84d8b7)) +* update dependency com.google.protobuf:protobuf-java to v3.18.0 ([#1454](https://www.github.com/googleapis/google-http-java-client/issues/1454)) ([cc63e41](https://www.github.com/googleapis/google-http-java-client/commit/cc63e41fac8295c7fea751191a6fe9537c1f70e3)) +* update dependency com.google.protobuf:protobuf-java to v3.18.1 ([#1470](https://www.github.com/googleapis/google-http-java-client/issues/1470)) ([c36637a](https://www.github.com/googleapis/google-http-java-client/commit/c36637acbca536992349970664026cf145ad8964)) +* update dependency com.puppycrawl.tools:checkstyle to v9 ([#1441](https://www.github.com/googleapis/google-http-java-client/issues/1441)) ([a95cd97](https://www.github.com/googleapis/google-http-java-client/commit/a95cd9717fc8accd80252b12357971cb71887d90)) +* update project.appengine.version to v1.9.91 ([#1287](https://www.github.com/googleapis/google-http-java-client/issues/1287)) ([09ebf8d](https://www.github.com/googleapis/google-http-java-client/commit/09ebf8d7e3860f2b94a6fea0ef134c93904d4ed1)) + ## [1.40.0](https://www.github.com/googleapis/google-http-java-client/compare/v1.39.2...v1.40.0) (2021-08-20) diff --git a/checkstyle.xml b/checkstyle.xml index d7917523a..37934c4a6 100644 --- a/checkstyle.xml +++ b/checkstyle.xml @@ -32,6 +32,11 @@ + + + + + @@ -46,10 +51,6 @@ - - - - @@ -239,12 +240,11 @@ value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/> - + - - + diff --git a/docs/setup.md b/docs/setup.md index 9f624d319..3e57c0741 100644 --- a/docs/setup.md +++ b/docs/setup.md @@ -23,7 +23,7 @@ the `dependencyManagement` section of your `pom.xml`: com.google.cloud libraries-bom - 21.0.0 + 23.1.0 pom import diff --git a/google-http-client-android-test/pom.xml b/google-http-client-android-test/pom.xml index 6583e08d8..189057394 100644 --- a/google-http-client-android-test/pom.xml +++ b/google-http-client-android-test/pom.xml @@ -4,7 +4,7 @@ google-http-client google-http-client-android-test Test project for google-http-client-android. - 1.40.0 + 1.40.1 apk @@ -53,7 +53,7 @@ com.google.http-client google-http-client-android - 1.40.0 + 1.40.1 android @@ -72,7 +72,7 @@ com.google.http-client google-http-client-test - 1.40.0 + 1.40.1 junit diff --git a/google-http-client-android/pom.xml b/google-http-client-android/pom.xml index c579bc866..383e11642 100644 --- a/google-http-client-android/pom.xml +++ b/google-http-client-android/pom.xml @@ -4,11 +4,11 @@ com.google.http-client google-http-client-parent - 1.40.0 + 1.40.1 ../pom.xml google-http-client-android - 1.40.0 + 1.40.1 Android Platform Extensions to the Google HTTP Client Library for Java. diff --git a/google-http-client-apache-v2/pom.xml b/google-http-client-apache-v2/pom.xml index 77f0508ce..f65cef781 100644 --- a/google-http-client-apache-v2/pom.xml +++ b/google-http-client-apache-v2/pom.xml @@ -4,11 +4,11 @@ com.google.http-client google-http-client-parent - 1.40.0 + 1.40.1 ../pom.xml google-http-client-apache-v2 - 1.40.0 + 1.40.1 Apache HTTP transport v2 for the Google HTTP Client Library for Java. @@ -99,10 +99,5 @@ org.apache.httpcomponents httpcore - - org.mockito - mockito-all - test - diff --git a/google-http-client-apache-v2/src/test/java/com/google/api/client/http/apache/v2/ApacheHttpTransportTest.java b/google-http-client-apache-v2/src/test/java/com/google/api/client/http/apache/v2/ApacheHttpTransportTest.java index f6800ff47..48a9d1c56 100644 --- a/google-http-client-apache-v2/src/test/java/com/google/api/client/http/apache/v2/ApacheHttpTransportTest.java +++ b/google-http-client-apache-v2/src/test/java/com/google/api/client/http/apache/v2/ApacheHttpTransportTest.java @@ -20,14 +20,13 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.junit.Assume.assumeFalse; -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; +import static org.junit.Assume.assumeTrue; import com.google.api.client.http.GenericUrl; import com.google.api.client.http.HttpResponseException; import com.google.api.client.http.HttpTransport; import com.google.api.client.http.LowLevelHttpResponse; +import com.google.api.client.testing.http.apache.MockHttpClient; import com.google.api.client.util.ByteArrayStreamingContent; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; @@ -47,7 +46,9 @@ import org.apache.http.HttpRequestInterceptor; import org.apache.http.HttpResponse; import org.apache.http.HttpVersion; +import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.conn.ConnectTimeoutException; import org.apache.http.conn.HttpHostConnectException; @@ -65,6 +66,15 @@ */ public class ApacheHttpTransportTest { + private static class MockHttpResponse extends BasicHttpResponse implements CloseableHttpResponse { + public MockHttpResponse() { + super(HttpVersion.HTTP_1_1, 200, "OK"); + } + + @Override + public void close() throws IOException {} + } + @Test public void testApacheHttpTransport() { ApacheHttpTransport transport = new ApacheHttpTransport(); @@ -99,10 +109,14 @@ private void checkHttpClient(HttpClient client) { @Test public void testRequestsWithContent() throws IOException { - HttpClient mockClient = mock(HttpClient.class); - HttpResponse mockResponse = mock(HttpResponse.class); - when(mockClient.execute(any(HttpUriRequest.class))).thenReturn(mockResponse); - + HttpClient mockClient = + new MockHttpClient() { + @Override + public CloseableHttpResponse execute(HttpUriRequest request) + throws IOException, ClientProtocolException { + return new MockHttpResponse(); + } + }; ApacheHttpTransport transport = new ApacheHttpTransport(mockClient); // Test GET. @@ -204,6 +218,9 @@ public void process(HttpRequest request, HttpContext context) public void testConnectTimeout() { // Apache HttpClient doesn't appear to behave correctly on windows assumeFalse(isWindows()); + // TODO(chanseok): Java 17 returns an IOException (SocketException: Network is unreachable). + // Figure out a way to verify connection timeout works on Java 17+. + assumeTrue(System.getProperty("java.version").compareTo("17") < 0); HttpTransport httpTransport = new ApacheHttpTransport(); GenericUrl url = new GenericUrl("http://google.com:81"); @@ -213,7 +230,7 @@ public void testConnectTimeout() { } catch (HttpHostConnectException | ConnectTimeoutException expected) { // expected } catch (IOException e) { - fail("unexpected IOException: " + e.getClass().getName()); + fail("unexpected IOException: " + e.getClass().getName() + ": " + e.getMessage()); } } @@ -222,9 +239,9 @@ private static class FakeServer implements AutoCloseable { private final ExecutorService executorService; FakeServer(HttpHandler httpHandler) throws IOException { - this.server = HttpServer.create(new InetSocketAddress(0), 0); - this.executorService = Executors.newFixedThreadPool(1); - server.setExecutor(this.executorService); + server = HttpServer.create(new InetSocketAddress(0), 0); + executorService = Executors.newFixedThreadPool(1); + server.setExecutor(executorService); server.createContext("/", httpHandler); server.start(); } @@ -235,8 +252,8 @@ public int getPort() { @Override public void close() { - this.server.stop(0); - this.executorService.shutdownNow(); + server.stop(0); + executorService.shutdownNow(); } } @@ -321,38 +338,4 @@ public void handle(HttpExchange httpExchange) throws IOException { private boolean isWindows() { return System.getProperty("os.name").startsWith("Windows"); } - - @Test(timeout = 10_000L) - public void testDisconnectShouldNotWaitToReadResponse() throws IOException { - // This handler waits for 100s before returning writing content. The test should - // timeout if disconnect waits for the response before closing the connection. - final HttpHandler handler = - new HttpHandler() { - @Override - public void handle(HttpExchange httpExchange) throws IOException { - byte[] response = httpExchange.getRequestURI().toString().getBytes(); - httpExchange.sendResponseHeaders(200, response.length); - - // Sleep for longer than the test timeout - try { - Thread.sleep(100_000); - } catch (InterruptedException e) { - throw new IOException("interrupted", e); - } - try (OutputStream out = httpExchange.getResponseBody()) { - out.write(response); - } - } - }; - - try (FakeServer server = new FakeServer(handler)) { - HttpTransport transport = new ApacheHttpTransport(); - GenericUrl testUrl = new GenericUrl("http://localhost/foo//bar"); - testUrl.setPort(server.getPort()); - com.google.api.client.http.HttpResponse response = - transport.createRequestFactory().buildGetRequest(testUrl).execute(); - // disconnect should not wait to read the entire content - response.disconnect(); - } - } } diff --git a/google-http-client-appengine/pom.xml b/google-http-client-appengine/pom.xml index 4977aeee6..1ceaf996a 100644 --- a/google-http-client-appengine/pom.xml +++ b/google-http-client-appengine/pom.xml @@ -4,11 +4,11 @@ com.google.http-client google-http-client-parent - 1.40.0 + 1.40.1 ../pom.xml google-http-client-appengine - 1.40.0 + 1.40.1 Google App Engine extensions to the Google HTTP Client Library for Java. diff --git a/google-http-client-assembly/pom.xml b/google-http-client-assembly/pom.xml index 8e6493410..0c6c62104 100644 --- a/google-http-client-assembly/pom.xml +++ b/google-http-client-assembly/pom.xml @@ -4,12 +4,12 @@ com.google.http-client google-http-client-parent - 1.40.0 + 1.40.1 ../pom.xml com.google.http-client google-http-client-assembly - 1.40.0 + 1.40.1 pom Assembly for the Google HTTP Client Library for Java diff --git a/google-http-client-bom/pom.xml b/google-http-client-bom/pom.xml index 88a4215c6..01519dbc1 100644 --- a/google-http-client-bom/pom.xml +++ b/google-http-client-bom/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.google.http-client google-http-client-bom - 1.40.0 + 1.40.1 pom Google HTTP Client Library for Java BOM @@ -63,52 +63,52 @@ com.google.http-client google-http-client - 1.40.0 + 1.40.1 com.google.http-client google-http-client-android - 1.40.0 + 1.40.1 com.google.http-client google-http-client-apache-v2 - 1.40.0 + 1.40.1 com.google.http-client google-http-client-appengine - 1.40.0 + 1.40.1 com.google.http-client google-http-client-findbugs - 1.40.0 + 1.40.1 com.google.http-client google-http-client-gson - 1.40.0 + 1.40.1 com.google.http-client google-http-client-jackson2 - 1.40.0 + 1.40.1 com.google.http-client google-http-client-protobuf - 1.40.0 + 1.40.1 com.google.http-client google-http-client-test - 1.40.0 + 1.40.1 com.google.http-client google-http-client-xml - 1.40.0 + 1.40.1 @@ -128,7 +128,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.2.0 + 3.3.1 true diff --git a/google-http-client-findbugs/pom.xml b/google-http-client-findbugs/pom.xml index 80792af8b..f9d9b03f4 100644 --- a/google-http-client-findbugs/pom.xml +++ b/google-http-client-findbugs/pom.xml @@ -4,11 +4,11 @@ com.google.http-client google-http-client-parent - 1.40.0 + 1.40.1 ../pom.xml google-http-client-findbugs - 1.40.0 + 1.40.1 Google APIs Client Library Findbugs custom plugin. diff --git a/google-http-client-gson/pom.xml b/google-http-client-gson/pom.xml index 6baf63ccb..ad768a4d0 100644 --- a/google-http-client-gson/pom.xml +++ b/google-http-client-gson/pom.xml @@ -4,11 +4,11 @@ com.google.http-client google-http-client-parent - 1.40.0 + 1.40.1 ../pom.xml google-http-client-gson - 1.40.0 + 1.40.1 GSON extensions to the Google HTTP Client Library for Java. diff --git a/google-http-client-jackson2/pom.xml b/google-http-client-jackson2/pom.xml index 6c815fe9a..1d9ef4286 100644 --- a/google-http-client-jackson2/pom.xml +++ b/google-http-client-jackson2/pom.xml @@ -4,11 +4,11 @@ com.google.http-client google-http-client-parent - 1.40.0 + 1.40.1 ../pom.xml google-http-client-jackson2 - 1.40.0 + 1.40.1 Jackson 2 extensions to the Google HTTP Client Library for Java. diff --git a/google-http-client-protobuf/pom.xml b/google-http-client-protobuf/pom.xml index 514cc32ac..5f6cd1b84 100644 --- a/google-http-client-protobuf/pom.xml +++ b/google-http-client-protobuf/pom.xml @@ -4,11 +4,11 @@ com.google.http-client google-http-client-parent - 1.40.0 + 1.40.1 ../pom.xml google-http-client-protobuf - 1.40.0 + 1.40.1 Protocol Buffer extensions to the Google HTTP Client Library for Java. diff --git a/google-http-client-test/pom.xml b/google-http-client-test/pom.xml index 2783c17f2..5bd3dc575 100644 --- a/google-http-client-test/pom.xml +++ b/google-http-client-test/pom.xml @@ -4,11 +4,11 @@ com.google.http-client google-http-client-parent - 1.40.0 + 1.40.1 ../pom.xml google-http-client-test - 1.40.0 + 1.40.1 Shared classes used for testing of artifacts in the Google HTTP Client Library for Java. diff --git a/google-http-client-xml/pom.xml b/google-http-client-xml/pom.xml index 8ac11ed9b..2e533db6f 100644 --- a/google-http-client-xml/pom.xml +++ b/google-http-client-xml/pom.xml @@ -4,11 +4,11 @@ com.google.http-client google-http-client-parent - 1.40.0 + 1.40.1 ../pom.xml google-http-client-xml - 1.40.0 + 1.40.1 XML extensions to the Google HTTP Client Library for Java. diff --git a/google-http-client/pom.xml b/google-http-client/pom.xml index cdf8829cd..5c5314c17 100644 --- a/google-http-client/pom.xml +++ b/google-http-client/pom.xml @@ -4,11 +4,11 @@ com.google.http-client google-http-client-parent - 1.40.0 + 1.40.1 ../pom.xml google-http-client - 1.40.0 + 1.40.1 Google HTTP Client Library for Java Google HTTP Client Library for Java. Functionality that works on all supported Java platforms, @@ -109,7 +109,7 @@ - javax.annotation;resolution:=optional + javax.annotation;resolution:=optional,* @@ -167,11 +167,6 @@ truth test - - org.mockito - mockito-all - test - io.opencensus opencensus-impl diff --git a/google-http-client/src/main/java/com/google/api/client/http/GZipEncoding.java b/google-http-client/src/main/java/com/google/api/client/http/GZipEncoding.java index 28574a80d..c811b002c 100644 --- a/google-http-client/src/main/java/com/google/api/client/http/GZipEncoding.java +++ b/google-http-client/src/main/java/com/google/api/client/http/GZipEncoding.java @@ -28,10 +28,12 @@ */ public class GZipEncoding implements HttpEncoding { + @Override public String getName() { return "gzip"; } + @Override public void encode(StreamingContent content, OutputStream out) throws IOException { // must not close the underlying output stream OutputStream out2 = diff --git a/google-http-client/src/main/java/com/google/api/client/http/HttpResponse.java b/google-http-client/src/main/java/com/google/api/client/http/HttpResponse.java index f7bf0b42c..e97943210 100644 --- a/google-http-client/src/main/java/com/google/api/client/http/HttpResponse.java +++ b/google-http-client/src/main/java/com/google/api/client/http/HttpResponse.java @@ -442,10 +442,8 @@ public void ignore() throws IOException { * @since 1.4 */ public void disconnect() throws IOException { - // Close the connection before trying to close the InputStream content. If you are trying to - // disconnect, we shouldn't need to read any further content. - response.disconnect(); ignore(); + response.disconnect(); } /** diff --git a/google-http-client/src/main/java/com/google/api/client/http/javanet/NetHttpRequest.java b/google-http-client/src/main/java/com/google/api/client/http/javanet/NetHttpRequest.java index 1d043472b..fa201b06f 100644 --- a/google-http-client/src/main/java/com/google/api/client/http/javanet/NetHttpRequest.java +++ b/google-http-client/src/main/java/com/google/api/client/http/javanet/NetHttpRequest.java @@ -141,6 +141,9 @@ LowLevelHttpResponse execute(final OutputWriter outputWriter) throws IOException Preconditions.checkArgument( contentLength == 0, "%s with non-zero content length is not supported", requestMethod); } + } else if ("DELETE".equals(connection.getRequestMethod())) { + connection.setDoOutput(true); + connection.setFixedLengthStreamingMode(0L); } // connect boolean successfulConnection = false; diff --git a/google-http-client/src/main/java/com/google/api/client/testing/http/javanet/MockHttpURLConnection.java b/google-http-client/src/main/java/com/google/api/client/testing/http/javanet/MockHttpURLConnection.java index 2fba28b48..ba6f2f539 100644 --- a/google-http-client/src/main/java/com/google/api/client/testing/http/javanet/MockHttpURLConnection.java +++ b/google-http-client/src/main/java/com/google/api/client/testing/http/javanet/MockHttpURLConnection.java @@ -42,6 +42,10 @@ public class MockHttpURLConnection extends HttpURLConnection { /** Whether {@link #doOutput} was called. */ private boolean doOutputCalled; + /** Whether {@link #setFixedLengthStreamingMode(int)} was called. */ + private boolean setFixedLengthStreamingModeIntCalled = false; + /** Whether {@link #setFixedLengthStreamingMode(long)} was called. */ + private boolean setFixedLengthStreamingModeLongCalled = false; /** * Output stream or {@code null} to throw an {@link UnknownServiceException} when {@link @@ -205,4 +209,24 @@ public String getHeaderField(String name) { public int getChunkLength() { return chunkLength; } + + @Override + public void setFixedLengthStreamingMode(int contentLength) { + this.setFixedLengthStreamingModeIntCalled = true; + super.setFixedLengthStreamingMode(contentLength); + } + + @Override + public void setFixedLengthStreamingMode(long contentLength) { + this.setFixedLengthStreamingModeLongCalled = true; + super.setFixedLengthStreamingMode(contentLength); + } + + public boolean isSetFixedLengthStreamingModeIntCalled() { + return setFixedLengthStreamingModeIntCalled; + } + + public boolean isSetFixedLengthStreamingModeLongCalled() { + return setFixedLengthStreamingModeLongCalled; + } } diff --git a/google-http-client/src/main/java/com/google/api/client/testing/json/MockJsonParser.java b/google-http-client/src/main/java/com/google/api/client/testing/json/MockJsonParser.java index 422ddd962..64b48bcee 100644 --- a/google-http-client/src/main/java/com/google/api/client/testing/json/MockJsonParser.java +++ b/google-http-client/src/main/java/com/google/api/client/testing/json/MockJsonParser.java @@ -38,7 +38,7 @@ public class MockJsonParser extends JsonParser { private final JsonFactory factory; - MockJsonParser(JsonFactory factory) { + public MockJsonParser(JsonFactory factory) { this.factory = factory; } diff --git a/google-http-client/src/test/java/com/google/api/client/http/GZipEncodingTest.java b/google-http-client/src/test/java/com/google/api/client/http/GZipEncodingTest.java index 5ecd0f8e9..4963b05bd 100644 --- a/google-http-client/src/test/java/com/google/api/client/http/GZipEncodingTest.java +++ b/google-http-client/src/test/java/com/google/api/client/http/GZipEncodingTest.java @@ -28,19 +28,33 @@ */ public class GZipEncodingTest extends TestCase { - byte[] EXPECED_ZIPPED = + private static final byte[] EXPECED_ZIPPED = + new byte[] { + 31, -117, 8, 0, 0, 0, 0, 0, 0, -1, -53, -49, -57, 13, 0, -30, -66, -14, 54, 28, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 + }; + + // TODO: remove when no longer using Java < 16: https://bugs.openjdk.java.net/browse/JDK-8244706 + @Deprecated + private static final byte[] EXPECED_ZIPPED_BELOW_JAVA_16 = new byte[] { 31, -117, 8, 0, 0, 0, 0, 0, 0, 0, -53, -49, -57, 13, 0, -30, -66, -14, 54, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; public void test() throws IOException { + // TODO: remove when no longer using Java < 16. + byte[] expected = + System.getProperty("java.version").compareTo("16") >= 0 + ? EXPECED_ZIPPED + : EXPECED_ZIPPED_BELOW_JAVA_16; + GZipEncoding encoding = new GZipEncoding(); ByteArrayStreamingContent content = new ByteArrayStreamingContent(StringUtils.getBytesUtf8("oooooooooooooooooooooooooooo")); TestableByteArrayOutputStream out = new TestableByteArrayOutputStream(); encoding.encode(content, out); assertFalse(out.isClosed()); - Assert.assertArrayEquals(EXPECED_ZIPPED, out.getBuffer()); + Assert.assertArrayEquals(expected, out.getBuffer()); } } diff --git a/google-http-client/src/test/java/com/google/api/client/http/HttpEncodingStreamingContentTest.java b/google-http-client/src/test/java/com/google/api/client/http/HttpEncodingStreamingContentTest.java index f353004a2..265814722 100644 --- a/google-http-client/src/test/java/com/google/api/client/http/HttpEncodingStreamingContentTest.java +++ b/google-http-client/src/test/java/com/google/api/client/http/HttpEncodingStreamingContentTest.java @@ -28,13 +28,27 @@ */ public class HttpEncodingStreamingContentTest extends TestCase { - byte[] EXPECED_ZIPPED = + private static final byte[] EXPECED_ZIPPED = + new byte[] { + 31, -117, 8, 0, 0, 0, 0, 0, 0, -1, -53, -49, -57, 13, 0, -30, -66, -14, 54, 28, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 + }; + + // TODO: remove when no longer using Java < 16: https://bugs.openjdk.java.net/browse/JDK-8244706 + @Deprecated + private static final byte[] EXPECED_ZIPPED_BELOW_JAVA_16 = new byte[] { 31, -117, 8, 0, 0, 0, 0, 0, 0, 0, -53, -49, -57, 13, 0, -30, -66, -14, 54, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; public void test() throws IOException { + // TODO: remove when no longer using Java < 16. + byte[] expected = + System.getProperty("java.version").compareTo("16") >= 0 + ? EXPECED_ZIPPED + : EXPECED_ZIPPED_BELOW_JAVA_16; + GZipEncoding encoding = new GZipEncoding(); ByteArrayStreamingContent content = new ByteArrayStreamingContent(StringUtils.getBytesUtf8("oooooooooooooooooooooooooooo")); @@ -43,6 +57,6 @@ public void test() throws IOException { new HttpEncodingStreamingContent(content, encoding); encodingContent.writeTo(out); assertFalse(out.isClosed()); - Assert.assertArrayEquals(EXPECED_ZIPPED, out.getBuffer()); + Assert.assertArrayEquals(expected, out.getBuffer()); } } diff --git a/google-http-client/src/test/java/com/google/api/client/http/javanet/NetHttpRequestTest.java b/google-http-client/src/test/java/com/google/api/client/http/javanet/NetHttpRequestTest.java index ae3606ca5..754ae8fad 100644 --- a/google-http-client/src/test/java/com/google/api/client/http/javanet/NetHttpRequestTest.java +++ b/google-http-client/src/test/java/com/google/api/client/http/javanet/NetHttpRequestTest.java @@ -233,4 +233,17 @@ public void testChunkedLengthNotSet() throws Exception { assertEquals(connection.getChunkLength(), -1); assertEquals("6", request.getRequestProperty("Content-Length")); } + + // see https://github.com/googleapis/google-http-java-client/issues/1471 for more details + @Test + public void testDeleteSetsContentLengthToZeroWithoutContent() throws Exception { + MockHttpURLConnection connection = new MockHttpURLConnection(new URL(HttpTesting.SIMPLE_URL)); + connection.setRequestMethod("DELETE"); + NetHttpRequest request = new NetHttpRequest(connection); + request.execute(); + + assertTrue(connection.doOutputCalled()); + assertTrue(connection.isSetFixedLengthStreamingModeLongCalled()); + assertFalse(connection.isSetFixedLengthStreamingModeIntCalled()); + } } diff --git a/google-http-client/src/test/java/com/google/api/client/json/JsonObjectParserTest.java b/google-http-client/src/test/java/com/google/api/client/json/JsonObjectParserTest.java index 3192b62ba..d4f030a22 100644 --- a/google-http-client/src/test/java/com/google/api/client/json/JsonObjectParserTest.java +++ b/google-http-client/src/test/java/com/google/api/client/json/JsonObjectParserTest.java @@ -14,17 +14,18 @@ package com.google.api.client.json; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - +import com.google.api.client.testing.json.MockJsonFactory; +import com.google.api.client.testing.json.MockJsonParser; import com.google.common.base.Charsets; import java.io.ByteArrayInputStream; +import java.io.IOException; import java.io.InputStream; import java.io.Reader; import java.io.StringReader; import java.lang.reflect.Type; import java.nio.charset.Charset; import junit.framework.TestCase; +import org.junit.Test; /** * Tests for the {@link JsonObjectParser} class. @@ -34,6 +35,7 @@ */ public class JsonObjectParserTest extends TestCase { + @Test public void testConstructor_null() { try { new JsonObjectParser((JsonFactory) null); @@ -42,36 +44,49 @@ public void testConstructor_null() { } } + @Test public void testParse_InputStream() throws Exception { - InputStream in = new ByteArrayInputStream(new byte[256]); - Charset utf8 = Charsets.UTF_8; - Type type = Integer[].class; + InputStream in = new ByteArrayInputStream(new byte[0]); Integer[] parsed = new Integer[1]; - JsonParser mockJsonParser = mock(JsonParser.class); - when(mockJsonParser.parse(type, true)).thenReturn(parsed); - - JsonFactory mockJsonFactory = mock(JsonFactory.class); - when(mockJsonFactory.createJsonParser(in, utf8)).thenReturn(mockJsonParser); - // Test the JsonObjectParser - JsonObjectParser jop = new JsonObjectParser(mockJsonFactory); - assertEquals(parsed, jop.parseAndClose(in, utf8, type)); + JsonObjectParser jop = new JsonObjectParser(setUpMockJsonFactory(Integer[].class, parsed)); + assertEquals(parsed, jop.parseAndClose(in, Charsets.UTF_8, Integer[].class)); } + @Test public void testParse_Reader() throws Exception { Reader in = new StringReader("something"); - Type type = Integer[].class; Integer[] parsed = new Integer[1]; - JsonParser mockJsonParser = mock(JsonParser.class); - when(mockJsonParser.parse(type, true)).thenReturn(parsed); + // Test the JsonObjectParser + JsonObjectParser jop = new JsonObjectParser(setUpMockJsonFactory(Integer[].class, parsed)); + assertEquals(parsed, jop.parseAndClose(in, Integer[].class)); + } - JsonFactory mockJsonFactory = mock(JsonFactory.class); - when(mockJsonFactory.createJsonParser(in)).thenReturn(mockJsonParser); + // Mockito.mock() on JsonFactory and JsonParser fails with Java 17, so set them up manually. + private static final JsonFactory setUpMockJsonFactory( + final Class clazz, final T parsedResult) { + final MockJsonParser jsonParser = + new MockJsonParser(null) { + @Override + public Object parse(Type dataType, boolean close) throws IOException { + assertEquals(clazz, dataType); + return parsedResult; + } + }; - // Test the JsonObjectParser - JsonObjectParser jop = new JsonObjectParser(mockJsonFactory); - assertEquals(parsed, jop.parseAndClose(in, type)); + return new MockJsonFactory() { + @Override + public JsonParser createJsonParser(Reader in) throws IOException { + return jsonParser; + } + + @Override + public JsonParser createJsonParser(InputStream in, Charset charset) throws IOException { + assertEquals(Charsets.UTF_8, charset); + return jsonParser; + } + }; } } diff --git a/pom.xml b/pom.xml index a51d372ba..c66450055 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.google.http-client google-http-client-parent - 1.40.0 + 1.40.1 pom Parent for the Google HTTP Client Library for Java Google HTTP Client Library for Java @@ -227,11 +227,6 @@ google-http-client-test ${project.http-client.version} - - org.mockito - mockito-all - 1.10.19 - com.google.j2objc j2objc-annotations @@ -307,7 +302,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.2.0 + 3.3.1 attach-javadocs @@ -573,13 +568,13 @@ - google-api-java-client/google-api-client-assembly/android-properties (make the filenames match the version here) - Internally, update the default features.json file --> - 1.40.0 - 1.9.71 + 1.40.1 + 1.9.91 UTF-8 3.0.2 2.8.8 - 2.12.4 - 3.17.3 + 2.13.0 + 3.18.1 30.1.1-android 1.1.4c 4.5.13 @@ -672,7 +667,7 @@ com.puppycrawl.tools checkstyle - 8.23 + 9.0.1 @@ -705,7 +700,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.2.0 + 3.3.1 docFX @@ -719,7 +714,7 @@ com.microsoft.doclet.DocFxDoclet false - ${env.KOKORO_GFILE_DIR}/java-docfx-doclet-1.1.1.jar + ${env.KOKORO_GFILE_DIR}/java-docfx-doclet-1.2.1.jar -outputpath ${project.build.directory}/docfx-yml -projectname ${artifactId} diff --git a/renovate.json b/renovate.json index 87e183ebd..93a8a717a 100644 --- a/renovate.json +++ b/renovate.json @@ -50,7 +50,8 @@ "^junit:junit", "^com.google.truth:truth", "^org.mockito:mockito-core", - "^org.objenesis:objenesis" + "^org.objenesis:objenesis", + "^com.google.cloud:google-cloud-conformance-tests" ], "semanticCommitType": "test", "semanticCommitScope": "deps" @@ -69,8 +70,5 @@ } ], "semanticCommits": true, - "dependencyDashboard": true, - "dependencyDashboardLabels": [ - "type: process" - ] + "dependencyDashboard": true } diff --git a/samples/dailymotion-simple-cmdline-sample/pom.xml b/samples/dailymotion-simple-cmdline-sample/pom.xml index 2f3d241a6..259925535 100644 --- a/samples/dailymotion-simple-cmdline-sample/pom.xml +++ b/samples/dailymotion-simple-cmdline-sample/pom.xml @@ -4,7 +4,7 @@ com.google.http-client google-http-client-parent - 1.40.0 + 1.40.1 ../../pom.xml dailymotion-simple-cmdline-sample @@ -95,7 +95,7 @@ com.puppycrawl.tools checkstyle - 8.23 + 9.0.1 diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml index 576dc62cc..9d0257028 100644 --- a/samples/snippets/pom.xml +++ b/samples/snippets/pom.xml @@ -31,7 +31,7 @@ com.google.cloud libraries-bom - 21.0.0 + 23.1.0 pom import diff --git a/synth.metadata b/synth.metadata index 70951b3ea..53b033004 100644 --- a/synth.metadata +++ b/synth.metadata @@ -4,14 +4,14 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/google-http-java-client.git", - "sha": "933b0bd386f413bd960f81c706edae81d9dc030a" + "sha": "9f389ef89195af77eff8f1e1c1c9ee9bf9c7792c" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "5d3c52f5db664eee9026db76b5bcb466f3a09ca9" + "sha": "a4be3384ccb92364795d981f2863f6986fcee620" } } ], @@ -23,8 +23,8 @@ ".github/PULL_REQUEST_TEMPLATE.md", ".github/blunderbuss.yml", ".github/generated-files-bot.yml", - ".github/readme/synth.py", ".github/release-please.yml", + ".github/release-trigger.yml", ".github/snippet-bot.yml", ".github/sync-repo-settings.yaml", ".github/trusted-contribution.yml", @@ -38,7 +38,6 @@ ".kokoro/common.sh", ".kokoro/continuous/common.cfg", ".kokoro/continuous/java8.cfg", - ".kokoro/continuous/readme.cfg", ".kokoro/dependencies.sh", ".kokoro/nightly/common.cfg", ".kokoro/nightly/integration.cfg", diff --git a/versions.txt b/versions.txt index d9550157d..106d4e30f 100644 --- a/versions.txt +++ b/versions.txt @@ -1,17 +1,17 @@ # Format: # module:released-version:current-version -google-http-client:1.40.0:1.40.0 -google-http-client-bom:1.40.0:1.40.0 -google-http-client-parent:1.40.0:1.40.0 -google-http-client-android:1.40.0:1.40.0 -google-http-client-android-test:1.40.0:1.40.0 -google-http-client-apache-v2:1.40.0:1.40.0 -google-http-client-appengine:1.40.0:1.40.0 -google-http-client-assembly:1.40.0:1.40.0 -google-http-client-findbugs:1.40.0:1.40.0 -google-http-client-gson:1.40.0:1.40.0 -google-http-client-jackson2:1.40.0:1.40.0 -google-http-client-protobuf:1.40.0:1.40.0 -google-http-client-test:1.40.0:1.40.0 -google-http-client-xml:1.40.0:1.40.0 +google-http-client:1.40.1:1.40.1 +google-http-client-bom:1.40.1:1.40.1 +google-http-client-parent:1.40.1:1.40.1 +google-http-client-android:1.40.1:1.40.1 +google-http-client-android-test:1.40.1:1.40.1 +google-http-client-apache-v2:1.40.1:1.40.1 +google-http-client-appengine:1.40.1:1.40.1 +google-http-client-assembly:1.40.1:1.40.1 +google-http-client-findbugs:1.40.1:1.40.1 +google-http-client-gson:1.40.1:1.40.1 +google-http-client-jackson2:1.40.1:1.40.1 +google-http-client-protobuf:1.40.1:1.40.1 +google-http-client-test:1.40.1:1.40.1 +google-http-client-xml:1.40.1:1.40.1