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

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

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

    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 禮物 閱讀(1535) 評論(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.tkk7.com/libin2722/articles/250431.html  回復  更多評論
      

    主站蜘蛛池模板: 亚洲精品无码AV中文字幕电影网站| 久久精品国产69国产精品亚洲| 国产区图片区小说区亚洲区| 国产成人麻豆亚洲综合无码精品| 免费国产黄网站在线观看可以下载 | 精品免费tv久久久久久久| 亚洲精品在线免费观看| 日本二区免费一片黄2019| 伊人久久大香线蕉免费视频| 亚洲情A成黄在线观看动漫软件 | 亚洲国产天堂在线观看| 精品免费久久久久久成人影院| 曰批全过程免费视频在线观看无码| 波多野结衣亚洲一级| 亚洲人成网7777777国产 | 亚洲精品免费在线| 亚洲成aⅴ人片久青草影院| 18以下岁毛片在免费播放| 美女黄色免费网站| 亚洲激情校园春色| 中文字幕亚洲专区| 免费黄色网址入口| 亚洲精品视频免费在线观看| 美女露隐私全部免费直播| 亚洲一区免费视频| 亚洲精品私拍国产福利在线| 全亚洲最新黄色特级网站| 青春禁区视频在线观看直播免费| 两个人看的www视频免费完整版| 亚洲国产精品美女久久久久| 亚洲无成人网77777| 亚洲av中文无码乱人伦在线r▽| 免费吃奶摸下激烈视频| 九九九精品成人免费视频| 久久精品视频免费播放| 国产黄色片免费看| 无忧传媒视频免费观看入口| 亚洲乱码日产精品一二三| 亚洲精品福利你懂| 91亚洲性爱在线视频| 亚洲色成人网一二三区|