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