<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://m.tkk7.com/libin2722/articles/250431.html  回復  更多評論
      

    主站蜘蛛池模板: 一级毛片试看60分钟免费播放| 日本人的色道免费网站| 久久久久久a亚洲欧洲AV| 国产成人精品免费午夜app| 亚洲欧美成人综合久久久| 亚洲综合亚洲综合网成人| 最近免费中文字幕大全免费| 亚洲另类无码专区首页| 国产亚洲3p无码一区二区| 99re热免费精品视频观看| 一区二区视频免费观看| 亚洲国产成人久久精品app| 亚洲精品网站在线观看不卡无广告 | 亚洲最大福利视频| 伊人久久亚洲综合| 思思99re66在线精品免费观看| 久久久久久久久久免免费精品 | AV片在线观看免费| 最近的2019免费中文字幕| 1000部拍拍拍18免费网站| 免费视频成人国产精品网站| 亚洲欧洲视频在线观看| 亚洲婷婷国产精品电影人久久| 在线观看免费人成视频色9| 99麻豆久久久国产精品免费 | 国产亚洲精品精华液| 嫩草影院在线免费观看| 久久久久国产精品免费看| 阿v视频免费在线观看| 亚洲sss综合天堂久久久| 久久久久亚洲Av片无码v| 亚洲精品一级无码中文字幕| 久久不见久久见中文字幕免费| 久久青草免费91观看| 国产97视频人人做人人爱免费| 亚洲国产欧美国产综合一区| 亚洲精彩视频在线观看| 亚洲AV无码久久精品成人| 亚洲色欲久久久久综合网| 日本免费一本天堂在线| 97人伦色伦成人免费视频|