Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Jul 2, 2025

This PR fixes an issue where HTTP 304 (Not Modified) responses would throw IllegalStateException when the response body is empty or null, similar to the previous fix for 204 responses.

Problem

When handling 304 responses with empty bodies, the current implementation would fail with:

java.lang.IllegalStateException: response is not eligible for a body and must not be closed
	at okhttp3.Response.close(Response.kt:302)
	at com.microsoft.kiota.http.OkHttpRequestAdapter.closeResponse(OkHttpRequestAdapter.java:348)

Solution

Applied the same pattern already established for 204 (No Content) responses to 304 (Not Modified) responses:

  1. Updated shouldReturnNull() method to return true for 304 responses, ensuring they return null instead of attempting to parse empty content
  2. Updated closeResponse() method to skip closing 304 responses, preventing the IllegalStateException
  3. Extended existing tests to include 304 in the test cases that verify null responses for empty content

Changes Made

  • Modified shouldReturnNull(): return statusCode == 204 || statusCode == 304;
  • Modified closeResponse(): if (closeResponse && response.code() != 204 && response.code() != 304)
  • Added 304 to existing test cases in OkHttpRequestAdapterTest

The changes are minimal and follow the exact same pattern as the existing 204 handling, ensuring consistency and maintainability.

Fixes #1848.

Warning

Firewall rules blocked me from connecting to one or more addresses

I tried to connect to the following addresses, but was blocked by firewall rules:

  • graph.microsoft.com
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java -Dorg.gradle.internal.worker.tmpdir=/home/REDACTED/work/kiota-java/kiota-java/components/http/okHttp/build/tmp/test/work -javaagent:/home/REDACTED/work/kiota-java/kiota-java/components/http/okHttp/build/tmp/.cache/expanded/zip_ff7bf8f04f99dc306508d1c81e47a68b/jacocoagent.jar=destfile=build/jacoco/test.exec,append=true,inclnolocationclasses=false,dumponexit=true,output=file,jmx=false @/home/REDACTED/.gradle/.tmp/gradle-worker-classpath18252088451007800667txt -Xmx512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -ea worker.org.gradle.process.internal.worker.GradleWorkerMain 'Gradle Test Executor 4' (dns block)
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java -Dorg.gradle.internal.worker.tmpdir=/home/REDACTED/work/kiota-java/kiota-java/components/http/okHttp/build/tmp/test/work -javaagent:/home/REDACTED/work/kiota-java/kiota-java/components/http/okHttp/build/tmp/.cache/expanded/zip_ff7bf8f04f99dc306508d1c81e47a68b/jacocoagent.jar=destfile=build/jacoco/test.exec,append=true,inclnolocationclasses=false,dumponexit=true,output=file,jmx=false @/home/REDACTED/.gradle/.tmp/gradle-worker-classpath7775169814115159399txt -Xmx512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -ea worker.org.gradle.process.internal.worker.GradleWorkerMain 'Gradle Test Executor 1' (dns block)
  • www.google.com
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java -Dorg.gradle.internal.worker.tmpdir=/home/REDACTED/work/kiota-java/kiota-java/components/http/okHttp/build/tmp/test/work -javaagent:/home/REDACTED/work/kiota-java/kiota-java/components/http/okHttp/build/tmp/.cache/expanded/zip_ff7bf8f04f99dc306508d1c81e47a68b/jacocoagent.jar=destfile=build/jacoco/test.exec,append=true,inclnolocationclasses=false,dumponexit=true,output=file,jmx=false @/home/REDACTED/.gradle/.tmp/gradle-worker-classpath18252088451007800667txt -Xmx512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -ea worker.org.gradle.process.internal.worker.GradleWorkerMain 'Gradle Test Executor 4' (dns block)
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java -Dorg.gradle.internal.worker.tmpdir=/home/REDACTED/work/kiota-java/kiota-java/components/http/okHttp/build/tmp/test/work -javaagent:/home/REDACTED/work/kiota-java/kiota-java/components/http/okHttp/build/tmp/.cache/expanded/zip_ff7bf8f04f99dc306508d1c81e47a68b/jacocoagent.jar=destfile=build/jacoco/test.exec,append=true,inclnolocationclasses=false,dumponexit=true,output=file,jmx=false @/home/REDACTED/.gradle/.tmp/gradle-worker-classpath7775169814115159399txt -Xmx512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -ea worker.org.gradle.process.internal.worker.GradleWorkerMain 'Gradle Test Executor 1' (dns block)

If you need me to access, download, or install something from one of these locations, you can either:


💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click here to start the survey.

