This is an automated email from the ASF dual-hosted git repository.

oxsean pushed a commit to branch 3.3
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.3 by this push:
     new 74218a4561 Fix #14772 (#14811)
74218a4561 is described below

commit 74218a45618effb2bda9b42a1093a458de6744b1
Author: Sean Yang <[email protected]>
AuthorDate: Tue Oct 22 19:13:41 2024 +0800

    Fix #14772 (#14811)
---
 .../dubbo-demo-spring-boot-servlet/pom.xml                       | 5 +++++
 .../dubbo/remoting/http12/message/DefaultHttpResponse.java       | 4 ++--
 .../apache/dubbo/remoting/http12/message/DefaultHttpResult.java  | 2 +-
 .../dubbo/rpc/protocol/tri/h12/HttpContextCallbackFilter.java    | 9 ++++-----
 4 files changed, 12 insertions(+), 8 deletions(-)

diff --git 
a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-servlet/pom.xml 
b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-servlet/pom.xml
index afbf669558..7c893bf7fb 100644
--- a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-servlet/pom.xml
+++ b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-servlet/pom.xml
@@ -57,6 +57,11 @@
       <artifactId>dubbo-serialization-hessian2</artifactId>
       <version>${project.version}</version>
     </dependency>
+    <dependency>
+      <groupId>org.apache.dubbo</groupId>
+      <artifactId>dubbo-remoting-netty4</artifactId>
+      <version>${project.version}</version>
+    </dependency>
     <dependency>
       <groupId>org.apache.dubbo</groupId>
       <artifactId>dubbo-config-spring</artifactId>
diff --git 
a/dubbo-remoting/dubbo-remoting-http12/src/main/java/org/apache/dubbo/remoting/http12/message/DefaultHttpResponse.java
 
b/dubbo-remoting/dubbo-remoting-http12/src/main/java/org/apache/dubbo/remoting/http12/message/DefaultHttpResponse.java
index e5926f8fa0..9becb189d3 100644
--- 
a/dubbo-remoting/dubbo-remoting-http12/src/main/java/org/apache/dubbo/remoting/http12/message/DefaultHttpResponse.java
+++ 
b/dubbo-remoting/dubbo-remoting-http12/src/main/java/org/apache/dubbo/remoting/http12/message/DefaultHttpResponse.java
@@ -266,8 +266,8 @@ public class DefaultHttpResponse implements HttpResponse {
         if (body != null) {
             return false;
         }
-        if (outputStream != null && outputStream instanceof 
ByteArrayOutputStream) {
-            return ((ByteArrayOutputStream) outputStream).size() == 0;
+        if (outputStream != null) {
+            return outputStream instanceof ByteArrayOutputStream && 
((ByteArrayOutputStream) outputStream).size() == 0;
         }
         return true;
     }
diff --git 
a/dubbo-remoting/dubbo-remoting-http12/src/main/java/org/apache/dubbo/remoting/http12/message/DefaultHttpResult.java
 
b/dubbo-remoting/dubbo-remoting-http12/src/main/java/org/apache/dubbo/remoting/http12/message/DefaultHttpResult.java
index c7f3ab8df2..1a70259b73 100644
--- 
a/dubbo-remoting/dubbo-remoting-http12/src/main/java/org/apache/dubbo/remoting/http12/message/DefaultHttpResult.java
+++ 
b/dubbo-remoting/dubbo-remoting-http12/src/main/java/org/apache/dubbo/remoting/http12/message/DefaultHttpResult.java
@@ -123,7 +123,7 @@ public class DefaultHttpResult<T> implements HttpResult<T> {
             }
             Map<String, List<String>> hrs = this.headers;
             if (hrs == null) {
-                hrs = new LinkedHashMap<>(headers.size());
+                this.headers = hrs = new LinkedHashMap<>(headers.size());
             }
             for (Entry<CharSequence, String> entry : headers) {
                 CharSequence key = entry.getKey();
diff --git 
a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/HttpContextCallbackFilter.java
 
b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/HttpContextCallbackFilter.java
index 1ae5603e5e..902da71c49 100644
--- 
a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/HttpContextCallbackFilter.java
+++ 
b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/HttpContextCallbackFilter.java
@@ -58,13 +58,12 @@ public class HttpContextCallbackFilter implements Filter, 
BaseFilter.Listener {
         if (response.isEmpty()) {
             return;
         }
-        if (response.isContentEmpty()) {
-            if (appResponse.hasException()) {
-                return;
+        if (!response.isCommitted()) {
+            if (response.isContentEmpty()) {
+                response.setBody(appResponse.hasException() ? 
appResponse.getException() : appResponse.getValue());
             }
-            response.setBody(appResponse.getValue());
+            response.commit();
         }
-        response.commit();
         HttpResult<Object> result = response.toHttpResult();
         if (result.getBody() instanceof Throwable) {
             appResponse.setException((Throwable) result.getBody());

Reply via email to