项目

一般

简介

部署应用后,浏览器开发者模式 出现 ERR_CONTENT_LENGTH_MISMATCH 获取资源异常

陈 泽豪将近 2 年 之前添加

版本:20221116

异常信息:出现 ERR_CONTENT_LENGTH_MISMATCH,后台无明显异常日志

问题分析:

首先确定应用是否使用了nginx,有的话可能是nginx导致的,可参考链接:https://www.pudn.com/news/63186d164d92104ef1b6a4ef.html

经过研发同事分析:应用程序在获取class目录时出现问题,应用方编写代码时,调用的方法getProtectionDomain()是参考tomcat定义的,
而aas中间件参考的是glassfish的getProtectionDomain()方法,二者在获取class路径时 的值不一样

--------------------------------------------------------------------------------------------------------------------------------------------
在获取class文件目录 的时候
客户代码:
String classPath = SpringbootApplication.class.getProtectionDomain().getCodeSource().getLocation().getPath();

按正常的逻辑获取到的是
SpringbootApplication.class的类文件的根目录 如:D:\ApusicAS\aas\domains\mydomain\applications\ROOT\WEB-INF\classes\cn\restcloud\springboot\SpringbootApplication.class

应该获取返回的是(tomcat返回的,返回的是类目录
D:\ApusicAS\aas\domains\mydomain\applications\ROOT\WEB-INF\classes

但aas返回的是(参考glassfish返回的,返回的是class文件
D:\ApusicAS\aas\domains\mydomain\applications\ROOT\WEB-INF\classes\cn\restcloud\springboot\SpringbootApplication.class
--------------------------------------------------------------------------------------------------------------------------------------------

总结:主要是我们对getProtectionDomain()这个方法的定义是和glassfish一样的,和tomcat调用有点不一致,导致获取的路径不一致

处理方案:

1.将ApusicAS\aas\modules下的aas-war-util.jar先备份一下

2.将附件中补丁所有相关的WebappClassLoader类 替换到aas-war-util.jar的相关类

3.重启中间件,并且重新部署应用