揉雜在一起的問題


近期遇到的問題。簡要記之,謹作備忘。


關鍵詞:Delphi7、Eclipse/MyEclipse、AXIS2、Web Service、ocx、XML、Base64、多頁Tiff、ImageEn等

 

一、Web服務器配置AXIS2服務

    到http://ws.apache.org/axis2/ 下載 axis2-1.4.1-war.zip。

    或在http://apache.justdn.org/ws/axis2/下載。

    解壓後可以得到axis2.war。

    把axis2.war以Web應用方式部署到Web服務器,訪問http://127.0.0.1:8888/axis2,如出現AXIS的歡迎頁面,則說明配置成功。

    當然axis2.war可以重新命名爲其他的xxxx.war。


二、AXIS2在Eclipse IDE中的配置

    需要下載Axis Eclipse plug-in,分別是AXIS2的代碼生成工具和打包工具:

    axis2-eclipse-codegen-wizard.zip

    axis2-eclipse-service-archiver-wizard.zip


    下載地址:http://apache.justdn.org/ws/axis2/tools/1_4_1/

    把下載的AXIS2的兩個plug-in解壓縮後放到Eclipse安裝目錄下的plug-in子目錄。


    Eclipse啓動後便可在“File->New->Other”中看到這些Wizards工具。


    AXIS2在Eclipse中開發Web Service的過程如下:

    1. 新建Project

    2. 新建Web Service的WSDL文件。

    3. 使用Axis2 Code Generator嚮導,分兩次從WSDL建立Web Service的Server端和Client端。

    4. 使用Axis2 Services Archive嚮導,把Web Service服務端打包成aar。

    5. 發佈aar,把aar文件Copy到Axis2應用的/WEB-INF/services/目錄下面。

       訪問對應的web應用可以得到該Web Service的WSDL文檔。


三、AXIS2在MyEclipse6.5報錯的問題
   
    Axis2 Code Generator嚮導生成代碼後,在Finish 時會產生Exception:

 An error ocurred while completing process
 -java.lang.reflect.InvocationTargetException

    問題在於 Code Generator plugin 內缺少了兩個包:

     backport-util-concurrent-3.1.jar 包
     geronimo-stax-api_1.0_spec-1.0.1.jar 包

    解決方法:

    1. 關閉 Eclipse

    2. copy  %AXIS2_HOME%/lib/下的backport-util-concurrent-3.1.jar 和 backport-util-concurrent-3.1.jar

       粘貼到 MyEclipse 6.5/eclipse/plugins/Axis2_Codegen_Wizard_1.3.0/lib 文件夾下。

    3. 註冊此jar 包:

       編輯MyEclipse 6.5/eclipse/plugins/Axis2_Codegen_Wizard_1.3.0/plugin.xml文件。

 在 <runtime>內加入如下內容:

 <library name="lib/geronimo-stax-api_1.0_spec-1.0.1.jar">
      <export name="*"/>
 </library>
 <library name="lib/backport-util-concurrent-3.1.jar">
      <export name="*"/>
 </library>

    4. 保存plugin.xml文件,重新啓動Eclipse即可。
    

四、Delphi7客戶端調用AXIS2服務的問題

    因爲Delphi7發佈的時候,AXIS2還沒有出生,Delphi7不兼容AXIS2的WSDL文檔。

    在默認情況下,D7導入AXIS2的WSDL後,生成的pas文件中沒有對應的Web Service接口方法。

    所以默認情況下無法使用D7編寫的客戶端調用AXIS2的Web Service服務。

    爲此,花費不少時間研究,幾經磨難才搞定。 ^_^


五、Delphi7+AXIS2 Web Service服務傳送文件

    這個問題不大。主要還是BASE64的應用。其核心跟D7調用JBuilder9/10帶的AXIS一樣。

    只是多了request和response這樣請求和返回的參數,更具BS程序特性。


六、多頁tif文件的處理

    多頁tif的拆分和合成,其處理速度是最頭疼事情。

    JAVA處理多頁tif:JAI組件。可以把多頁tif拆分成jpeg,然後再合併成多頁tif,這樣處理速度會稍好一些。

    Delphi7處理多頁tif:ImageEn控件,功能強大。


