JAVA—咖啡館

          ——?dú)g迎訪問rogerfan的博客,常來《JAVA——咖啡館》坐坐,喝杯濃香的咖啡,彼此探討一下JAVA技術(shù),交流工作經(jīng)驗(yàn),分享JAVA帶來的快樂!本網(wǎng)站部分轉(zhuǎn)載文章,如果有版權(quán)問題請與我聯(lián)系。

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            447 Posts :: 145 Stories :: 368 Comments :: 0 Trackbacks
          最近項(xiàng)目中需要用到CXF,但是本人使用的MyEclipse Blue Edition 6.1居然沒有集成CXF的支持。因此抽時間研究了下將Eclipse SOA Tools Platform插件集成到其中。

                MyEclipse Blue Edition 6.1中使用的Eclipse Platform為3.3.2。因此本人下載了多個Eclipse 3.3.2版本的STP插件進(jìn)行測試。最后發(fā)現(xiàn)STP R200710161054版可以和MyEclipse Blue Edition 6.1版完美集成。

                此處可以下載STP R200710161054 all in one版

                具體安裝其實(shí)超簡單,將下載的ZIP包解壓到MyEclipse安裝目錄下的myeclipse目錄中。此處需要特別小心,注 意:eclipse,feature和plugins目錄可以覆蓋;但是feature和plugins中的同名目錄不能覆蓋。

                此外,由于STP插件中的文件的目錄和文件名比較長,解壓后可能會發(fā)生超過系統(tǒng)目錄文件長度的錯誤。解決方法是將MyEclipse安裝到磁盤根目錄下的 一個短名稱的目錄中,比如C:"Blue等。

                這次來講下如何利用該工具快速開發(fā)一個簡單的WebService。

                本文中使用的CXF為apache-cxf-2.0.5-incubator

          一、對STP插件進(jìn)行設(shè)置:

                啟動MyEclipse Blue Edition 6.1。選擇菜單Window->Preferences, 在對話框左側(cè)的SOA Tools分支下,可以進(jìn)行STP插件的設(shè)置。

                1. 添加CXF Runtime

                選中分支中的Installed Runtimes,點(diǎn)擊Add;

          添加CXF Runtime

                選擇Apache CXF 2.0,然后Next;

          Apache cxf 2.0

                瀏覽至apache-cxf-2.0.5-incubator的解壓目錄,點(diǎn)擊Finish。注意此處的JRE是插件運(yùn)行的JRE,最好選擇Sun的 JRE1.5(我選IBM JRE的時候插件出錯)。

          choose

                2. 其他設(shè)置

                選中JAX-WS,選擇使用向?qū)В?/p>

          wizard

                設(shè)定生成WSDL文件的Soap協(xié)議版本;

                點(diǎn)擊OK,完成插件的設(shè)置。

          二、開發(fā)WebService

                使用CXF開發(fā)WebService有兩種模式:從Java接口開始;從WSDL文件開始。

                這里介紹從Java接口開始開發(fā)(從WSDL文件開始開發(fā)的方法,看完本文自然可以領(lǐng)悟了。)

                1. 新建項(xiàng)目

                選擇菜單File->New->Project...,選 擇SOA Tools下的JAX-WS Java First Project;

                輸入項(xiàng)目名稱,JavaFirst;

                選擇Runtime;

                點(diǎn)擊Finish即可建立項(xiàng)目。

                新建的項(xiàng)目最好手動建一個lib目錄,然后將所有的cxf庫文件都拷貝進(jìn)來,然后刪除項(xiàng)目build path中由向?qū)砑拥膸欤约菏謩訉ib中的庫添加進(jìn)項(xiàng)目的build path中。此外,JRE最好也換一下。

                2. 創(chuàng)建包

                選擇菜單File->New->Package,創(chuàng)建一個叫com.javafirst.pk的包。

                3. 創(chuàng)建接口

                在剛剛創(chuàng)建的包下面,通過File->New->Interface,創(chuàng)建一個叫Hello的接口。

                接口中代碼如下:

          public interface Hello {
              
          public String echo(String msg);
          }

                 4. 添加WebService annotation

                在Package Explorer中,選中剛剛定義的接口,通過菜單SOA->JAX-WS->Create Web Service來添加;

                或者右鍵點(diǎn)擊接口,在右鍵菜單中的JAX-WS Tools->Create Web Service來添加。

                保留向?qū)У娜笔?shù),生成WebService Annotaion。

          添加annotation后的代碼如下:

          @WebService(targetNamespace="http://pk.javafirst.com/", name="Hello")
          public interface Hello {
              
          public String echo(String msg);
          }

                5. Save(此處需要預(yù)先選擇Project->Build Automaticly)之后,插件會自動生成wsdl文件和一堆垃圾src。

          此時,需要對wsdl文件進(jìn)行編輯。需要修改的地方有3處:

          a. 為了便于發(fā)布以及便于編程人員理解,下面代碼中的arg0可以修改為接口中定義的msg;注意,一旦修改,則不能 通過后面生成的Client來測試了 。

          <xs:complexType name="echo">
              
          <xs:sequence>
                  
          <xs:element minOccurs="0" name="arg0" type="xs:string" />
              
          </xs:sequence>
          </xs:complexType>
          <xs:complexType name="echo">
              
          <xs:sequence>
                  
          <xs:element minOccurs="0" name="msg" type="xs:string" />
              
          </xs:sequence>
          </xs:complexType>

          b. 為了兼容.net需要將parameters等替換。

          <wsdl:message name="echoResponse">
              
          <wsdl:part name="parameters" element="tns:echoResponse">
              
          </wsdl:part>
          </wsdl:message>
          <wsdl:message name="echo">
              
          <wsdl:part name="parameters" element="tns:echo"></wsdl:part>
          </wsdl:message>
          <wsdl:message name="echoResponse">
              
          <wsdl:part name="echoOutput" element="tns:echoResponse">
              
          </wsdl:part>
          </wsdl:message>
          <wsdl:message name="echo">
              
          <wsdl:part name="echoInput" element="tns:echo"></wsdl:part>
          </wsdl:message>

          c. wsdl發(fā)布的端口

          修改格式為 http://<服務(wù)器URL>:<服務(wù)器端口>/<項(xiàng)目名>

          <wsdl:service name="HelloService">
              
          <wsdl:port name="HelloPort" binding="tns:HelloServiceSoapBinding">
              
          <soap12:address location="http://localhost:9090/hello" />
              
          </wsdl:port>
          </wsdl:service>
          <wsdl:service name="HelloService">
              
          <wsdl:port name="HelloPort" binding="tns:HelloServiceSoapBinding">
                  
          <soap12:address location="http://localhost:8088/JavaFirst" />
              
          </wsdl:port>
          </wsdl:service>

                6. 刪除所有的垃圾src。

                7. 右鍵點(diǎn)擊wsdl文件,通過JAX-WS Tools->Generate Code生成新的接口和實(shí)現(xiàn)代碼。

          其中的Client和Server是用于脫離容器測試WebService的,一般都選上。

          最后生成的文件列表如圖所示:

                  8. 編輯HelloImpl.java文件

          簡單的返回輸入值:

          public class HelloImpl implements Hello {

              
          private static final Logger LOG = Logger.getLogger(HelloImpl.class.getName());

              
          /* (non-Javadoc)
               * @see com.javafirst.pk.Hello#echo(java.lang.String  msg )*
               
          */

              
          public java.lang.String echo(java.lang.String msg) 
                  LOG.info(
          "Executing operation echo");
                  System.out.println(msg);
                  
          try {
                      java.lang.String _return 
          = msg;
                      
          return _return;
                  }
           catch (Exception ex) {
                      ex.printStackTrace();
                      
          throw new RuntimeException(ex);
                  }

              }


          }

                9. 發(fā)布

                右鍵點(diǎn)擊wsdl文件,選擇菜單Build Package...即可生成war包。

                注意此war包中沒有包含任何的庫文件,因此需要手動打包(比如用winrar之類),將lib目錄添加到war包中的WEB-INF目錄下。

                將此war包發(fā)布到應(yīng)用服務(wù)器,即可。

                此時,發(fā)布的wsdl的端口是http://<server>:<port>/<context root>/services/<項(xiàng)目名>

                這里所謂context root在WAS中就是發(fā)布WAR包時的上下文根,在tomcat中默認(rèn)就是項(xiàng)目名。

                因此,可以將wsdl文件中的地址和端口做相應(yīng)的改動,注意修改了此處,如果用生成的Client來測試的話,Client中的相應(yīng)地址也要改為和此處一 致。

          <wsdl:service name="HelloService">
              
          <wsdl:port name="HelloPort" binding="tns:HelloServiceSoapBinding">
                  
          <soap12:address location="http://localhost:8088/Hello/services/Hello" />
              
          </wsdl:port>
          </wsdl:service>

          然后再重新打包,發(fā)布一次。

          至此,一個簡單的WebSerive已經(jīng)發(fā)布成功。

          posted on 2010-03-18 17:33 rogerfan 閱讀(1583) 評論(0)  編輯  收藏 所屬分類: 【開源技術(shù)】
          主站蜘蛛池模板: 兴业县| 新绛县| 清丰县| 荣成市| 汽车| 张家口市| 东兰县| 扎鲁特旗| 斗六市| 揭西县| 千阳县| 蚌埠市| 开封县| 三原县| 崇信县| 民丰县| 江川县| 阿勒泰市| 麻阳| 石棉县| 望江县| 横山县| 黄梅县| 满洲里市| 瑞金市| 新源县| 治县。| 东乌珠穆沁旗| 嘉祥县| 镇坪县| 石家庄市| 水城县| 固安县| 济南市| 宁陕县| 武平县| 邹平县| 西畴县| 腾冲县| 柳江县| 威远县|