Co-authored-by: baywet <7905502+baywet@users.noreply.github.com>
Copilot AI changed the title [WIP] ensure 304 response code does not throw Ensure 304 response code does not throw exceptions Jul 2, 2025
Copilot finished work on behalf of baywet July 2, 2025 13:20
Copilot AI requested a review from baywet July 2, 2025 13:20
@github-project-automation github-project-automation bot moved this to In Progress 🚧 in Kiota Jul 2, 2025
Co-authored-by: baywet <7905502+baywet@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Jul 2, 2025

Just as a heads up, I was blocked by some firewall rules while working on your feedback. Expand below for details.

Warning

Firewall rules blocked me from connecting to one or more addresses

I tried to connect to the following addresses, but was blocked by firewall rules:

  • graph.microsoft.com
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java -Dorg.gradle.internal.worker.tmpdir=/home/REDACTED/work/kiota-java/kiota-java/components/http/okHttp/build/tmp/test/work -javaagent:/home/REDACTED/work/kiota-java/kiota-java/components/http/okHttp/build/tmp/.cache/expanded/zip_ff7bf8f04f99dc306508d1c81e47a68b/jacocoagent.jar=destfile=build/jacoco/test.exec,append=true,inclnolocationclasses=false,dumponexit=true,output=file,jmx=false @/home/REDACTED/.gradle/.tmp/gradle-worker-classpath6263530406976102149txt -Xmx512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -ea worker.org.gradle.process.internal.worker.GradleWorkerMain &#39;Gradle Test Executor 1&#39; (dns block)
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java -Dorg.gradle.internal.worker.tmpdir=/home/REDACTED/work/kiota-java/kiota-java/components/http/okHttp/build/tmp/test/work -javaagent:/home/REDACTED/work/kiota-java/kiota-java/components/http/okHttp/build/tmp/.cache/expanded/zip_ff7bf8f04f99dc306508d1c81e47a68b/jacocoagent.jar=destfile=build/jacoco/test.exec,append=true,inclnolocationclasses=false,dumponexit=true,output=file,jmx=false @/home/REDACTED/.gradle/.tmp/gradle-worker-classpath7185381649245087998txt -Xmx512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -ea worker.org.gradle.process.internal.worker.GradleWorkerMain &#39;Gradle Test Executor 2&#39; (dns block)
  • www.google.com
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java -Dorg.gradle.internal.worker.tmpdir=/home/REDACTED/work/kiota-java/kiota-java/components/http/okHttp/build/tmp/test/work -javaagent:/home/REDACTED/work/kiota-java/kiota-java/components/http/okHttp/build/tmp/.cache/expanded/zip_ff7bf8f04f99dc306508d1c81e47a68b/jacocoagent.jar=destfile=build/jacoco/test.exec,append=true,inclnolocationclasses=false,dumponexit=true,output=file,jmx=false @/home/REDACTED/.gradle/.tmp/gradle-worker-classpath6263530406976102149txt -Xmx512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -ea worker.org.gradle.process.internal.worker.GradleWorkerMain &#39;Gradle Test Executor 1&#39; (dns block)
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java -Dorg.gradle.internal.worker.tmpdir=/home/REDACTED/work/kiota-java/kiota-java/components/http/okHttp/build/tmp/test/work -javaagent:/home/REDACTED/work/kiota-java/kiota-java/components/http/okHttp/build/tmp/.cache/expanded/zip_ff7bf8f04f99dc306508d1c81e47a68b/jacocoagent.jar=destfile=build/jacoco/test.exec,append=true,inclnolocationclasses=false,dumponexit=true,output=file,jmx=false @/home/REDACTED/.gradle/.tmp/gradle-worker-classpath7185381649245087998txt -Xmx512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -ea worker.org.gradle.process.internal.worker.GradleWorkerMain &#39;Gradle Test Executor 2&#39; (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot AI requested a review from baywet July 2, 2025 13:50
Copilot finished work on behalf of baywet July 2, 2025 13:50
@baywet baywet marked this pull request as ready for review July 2, 2025 13:56
@baywet baywet requested a review from a team as a code owner July 2, 2025 13:56
@baywet baywet enabled auto-merge July 2, 2025 13:56
@sonarqubecloud
Copy link

sonarqubecloud bot commented Jul 2, 2025

@baywet baywet merged commit 5a03f1a into main Jul 4, 2025
10 checks passed
@baywet baywet deleted the copilot/fix-1848 branch July 4, 2025 15:01
@github-project-automation github-project-automation bot moved this from In Progress 🚧 to Done ✔️ in Kiota Jul 4, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

ensure 304 response code does not throw

3 participants