列宿乃施于上榮兮 日月才經于柍桭

          ………… 白駒過隙 歲月如斯 夢縈回繞 心靈之聲
          posts - 57, comments - 8, trackbacks - 0, articles - 41
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          基于Axis 1.X的Web Service開發(一)

          Posted on 2007-04-01 16:09 默認為零 閱讀(375) 評論(0)  編輯  收藏 所屬分類: 技術

            Axis全稱Apache eXtensible Interaction System,是apache組織下的一個開源項目,用來做webservice開發的,有java版的實現,也有c++版的實現。其前身最早是IBM的SOAP4J,后來捐給Apache后改名Apache SOAP,也就是支持SOAP1.1的那個版本,到現在的AXIS已經是第三代了,AXIS對Apache SOAP的改進有很多,比如用SAX代替以前的DOM,增加對WSDL的支持,支持SOAP1.2等等。

            使用axis其實很簡單,在apache網站上把axis下載了后,把%AXIS_HOME%\webapps\axis整個目錄拷貝到tomcat的webapps目錄下面,啟動tomcat,瀏覽器中輸入http://localhost:8080/axis就可以訪問了。

            上面說的只是axis運行起來了,要想布置自己的webservice,axis支持兩種方法:一種是用JWS(Java Web Service),好處是只要有源碼比如說Hello.java,把它后綴改成jws后放到%TOMCAT_HOME%\webapps\axis目錄下面,瀏覽器里面輸入http://localhost:8080/axis/Hello.jws就可以了;第二種方法就是使用wsdd(web service deploy description),這個就是在TOMCAT_HOME%\webapps\axis\WEB-INF目錄下寫一個deploy.wsdd和undeploy.wsdd文件,然后通過java org.apache.axis.client.AdminClient deploy.wsdd發布,可以生成server-config.wsdd配置文件,里面是一些發布的web服務信息,而卸載web 服務就可以用org.apache.axis.client.AdminClient undeploy.wsdd來操作,客戶端輸入http://localhost:8080/axis/services/Hello就可以了。
             
            下面看一個簡單的例子,編寫一個普通的web service例子(Hello.java)如下:

              public class Hello {
                  
          public String sayHello(String name) {
                      
          return "hello " + name;
                  }

              }


            把它改名為Hello.jws然后拷貝至%TOMCAT_HOME%\webapps\axis目錄下,然后編寫客戶端程序如下:

              public static void main(String args[]) {
                  
          try {
                      String endpoint 
          = "http://localhost:8080/axis/Hello.jws";

                      Service service 
          = new Service();
                      Call call 
          = (Call) service.createCall();
                      call.setTargetEndpointAddress(
          new URL(endpoint));
                      call.setOperationName(
          "sayHello");
             
                      String result 
          = (String) call.invoke(new Object[] "apos" });
                      System.out.println(result);
                  }
           catch (Exception e) {
                      System.err.println(e.toString());
                  }

              }

            運行后輸出“hello apos”,好了,一個簡單的web service 調用成功了。

            還有一種wsdd發布和調用方式,如上Hello.java,可以為其編寫deploy.wsdd文件如下:

          <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
              
          <service name="HelloService" provider="java:RPC">
                  
          <parameter name="className" value="Hello"/>
                  
          <parameter name="allowedMethods" value="sayHello"/>
              
          </service>
          </deployment>

            接下去啟動tomcat,在DOS下切換目錄到%TOMCAT_HOME%\webapps\axis\WEB-INF\目錄下,執行命令行:
            java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd

            你會看到在當前目錄下生成了server-config.wsdd配置文件。內容如下:

          <?xml version="1.0" encoding="UTF-8"?>
          <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
              
          <globalConfiguration>
                  
          <parameter name="sendMultiRefs" value="true"/>
                  
          <parameter name="disablePrettyXML" value="true"/>
                  
          <parameter name="adminPassword" value="admin"/>
                  
          <parameter name="attachments.Directory" value="D:\jakarta-tomcat-4.1.31\webapps\axis\WEB-INF\attachments"/>
                  
          <parameter name="dotNetSoapEncFix" value="true"/>
                  
          <parameter name="enableNamespacePrefixOptimization" value="false"/>
                  
          <parameter name="sendXMLDeclaration" value="true"/>
                  
          <parameter name="sendXsiTypes" value="true"/>
                      
          <parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl"/>
                      
          <requestFlow>
                           
          <handler type="java:org.apache.axis.handlers.JWSHandler">
                                
          <parameter name="scope" value="session"/>
                           
          </handler>
                           
          <handler type="java:org.apache.axis.handlers.JWSHandler">
                                
          <parameter name="scope" value="request"/>
                                
          <parameter name="extension" value=".jwr"/>
                           
          </handler>
                      
          </requestFlow>
              
          </globalConfiguration>
              
          <handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>
              
          <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
              
          <handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
              
          <service name="AdminService" provider="java:MSG">
                  
          <parameter name="allowedMethods" value="AdminService"/>
                      
          <parameter name="enableRemoteAdmin" value="false"/>
                      
          <parameter name="className" value="org.apache.axis.utils.Admin"/>
                      
          <namespace>http://xml.apache.org/axis/wsdd/</namespace>
                     
          </service>
                     
          <service name="Version" provider="java:RPC">
                      
          <parameter name="allowedMethods" value="getVersion"/>
                      
          <parameter name="className" value="org.apache.axis.Version"/>
                     
          </service>
                     
          <service name="HelloService" provider="java:RPC">
                      
          <parameter name="allowedMethods" value="sayHello"/>
                      
          <parameter name="className" value="Hello"/>
                     
          </service>
                     
          <transport name="http">
                      
          <requestFlow>
                           
          <handler type="URLMapper"/>
                           
          <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
                      
          </requestFlow>
                      
          <parameter name="qs:list" value="org.apache.axis.transport.http.QSListHandler"/>
                      
          <parameter name="qs:wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>
                      
          <parameter name="qs.list" value="org.apache.axis.transport.http.QSListHandler"/>
                      
          <parameter name="qs.method" value="org.apache.axis.transport.http.QSMethodHandler"/>
                          
          <parameter name="qs:method" value="org.apache.axis.transport.http.QSMethodHandler"/>
                      
          <parameter name="qs.wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>
                     
          </transport>
                     
          <transport name="local">
                      
          <responseFlow>
                       
          <handler type="LocalResponder"/>
                      
          </responseFlow>
                     
          </transport>
          </deployment>

            你也可以手工配置此文件以達到發布web service 的目的。

            然后通過 http://localhost:8080/axis/services/HelloService?method=sayHello&name=apos    訪問服務,可以看到返回soap包如下:

          <?xml version="1.0" encoding="UTF-8"?>
          <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
              
          <soapenv:Body>
                  
          <sayHelloResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
                      
          <sayHelloReturn xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">hello apos</sayHelloReturn>
                  
          </sayHelloResponse>
              
          </soapenv:Body>
          </soapenv:Envelope>

            呵呵,第二種方式發布并訪問web service 成功了。

          主站蜘蛛池模板: 自治县| 海口市| 信丰县| 盱眙县| 玛沁县| 庆城县| 太湖县| 长春市| 文水县| 永昌县| 上犹县| 清水县| 河源市| 锡林郭勒盟| 凤山市| 濉溪县| 房产| 泰宁县| 南皮县| 武陟县| 达日县| 循化| 高唐县| 江西省| 江津市| 奇台县| 邢台市| 南京市| 新野县| 乐昌市| 龙门县| 格尔木市| 赤峰市| 霍州市| 大埔区| 桑日县| 濮阳市| 富锦市| 大城县| 黎平县| 涟源市|