posts - 3,  comments - 0,  trackbacks - 0
          最近在項(xiàng)目中做用戶同步用到了WebService,一開始用的IFire可是OA不支持此框架,沒辦法改用Axis.
          Axis是Apache組織推出的SOAP引擎,Axis項(xiàng)目是Apache組織著名的SOAP項(xiàng)目的后繼項(xiàng)目,我用的是1.4版本,部署環(huán)境tomcat5.0,JDK1.5
          準(zhǔn)備工作:
           1、下載axis1.4 http://ws.apache.org/axis/1_4  只下axis-src-1_4.zip就OK了。
           2、解壓縮后將其中的“webapps”目錄下的“axis”目錄整個拷貝到Tomcat安裝目錄下的“webapps”目錄下即可。
           3、配置Axis:       

          Axis基于Java開發(fā),可以部署于多種操作系統(tǒng),使用前需要配置一系列的系統(tǒng)變量,在此假定你已經(jīng)在本機(jī)上裝好了Tomcat 5.0以上的版本,需要配置的系統(tǒng)變量如下表所示:

          CATALINA_HOME
          E:\Program Files\Apache Software Foundation\Tomcat 5.0

          AXIS_HOME
          %CATALINA_HOME%\webapps\axis

          AXIS_LIB
          %AXIS_HOME%\lib

          AXISCLASSPATH
          %AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery.jar; %AXIS_LIB%\commons-logging.jar;%AXIS_LIB%\jaxrpc.jar; %AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar; %AXIS_LIB%\xml-apis.jar;%AXIS_LIB%\xercesImpl.jar

          CLASSPATH 中加入:
          %AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery.jar; %AXIS_LIB%\commons-logging.jar;%AXIS_LIB%\jaxrpc.jar; %AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar; %AXIS_LIB%\xml-apis.jar;%AXIS_LIB%\xercesImpl.jar

          以上是看了網(wǎng)上一篇文章是這要配置的。我們可以直接寫一個批處理文件把這些變量加入,可以基本省略這一步。后面可以看到

           4、測試Axis    
                  安裝配置完畢后,應(yīng)測試一下是否Axis可以正確運(yùn)行了。
            啟動Tomcat服務(wù)器,在瀏覽器中訪問http://localhost:8080/axis/happyaxis.jsp,如果頁面顯示有錯誤,則需要回頭檢查一下相關(guān)配置是否正確,如果瀏覽頁面能正確顯示出系統(tǒng)組件、屬性等參數(shù)配置信息,則表示安裝成功。現(xiàn)在可以開始開發(fā)你的Web Services應(yīng)用了。

           5、發(fā)布WebService
                  Axis提供了兩種服務(wù)發(fā)布方式,一種是即時發(fā)布(Instant Deployment),一種是定制發(fā)布(Custom Deployment)。
                  即時發(fā)布只用將源Java后綴改成.jws,然后把此文件放到webapps\axis根目錄下就OK。每當(dāng)用戶調(diào)用這類服務(wù)的時候,Axis會自動進(jìn)行編譯,即使服務(wù)器重啟了也不必對其做任何處理,使用非常簡單快捷。
                  需要注意的是:JWS的web服務(wù)發(fā)布是一個很簡單的Web服務(wù)發(fā)布方式,在頁面中你不能使用包,而且由于代碼是在運(yùn)行期被編譯的,所以在部署之后,你也很難找到錯誤所在。
                  即時發(fā)布并不總是最好的選擇,比如有些應(yīng)用系統(tǒng)是第三方提供的,我們沒有購買源代碼,只有.class文件,但我們又希望將這個應(yīng)用系統(tǒng)的一些功能對外發(fā)布成Web服務(wù),使其能夠在更大范圍內(nèi)產(chǎn)生作用,這個時候即時發(fā)布技術(shù)就無能為力了。此外,即時發(fā)布技術(shù)并不靈活,無法進(jìn)行更多的服務(wù)配置,這使得它并不能滿足一些特定系統(tǒng)的需求。
                  因此,Axis提供了另一種服務(wù)發(fā)布方式,這就是定制發(fā)布。我們項(xiàng)目就是用的定制發(fā)布Web Service Deployment Descriptor(WSDD)。
                  首先創(chuàng)建我們的業(yè)務(wù)邏輯類,可以直接在E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF\classes下創(chuàng)建,也可以在別的地方創(chuàng)建好再Copy到此路徑下,一定要在此路徑才能發(fā)布。
                  再創(chuàng)建發(fā)布文件deploy.wsdd,放在E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF。
                  現(xiàn)在可以新建一個批處理文件來發(fā)布WebService了。
                  由于先前沒有建系統(tǒng)變理所以在批處理文件中將變量都加入了進(jìn)來。內(nèi)容如下:

                  cd E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF

                  set classpath=.;E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF\lib\axis.jar;E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF\lib\axis-ant.jar;E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF\lib\commons-discovery-0.2.jar;E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF\lib\commons-logging-1.0.4.jar;E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF\lib\jaxrpc.jar;E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF\lib\log4j-1.2.8.jar;E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF\lib\saaj.jar;E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF\lib\wsdl4j-1.5.1.jar;

                  java org.apache.axis.client.AdminClient deploy.wsdd

                  路徑同deploy.wsdd
                  
                  這樣有個好處就是每次修改過deploy.wsdd文件后重新發(fā)布只要運(yùn)行這個批處理文件就OK了。
                  現(xiàn)在運(yùn)行它,如果說沒有找到類,那么可能是類路徑?jīng)]有配置好,建議將所有的與axis相關(guān)的jar都寫到classpath中去。
                  如果出現(xiàn)以下內(nèi)容就表明發(fā)布成功了:
                  Processing file deploy.wsdd
                   <Admin>Doneprocessing</Admin>

              定制發(fā)布還有種方法就是直接寫server-config.wsdd,但是我沒那樣試過。網(wǎng)上搜搜應(yīng)該一大堆。

              來取消部署的命令:java org.apache.axis.client.AdminClient undeploy.wsdd  
              你也可以調(diào)用: java org.apache.axis.client.AdminClient list 來獲得所有的已經(jīng)部署的服務(wù)的列表。在這里你會看到services, handlers, transports等等,注意這個調(diào)用只是列出了WEB-INF\server-config.wsdd的文件內(nèi)容。
                 一定要注意:編譯后的class文件要拷貝到web-inf/classes的目錄中,如果該文件中有包存在的話,別忘了還要在classes目錄下創(chuàng)建包的目錄。
                 通過訪問 http://localhost:8080/axis/servlet/UserManagerService?wsdl可以看到這個服務(wù)的WSDL描述文件,這說明UserManagerService服務(wù)被成功發(fā)布了。你也可以通過訪問http://localhost:8080/axis/servlet/AxisServlet查看所有定制發(fā)布的服務(wù)。

          致此WebService開發(fā)完成,下面就是測試這個服務(wù)了。
          我采用的是JAVA測試,測試代碼如下:        

          import org.apache.axis.client.Call;
          import org.apache.axis.client.Service;
          import org.apache.axis.encoding.XMLType;
          import javax.xml.rpc.ParameterMode;

          public class AXISTest
          {
              public static void main( String[] args ) throws Exception
              {
                   //創(chuàng)建service和call對象,這些對象是標(biāo)準(zhǔn)的JAX-RPC對象,這些對象用于存儲服務(wù)調(diào)用的數(shù)據(jù)(metadata)。

             Service service = new Service();
             Call call = ( Call ) service.createCall();
             //////////訪問定制發(fā)布的UserManagerService服務(wù)
             call = ( Call ) service.createCall();
            
             //設(shè)置訪問點(diǎn)
             call.setTargetEndpointAddress( "http://localhost:8080/axis/services/UserManagerService" );
            
             //設(shè)置操作名
             call.setOperationName( "addUser" );
            
             //設(shè)置入口參數(shù)
             call.addParameter( "op1", XMLType.XSD_DOUBLE, ParameterMode.IN );
             //設(shè)置返回類型
             call.setReturnType(  org.apache.axis.Constants.XSD_STRING   );   
             //call.setReturnClass(String.class);//也可這樣設(shè)置返回類型

             MyBean myBean = new MyBean();//此處是一個JavaBean 用來處理XML格式的數(shù)據(jù)
             String userInfo = myBean.getMyBean("user.xml");//從文件中取
             
             String ret=(String)call.invoke(new String[]{userInfo});   
                                         
             //調(diào)用服務(wù)
             System.out.println( " 結(jié)果: " + ret + "" );

              }
          }

          編譯,運(yùn)行。OK。


          參考資料:http://blog.csdn.net/sunsnow8/archive/2005/01/10/246580.aspx

          posted on 2008-11-06 10:00 bobily 閱讀(448) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 施甸县| 阿坝| 肥城市| 综艺| 汤原县| 成安县| 托克逊县| 红原县| 巨野县| 腾冲县| 浑源县| 浙江省| 诸城市| 泗阳县| 大渡口区| 井研县| 潼南县| 阳信县| 常熟市| 读书| 白银市| 焦作市| 晋中市| 成安县| 兴文县| 南康市| 历史| 广安市| 曲阳县| 蒲江县| 三江| 海丰县| 环江| 缙云县| 乐陵市| 塘沽区| 英山县| 通渭县| 遂昌县| 崇义县| 海林市|