<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    邀月

    從.net中走來的Java愛好者
    posts - 22, comments - 10, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    Java與WCF交互(一):Java客戶端調用WCF服務

    Posted on 2010-08-24 15:21 邀月 閱讀(11418) 評論(2)  編輯  收藏 所屬分類: Eclipse

    最近開始了解WCF,寫了個最簡單的Helloworld,想通過java客戶端實現通信。沒想到以我的基礎,居然花了整整兩天(當然是工作以外的時間,呵呵),整個過程大費周折,特寫下此文,以供有需要的朋友參考:

    第一步:生成WCF服務

    新建WCF解決方案,分別添加三個項目,HelloTimeService(類庫),HelloTimehost(控制臺程序),HelloTimeClient(控制臺程序),項目結構如圖:
    邀月工作室
    各個項目的主要代碼:
    service:
    邀月工作室

    Host:
    邀月工作室

    Client:
    邀月工作室

    編譯通過后,測試Host和Client分別成功:
    邀月工作室

    邀月工作室

    保持Host程序打開,這樣,WCF服務就一直可以被外部程序調用。當然也包括Java客戶端。

    我們看看生成的WSDL

    邀月工作室

    邀月工作室

    第二步:調用WCF生成的WSDL生成java客戶端。

    首先,請允許我介紹下axis2,它的官方地址:http://ws.apache.org/axis2/

    這是一個java平臺的web service解決方案。我們最常用的是WSDL2Java和Java2WSDL兩個功能。

    關于Web service的另一個解決方案是xFire,我沒試過。

    關于命令行執行WSDL2Java,我也沒有執行成功! 我這里介紹的是Code Generator Wizard - eclipse Plug-in,一個Eclipse的插件。而且是在參考了眾多解決方案才配置成功!

    特別感謝yycxbjl的這篇文章:http://www.cnblogs.com/yycxbjl/archive/2010/06/14/1758063.html

    我的Java整個配置環境:

    1.安裝JDK并配置環境變量

     JAVA_HOME=D:\2000\Java\JDKUpdate(注意,不帶版本號是為了以后升級時只復制文件,而不必修改環境變量。)
    path=%JAVA_HOME%\bin;
    classpath=.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar


    2.下載并安裝Eclipse3.6,就是大家熟悉的太陽神Helios(解壓即可)
      解壓到:D:\2000\Java\Eclipse


    3.下載Tomcat6.0.29(本文中使用的是綠色版,故解壓即完成)
      解壓到:D:\2000\Java\tomcat(注意,不帶版本號是為了以后升級時只復制文件,而不必修改環境變量。)
      由于安裝的是tomcat6.0不用配置tomcat的環境變量,至于以前的版本可以查資料。
      需要設置TOMCAT_HOME,CATAlINA等環境變量


    4.從   http://ws.apache.org/axis2/download/1_4_1/download.cgi下載 axis2-1.4.1-bin.zip
    解壓到:D:\2000\Java\Axis2,注意不要下載Axis2 1.5.1,原因yycxbjl說: “最新版的 1.5.0 與 1.5.1 中沒有 backport-util-concurrent-3.1.jar, 無法解決:使用axis2-eclipse-codegen-wizard插件,從wsdl文件生成java文件時出錯無法繼續的問題,故不使用。)


    5.下載1.4.1版的 axis2-eclipse-codegen-wizard 與 axis2-eclipse-service-archiver-wizard

    http://ws.apache.org/axis2/tools/1_0/eclipse/wsdl2java-plugin.html#operation1

    (但解壓后里面顯示是1.3.0, 解壓到:D:\2000\java\Eclipse\dropins  (連壓縮包中的根目錄一起解壓出來)。也可以用傳統的link方法部署。

    復制  D:\2000\Java\Axis2\lib\backport-util-concurrent-3.1.jar 與 geronimo-stax-api_1.0_spec-1.0.1.jar
    到:D:\2000\JAVA\Eclipse\dropins\Axis2_Codegen_Wizard_1.3.0\lib,  并編輯:D:\2000\Java\Eclipse\dropins\Axis2_Codegen_Wizard_1.3.0\plugin.xml
    在 runtime 下 添加
          <library name="lib/backport-util-concurrent-3.1.jar">
             <export name="*"/>
          </library>
          <library name="lib/geronimo-stax-api_1.0_spec-1.0.1">
             <export name="*"/>
          </library>

    將Axis2_Codegen_Wizard_1.3.0重命名為Axis2_Codegen_Wizard_1.4.1,(這是整個部署的關鍵!這里邀月折騰了整整一天!)


     

    新建一個Java project,命名為GetWCFInfoByJavaClient,并在新項目中添加新向導,File-New

    此時,我們可以看到期待已久的wizard界面:
    邀月工作室

    邀月工作室

    邀月工作室

    邀月工作室

    邀月工作室

    邀月工作室

    此進,在新建的 GetWCFInfoByJavaClient 項目中建一個package,命名為org.tempuri,與前面自定義的命名空間一致。將生成的兩個類文 件,ServiceCallbackHandler.java和ServiceStub.java文件添加進來,并在jreSE1.6庫中添加 d:\2000\Java\Axis2\lib下所有jar文件的引用。

    注意此時有個特殊的文件,即Axis2_Codegen_Wizard_1.4.1\lib\axis2-1.4.1.jar,需要手動復制到d:\2000\java\axis2\lib下并添加到項目的jre庫中,這是邀月第二個卡殼的地方,琢磨了好久,慎之慎之。

    項目的結構應該如下圖:
    邀月工作室
     

    eclipse的命名空間提示就是比vs強啊!很喜歡Ctrl+1。呵呵。微軟要是能做到這點,那該多好啊!

    要命的是,此時庫都添加完成,檢查代碼也無誤,居然編譯錯誤,提示:

    Access restriction: The type AxisFault is not accessible due to restriction on required library D:\2000\Java\Axis2\lib\axis2-kernel-1.4.1.jar


     

    邀月工作室

    這下我傻眼了,于是趕緊google,這兩天google.com老是無故罷工,真是禍不單行,終于找到一篇老外的文章,說是如下,即可解決:
        * Go to the Build Path settings in the project properties. Windows -> Preferences -> Java Compiler
        * Remove the JRE System Library
        * Add another JRE with a "perfect match"
        * clean and build your project again. It worked for me.

    試了下,我的默認jre環境果然是JDK5,于是換為jre system library

    邀月工作室


    邀月工作室

    邀月工作室

    終于編譯成功!看到曙光了,

    邀月工作室

    此時,最后的工作就是在Main中調用stub得到我們想要的服務結果了,簡單方法,將剛才生成的測試類的方法略作修改,即可運行。如下:
    邀月工作室

    這正是我們想要的結果。


    關于java與.net交互的其他文章,請參考:

    微軟示例:

    Java/.NET Interoperability with the Microsoft.com Web Service
    http://msdn.microsoft.com/en-us/library/ms953968.aspx

    Interoperability Testing

    http://msdn.microsoft.com/en-us/library/aa480510.aspx

    IBM示例:使用 Eclipse 和 Java SE 6 創建獨立 Web Services 應用程序,第 1 部分: Web Services 服務端應用程序(該鏈接需要先注冊)

    https://www6.software.ibm.com/developerworks/cn/education/webservices/ws-eclipse-javase1/section2.html


    小結:這雖然只是一個簡單的demo,但我問了許多人,并在論壇發問,可是由于使用環境的不同,最終沒找到類似的環境,只好自己摸索實踐,好在還有一點點java基礎,另外網上幾個論壇像javaeye提供的答案過于陳舊,這正是java初學者苦惱之處,這點來看,微軟的開發環境無論如何是值得稱贊的,至少它不用跑到別的地盤去問答案。eclipse\tomcat\axis等代表的服務器和開發環境、插件配置非常的讓初學者無奈!因為你不知道某個jar是否與其他幾千個jar很好的兼容。不知道java高手們是否指一條明道,非常感謝!并再次感謝yycxb

    下篇文章介紹WCF客戶端如何調用java的web service,那要簡單多了。敬請關注。

     

    Java與WCF交互(二):WCF客戶端調用Java web service

    Java與WCF交互(一)補充:用WSImport生成WSDL的Java客戶端代碼




    邀月注:本文版權由邀月和博客園(BlogJava)共同所有,轉載請注明出處。
    助人等于自助!   3w@live.cn

    評論

    # re: Java與WCF交互(一):Java客戶端調用WCF服務  回復  更多評論   

    2010-08-24 16:02 by 忘憂結
    博主用的截圖軟件很不錯啊,能透露下軟件名字嗎?

    # re: Java與WCF交互(一):Java客戶端調用WCF服務  回復  更多評論   

    2010-08-24 16:13 by 邀月
    @忘憂結
    呵呵。snagit
    主站蜘蛛池模板: 亚洲AV无码专区亚洲AV伊甸园| 久久久久久亚洲精品影院| 最近中文字幕mv免费高清视频8| 亚洲人成网站18禁止久久影院 | 国产天堂亚洲国产碰碰| 亚洲日韩中文无码久久| 亚洲成人免费网址| 美女视频黄a视频全免费网站一区 美女视频黄a视频全免费网站色 | 日本免费网站视频www区| 亚洲AV综合色区无码一二三区| 久久激情亚洲精品无码?V| h片在线免费观看| kk4kk免费视频毛片| 亚洲卡一卡二卡乱码新区| 亚洲中文字幕日产乱码高清app| 亚洲一区二区免费视频| 一级做a爱过程免费视| 亚洲ts人妖网站| 亚洲国产精品一区二区久久hs | 免费a在线观看播放| 久久99国产乱子伦精品免费 | 免费看国产成年无码AV片| 有色视频在线观看免费高清在线直播 | 亚洲免费在线播放| 国产美女无遮挡免费视频网站| 国产好大好硬好爽免费不卡| 国产亚洲精品成人久久网站| 亚洲美女色在线欧洲美女| 国产偷窥女洗浴在线观看亚洲 | 日韩精品视频免费观看| 最近2019年免费中文字幕高清| 日本永久免费a∨在线视频 | 午夜免费国产体验区免费的| 国产成人精品亚洲2020| 亚洲国产精品久久久天堂| 午夜亚洲av永久无码精品| 天天摸夜夜摸成人免费视频| 最近高清中文字幕免费| 国色精品va在线观看免费视频| 亚洲国产成人久久精品大牛影视| 亚洲精品综合久久中文字幕|