Terry.Li-彬

          虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks
          首先到apache的網站下載axis的開發包,好久沒看了,現在已經開始出2.0的啦,不過好像還不是很成熟,這里,我們還是用1.x的包。最新的是1.3的包(如果是用jbuilder的話是不需要再下載的,可以用其自帶的工具發布的,做起來很簡單,不過下面是以比較通用的方式來介紹)。

          一、服務器端開發

                首先編寫服務端程序,這時我們完全不用考慮他是不是當作webservcies來發布的,因為在寫法上沒有什么不同。比如我們寫了一個很簡單的java程序,代碼如下:

          package samples.userguide.example2;
          public class Calculator {
            public int add(int i1, int i2)
            {
              return i1 + i2;
            }
            public int subtract(int i1, int i2)
            {
              return i1 - i2;
            }
          }

          如果我們要把他發布成為services,首先需要把axis-1_3下的lib文件復制到我們的web服務的web-inf 的lib下。 然后在web.xml里增加以下內容

            <servlet>
              <display-name>Apache-Axis Servlet</display-name>
              <servlet-name>AxisServlet</servlet-name>
              <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
            </servlet>
            <servlet-mapping>
              <servlet-name>AxisServlet</servlet-name>
              <url-pattern>/servlet/AxisServlet</url-pattern>
            </servlet-mapping>
            <servlet-mapping>
              <servlet-name>AxisServlet</servlet-name>
              <url-pattern>*.jws</url-pattern>
            </servlet-mapping>
            <servlet-mapping>
              <servlet-name>AxisServlet</servlet-name>
              <url-pattern>/services/*</url-pattern>
            </servlet-mapping>

          第一個是制定AxisServlet的類是必須的,余下的是配置servlet mapping的,可根據需要進行修改,比如不需要對 *.jws做mapping的時候就可以去掉相應的部分。完成了上邊的必須配置我們就有兩種方式來發布了:

          1、動態發布,直接把Calculator 的java文件復制到webroot下,把Calculator.java更名為Calculator.jws,然后通過http://localhost:8080/Calculator.jws 訪問就可以 ,通過 http://localhost:8080/Calculator.jws?wsdl 就可以看到相應的wsdl。這種方式調試起來比較麻煩,而且我再測試的時候也不能帶package的信息,而且一些高級的配置無法實施,不建議采用。

          2、靜態發布,就是通過配置文件發布,這時候我們類的編譯和普通的web方式沒有不同,只是在web-inf下多了一個配置文件,默認的名稱為server-config.wsdd

          <?xml version="1.0" encoding="UTF-8"?>
          <deployment name="defaultClientConfig"
              xmlns:java="     xmlns:handler="         <requestFlow name="RequestFlow1" type="">
                      <handler name="Handler1" type="java:org.apache.axis.handlers.JWSHandler">
                          <parameter name="scope" value="session"/>
                      </handler>
                      <handler name="Handler2" type="java:org.apache.axis.handlers.JWSHandler">
                          <parameter name="scope" value="request"/>
                          <parameter name="extension" value=".jwr"/>
                      </handler>
                  </requestFlow>
              </globalConfiguration>
              <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
              <handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>
              <handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
              <transport name="http" type="">
                  <requestFlow name="RequestFlow1" type="">
                      <handler name="Handler1" type="URLMapper"/>
                      <handler name="Handler2" type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
                  </requestFlow>
              </transport>
              <transport name="local" type="">
                  <responseFlow name="ResponseFlow1" type="">
                      <handler name="Handler1" type="LocalResponder"/>
                  </responseFlow>
              </transport>
              <service name="AdminService" type="" 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" type="" provider="java:RPC">
                  <parameter name="allowedMethods" value="getVersion"/>
                  <parameter name="className" value="org.apache.axis.Version"/>
              </service>
              <service name="Calculator" type="" provider="java:RPC" style="rpc" use="encoded">
                  <parameter name="scope" value="Request"/>
                  <parameter name="className" value="samples.userguide.example2.Calculator"/>
                  <parameter name="allowedMethods" value="*"/>
                  <namespace>http://example2.userguide.samples</namespace>
              </service>
              <service name="OrderProcessor" provider="java:RPC">
                  <parameter name="className" value="samples.userguide.example5.BeanService"/>
                  <parameter name="allowedMethods" value="*"/>
                  <beanMapping qname="myNS:Order" xmlns:myNS="urn:BeanService" languageSpecificType="java:samples.userguide.example5.Order"/>
              </service>
          </deployment>

          其中要發布的每個service都需要加上一個service的節點描述,其他多余的servie節點可以刪除的,這樣重啟tomcat后,我們就可以以http://localhost:8080/services/Calculator 來訪問這個service了,同樣以http://localhost:8080/services/Calculator?wsdl 訪問到它的wsdl描述文件。

          二、客戶端開發

          在開發工具中引進lib下的jar包;然后編寫客戶端程序

          package samples.userguide.example2;

          import org.apache.axis.client.Call;
          import org.apache.axis.client.Service;
          import org.apache.axis.encoding.XMLType;
          import org.apache.axis.utils.Options;

          import javax.xml.rpc.ParameterMode;

          public class CalcClient
          {
             public static void main(String [] args) throws Exception {
                 try{
                     String endpoint = "https://localhost:8440/services/Calculator";
                     Integer i1 = new Integer(1);
                     Integer i2 = new Integer(2);

                     Service service = new Service();
                     Call call = (Call) service.createCall();

                     call.setTargetEndpointAddress(new java.net.URL(endpoint));
                     call.setOperationName("add");
                     call.addParameter("i1", XMLType.XSD_INT, ParameterMode.IN);
                     call.addParameter("i2", XMLType.XSD_INT, ParameterMode.IN);
                     call.setReturnType(XMLType.XSD_INT);

                     Integer ret = (Integer) call.invoke(new Object[] {i1, i2});

                     System.out.println("Got result : " + ret);
                 }
                 catch(Exception e){
                     e.printStackTrace();
                 }
             }
          }

          其中 setOperationName就是指定執行的方法,addParameter就是指定參數
          運行一下吧

          posted on 2007-11-24 14:44 禮物 閱讀(1540) 評論(3)  編輯  收藏 所屬分類: webservice

          評論

          # re: 用axis發布webservices(一) 2008-03-13 16:26 xqf_1999
          http://localhost:8080/services/Calculator
          這個例子跑不通啊?
          是不是有沒寫全的地方啊!!  回復  更多評論
            

          # re: 用axis發布webservices(一) 2009-01-17 20:28 dx0803
          http://localhost:8080/后要加上你自己的path,例如:
          http://localhost:8080/myapp/services/Calculator?wsdl
          就可以了  回復  更多評論
            

          # re: 用axis發布webservices(一) 2009-01-18 14:17 禮物
          @xqf_1999
          你看看我這篇文章,這篇寫了一個通用的。
          http://www.aygfsteel.com/libin2722/articles/250431.html  回復  更多評論
            

          主站蜘蛛池模板: 临猗县| 墨竹工卡县| 双峰县| 新平| 贺州市| 汕头市| 怀集县| 开化县| 阜阳市| 红河县| 南皮县| 梅河口市| 盐边县| 新源县| 伊宁县| 礼泉县| 宜兰市| 武清区| 丰原市| 九龙坡区| 剑阁县| 杭锦后旗| 黑龙江省| 新河县| 都江堰市| 隆子县| 福安市| 长阳| 电白县| 宝坻区| 阜南县| 鄂尔多斯市| 东台市| 封开县| 双牌县| 铜山县| 会泽县| 镇赉县| 东台市| 新巴尔虎左旗| 综艺|