七、使用JDOM生成格式化XML文件

    用dom4j生成的XML文件不易做換行縮進等美化格式的操作。

    使用jdom可以輕鬆搞定一個換行縮進格式美化且易讀且良構的XML文件。

    主要語句參考:

     Element root = new Element("aRoot");
     Document document = new Document(root);
     ......
     try{
         Format format = Format.getCompactFormat();
         format.setEncoding("UTF-8"); //設置文件編碼格式UTF-8
         format.setIndent("    ");   //設置縮進
         XMLOutputter XMLOut = new XMLOutputter(format);
         XMLOut.output(document, new FileOutputStream(saveFilePath));
     } catch (Exception e) {
         e.printStackTrace();
     }


八、Delphi7生成發佈ocx的問題

    D7中新建Active Form,在Type Library中對接口新增一個Property屬性,生成對應的set和get方法。

    html頁面嵌入ActiveX後可以向ocx傳遞參數。

    主要在ActiveForm的set方法中得到傳入的參數。

    ocx對象實例化時,其參數的執行順序和建立順序一致。使用前記得先註冊ocx。

    另外,發佈ocx時,Project--Web Deploy等按鈕可能是灰色。可能D7是D版或Bug。

    針對這個問題,具體的做法是再New一個Active Form,然後關掉這個新的Active Form,這時候就可以使用Web Deploy了。


九、D7中ImageEn控件版本衝突問題

    如下4個bpl可能會與其他控件的bpl衝突:

    PKIECtrl7.bpl、PKIEDB7.bpl、DPKIECTRL7.bpl、DPKIEDB7.bpl

    可把這些bpl放置到/WINDOWS/system32/目錄下。

 

 

十、在IE7中刷新驗證碼圖片

    點擊驗證碼圖片域時,把其中的驗證碼圖片刷新一下。在IE6下沒有問題。

    因圖片指向引用地址未變,IE7瀏覽器未能自動刷新圖片。

    如下,在地址中增加一個Math取得隨機數的方法,即可解決IE7中刷新驗證碼圖片的問題。
 
   <script>
     function reflush()
     {
         document.getElementById('ValidateImg').src="/servlet/ValidateNum?"+Math.random();
     }
    </script>

 


十一、Ext.Panel.load()的回調callback()方法

aPanel.load({url: 'test.jsp',
 scripts: true,
 nocache: true,
 discardUrl: false,
 timeout: 600000,  //10min
 callback:function(el, success, response) {
          if (!success ) {
            var obj = Ext.util.JSON.decode(response.responseText);
           alert(obj.msg);
          }
         }
 });

當response返回FAILED時,回調觸發執行:

response.setStatus(HttpServletResponse.SC_EXPECTATION_FAILED);//設置失敗


十二、動態設置Ext.form.TextField的emptyText屬性

aField.setRawValue('請輸入查詢條件');
aField.emptyText = '請輸入查詢條件';
aField.applyEmptyText();

 

十三、mms協議的端口

使用Windows Media Service發佈點播服務,對外映射外網IP時,需開放防火牆的554、1755端口和對應的路由器的映射端口。  


十四、Web應用絕對路徑

//如果Web應用的絕對路徑中包含中文或空格,則需要處理一下
String realPath = (Thread.currentThread().getContextClassLoader().getResource("")).getPath();
try {
 realPath = URLDecoder.decode(realPath,"UTF-8");
} catch (UnsupportedEncodingException e) {
 System.out.println(this.getClass().getName()+" throw Exception: "+e.toString());
}
realPath = realPath.substring(1,realPath.length());


十五、連接SQLServer2005的問題

一直用的SQLServer2000,更換到SQLServer2005時,後臺報錯:

------------

[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]傳入的表格格式數據流(TDS)遠程過程調用(RPC)協議流不正確。

------------

上網搜到原因,連接SQLServer2005需替換微軟新的數據庫驅動程序。

於是下載了sqljdbc.jar。一試果然好使,同時也支持SQLServer2000。

以後可以不用那3個jar驅動了。


數據庫驅動名稱和數據庫鏈接寫法舉例:
 
SQLServer 2000數據庫驅動的寫法:

   driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
   url="jdbc:microsoft:sqlserver://192.168.100.100:1433;dataBaseName=testdb"

 
SQLServer 2005數據庫驅動的寫法:

   driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
   url="jdbc:sqlserver://192.168.100.100:1433;DatabaseName=testdb"

注意兩者的差異。

 

 

                                                                      By JRQ
                                                               2009/06/12 於南昌

 

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