1. 程式人生 > >java呼叫python的webservice

java呼叫python的webservice

這次出差,我接觸最多的是spss,由於專案基於j2ee開發,而java又不能直接取得spss統計結果,好在spss對python的支援還行,最終成功實現了這個模組。感謝前輩們做出的貢獻,沒有你們,我就不能這樣迅速、順利的完成專案,且別說寫這篇文章了。
在前期準備中,我摸索、嘗試了三種實現:jython,http,soap,在網上查了很多相關資料,都是隻言片語,自己看了還要結合其他的資料才能弄個明白。當然,在這探索的過程中,我是幸運的,每天都讓我充滿驚喜,每天都有新的收穫。
jython是java版本的python,也就是java的完全實現。java程式碼中,可以呼叫python的方法,缺點是,jython中匯入第三方python module時,不是那麼回事。因為spss的python api主要是一個.pyd的二進位制檔案,jython導包是按照java的位元組碼來匯入的,所以當在jython中匯入spss的python api時會出錯,這個想法徹底破滅。
http實現是在現有的B/S互動實現上突發奇想的,python中實現一個簡單的web server只要幾十行程式碼,java使用apache的httpclient訪問,現在想來確實有點大材小用,自己寫一個http socket來請求和響應也寫不了多少程式碼。最後還是實現了,支援spss中文,但是資料封包都要自己來實現,還是有嫌麻煩。
soap實現最簡單,server端幾十行程式碼搞定。由於我把spss命令都封裝到一個方法中執行了,所以就沒有用wsdl來生成java程式碼了,我使用了較底層的java的http socket,手動對SOAP-ENV打包,並向server端請求,手動解析響應資料。缺點是:SOAP對中文的支援,無論怎麼轉碼,不是python解析SOAP-ENV報錯,就是python執行spss命令報錯。
如果你有更好的方法或你解決了我說的問題,請聯絡我,謝謝。