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());