解決springBoot+dubbo+hessian搭建服務間文件傳輸文件返回的bug

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章