hessian文件傳輸返回文件會報一個java.io.IOException: stream is closed ,搜索網絡這個是hessian的bug(http://bugs.caucho.com/view.php?id=3655),官網記錄顯示在4.0.63版本已修復此問題,但是maven庫中並沒有此版本,還好這個帖子https://blog.csdn.net/whk010/article/details/52758131#commentsedit提供了修改源碼的解決方法。
我的具體操作時創建一個maven項目,從maven庫中複製一個較新版本的hessian的源碼的jar包,將源碼解壓到項目路徑中,調整好,mvn install生成jar包,替換本地maven庫中項目中使用版本的jar包。
源碼位置:
修改項目的pom,寫一個沒有的版本
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
<version>4.0.63</version>
<name>hessian</name>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
修改源碼中存在bug的地方:com.caucho.hessian.client.HessianProxy :
在 Object value = in.readReply(method.getReturnType()); 這一句話之後加上下面代碼
if (value instanceof InputStream) {
value = new ResultInputStream(conn, is, in, (InputStream) value);
is = null;
conn = null;
}
最後進行mvn install,到D:\Dev\repo\com\caucho\hessian\4.0.63下複製到../4.0.38下刪除原有的hessian-4.0.38.jar,將hessian-4.0.63.jar改名爲hessian-4.0.38.jar,就可以了
gitee測試項目:https://gitee.com/fxqy/boot-dubbo-demo