在一周前,項目組碰到一個大問題:NTKO Office Activex控件在上傳文件及提交頁面信息時,其提交的頁面元素輸入中文值變成了無法識別的、也不屬于已知編碼中的任何一種編碼格式的亂碼;但在NTKO Office Activex控件包裝項目組提供的的測試項目中,此問題并未出現,因此判斷是項目兼容性所導致。
在項目組功能開發員和控件包裝組成員進行近一周的努力后,也未解決此問題。最后,此問題交由我來做最后分析和處理。
經過三天時間對問題項目的分拆、組裝、分析、測試后,終于找到問題所出,現將此過程進行記錄,以備參考:
1)以控件包裝組測試項目為基準,建立項目級測試項目,并保證在此測試項目中不存在兼容性問題;
2)檢測web.xml:將問題項目的web.xml代替測試項目中的web.xml,未出現兼容性問題,從而排除因web.xml的差異而導致的兼容性;
3)測試問題項目中的項目依賴:將問題項目的項目依賴關系復制至測試項目中,發現兼容性問題未出現,從而排除項目依賴導致的兼容性;
4)檢測支持包:將問題項目中的支持包(各jar)代替測試項目中的支持包,未出現兼容性問題,從而排除因支持包的差異導致的兼容性,也就排除了各servers,servlet,listener等導致的兼容性問題;
5)檢測js支撐:將問題項目中的所有相關js文件取出,代替測試項目中的相關js文件,未出現兼容性問題,從而排除因js支持文件的差異導致的兼容性;
6)檢測css支撐:將問題項目中的所有相關css文件取出,代替測試項目中的相關js文件,未出現兼容性問題,從而排除因css支持文件的差異導致的兼容性;
7)檢測tld,xml文件:將問題項目中的tld,xml文件取出,代替測試項目中的tld,xml文件,未出現兼容性問題,從而排除因tld,xml的差異導致的兼容性;
8)至此,正常解決的兼容性措施都已用完,還是未找到問題所出!如何辦?
9)開始使用非正常手段進行排查:
<1>對比檢查.project和.classes未發現異常,從而排除基本項目配置導致的兼容性;
<2>將問題項目的web項目設置文件(.settings)代替測試項目的web項目設置文件(.settings),問題出現了!繼續排隊分析,發現問題出現在文件org.eclipse.wst.common.component中,
問題項目的設置為:
<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="XXX_IC">
<wb-resource deploy-path="/" source-path="/web"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/test"/>
<property name="java-output-path" value="build/classes"/>
<property name="context-root" value="XXX_IC"/>
</wb-module>
</project-modules>
測試項目設置為:
<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="test">
<wb-resource deploy-path="/" source-path="/web"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/test"/>
<property name="java-output-path" value="build/classes"/>
<property name="context-root" value="test"/>
</wb-module>
</project-modules>
且無論如何修改"XXX_IC",都會導致兼容性出現,最后沒辦法,將下劃線"_"去掉,奇跡出現了。
原來NTKO Office Activex控件在提交數據時,是通過scoket模擬Http進行文件和頁面元素的提供,如提交的頁URL完整路徑中包含了"_"等字符時,將導致無法識別,從而導致兼容性的產生。