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

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

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

    當(dāng)柳上原的風(fēng)吹向天際的時(shí)候...

    真正的快樂來源于創(chuàng)造

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      368 Posts :: 1 Stories :: 201 Comments :: 0 Trackbacks
    Web Service定義了一套標(biāo)準(zhǔn)的調(diào)用過程:
    • 服務(wù)器端首先用一套標(biāo)準(zhǔn)的方法向外界描述它所提供的服務(wù)的內(nèi)容,這屬于WSDL的范疇。
    • 客戶端需要以一種標(biāo)準(zhǔn)的協(xié)議來調(diào)用此服務(wù),這屬于SOAP的范疇。
    • 服務(wù)提供者將服務(wù)內(nèi)容放在一個(gè)公共的網(wǎng)址上讓人查詢,這屬于UDDI的范疇。
    WSDL:服務(wù)內(nèi)容的標(biāo)準(zhǔn)化描述
    WSDL的目的是告訴外界自己能提供什么樣的服務(wù),有點(diǎn)類似于java的接口。
    WSDLd的全稱是Web Service Description Language,是一種基于XML的關(guān)于Web服務(wù)的描述,主要目的在于將自己的Web服務(wù)的所有相關(guān)內(nèi)容如提供服務(wù)的傳輸方式,服務(wù)方法接口,接口參數(shù),服務(wù)路徑等,生成相應(yīng)的完全的文檔,發(fā)布給使用者。使用者可以通過這個(gè)WSDL文檔,創(chuàng)建相應(yīng)的SOAP請求消息,通過HTTP傳遞給Web服務(wù)提供者;Web服務(wù)提供者在完成請求服務(wù)后,將SOAP返回消息傳回給請求者,服務(wù)請求者再根據(jù)WSDL文檔將SOAP返回消息解析成程序能夠理解的內(nèi)容。

    SOAP:標(biāo)準(zhǔn)的傳輸協(xié)議
    SOAP是標(biāo)準(zhǔn)化的消息協(xié)議,是客戶端送給服務(wù)器希望調(diào)用的類和方法的一種消息格式,也包括服務(wù)返回的消息格式。之所以有SOAP是因?yàn)橹挥写蠹叶甲袷匾惶紫⒏袷降臉?biāo)準(zhǔn),相互之間才能明白對方想要干什么。
    SOAP是Web Service的標(biāo)準(zhǔn)傳輸協(xié)議,是Simple Object Application Propotol的簡寫,是一種標(biāo)準(zhǔn)化的傳輸消息的XML格式。
    SOAP請求消息將客戶端的服務(wù)請求消息發(fā)給服務(wù)器,比如想調(diào)用什么接口,以及接口的參數(shù)值等。SOAP答復(fù)消息是從服務(wù)器返回給客戶端的消息,如接口實(shí)現(xiàn)類調(diào)用后的返回值或是調(diào)用服務(wù)時(shí)的錯(cuò)誤信息等。定義WSDL是很重要的,一旦WSDL定義好了,再根據(jù)WSDL的輸入變量和輸出變量的結(jié)構(gòu)就可以知道SOAP的請求消息和響應(yīng)消息的格式了。

    UDDI:服務(wù)的公共網(wǎng)址
    UDDI是Universal Description Discovery and Intergretion的縮寫,是一種創(chuàng)建注冊服務(wù)的規(guī)范,以便大家將自己的Web Service進(jìn)行注冊發(fā)布供使用者查找。
    當(dāng)服務(wù)提供者想將自己的Web Service發(fā)布,以便外部能找到其服務(wù)時(shí),那么服務(wù)提供這可以將自己的Web Service注冊到相應(yīng)的UDDI商用注冊網(wǎng)站。
    UDDI并非一個(gè)必須的Web Service組件,服務(wù)方完全可以不進(jìn)行UDDI的注冊。因?yàn)閃SDL文件中已經(jīng)給出了Web Service的地址URI,外部可以通過它進(jìn)行相應(yīng)的Web Service調(diào)用。

    以下是一個(gè)Web Service示例程序,主要參考了梁愛虎的《SOA 思想,技術(shù)與系統(tǒng)集成應(yīng)用詳解》中的例子:

    發(fā)布Web服務(wù)的類接口:
    package com.heyang;

    /**
     * 生成序列號的接口
     * 
    @author: 何楊(heyang78@gmail.com)
     * @date: 2009-9-29-下午12:37:55
     
    */
    public interface ISerial{
        
    /**
         * 傳入類型,返回序列號
         * 
    @param type
         * 
    @return
         
    */
        
    public String getSN(String type);
    }

    發(fā)布web服務(wù)的類:
    package com.heyang;

    import java.text.MessageFormat;

    /**
     * ISerial的實(shí)現(xiàn)類
     * 
    @author: 何楊(heyang78@gmail.com)
     * @date: 2009-9-29-下午12:40:05
     
    */
    public class SerialService implements ISerial{
        
    private static int number;
        
        
    /**
         * 產(chǎn)生SN:CD-000001的序列號
         * MessageFormat的用法可參考http://hi.baidu.com/gacmotor/blog/item/372b4a3a0b010de314cecb0b.html
         
    */
        
    public String getSN(String type) {
            number
    ++;
            Object[] arr
    =new Object[]{type,number};
            String result
    =MessageFormat.format("SN:{0}-{1,number,000000}",arr);
            
    return result;
        }
        
        
    public static void main(String[] args){
            SerialService s
    =new SerialService();        
            System.out.println(s.getSN(
    "CD"));
        }
    }

    Web.xml:
    <?xml version="1.0" encoding="UTF-8"?>

    <web-app > 
        
    <servlet>
            
    <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>
    </web-app>

    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">
        
    <handler type="java:org.apache.axis.handlers.http.URLMapper"
            name
    ="URLMapper" />
        
    <service name="fetchSerialNumber" provider="java:RPC">
            
    <parameter name="className" value="com.heyang.SerialService" />
            
    <parameter name="allowedMethods" value="getSN" />
        
    </service>
        
    <transport name="http">
            
    <requestFlow>
                
    <handler type="URLMapper" />
            
    </requestFlow>
        
    </transport>
    </deployment>

    測試類:
    package com.heyang.client;

    import java.net.MalformedURLException;
    import java.rmi.RemoteException;

    import javax.xml.rpc.ServiceException;

    import org.apache.axis.client.Call;
    import org.apache.axis.client.Service;

    /**
     * WebServiceClientTest
     * 
    @author: 何楊(heyang78@gmail.com)
     * @date: 2009-9-29-下午01:03:05
     
    */
    public class WebServiceClientTest {
        
    public static void main(String[] args) throws ServiceException,
                MalformedURLException, RemoteException {
            
    // 標(biāo)識(shí)Web Service的具體路徑
            /**
             * SerialNumber:發(fā)布到Tomcat上的war的名稱,采用工程名
             * services:固定寫法,與Web.xml中設(shè)定對應(yīng)
             * fetchSerialNumber:server-config.wsdd中設(shè)定的service名
             
    */
            String endpoint 
    = "http://localhost:8080/SerialNumber/services/fetchSerialNumber";

            
    // 創(chuàng)建 Service實(shí)例
            Service service = new Service();
            
            
    // 通過Service實(shí)例創(chuàng)建Call的實(shí)例
            Call call = (Call) service.createCall();
            
            
    // 將Web Service的服務(wù)路徑加入到call實(shí)例之中.
            call.setTargetEndpointAddress(new java.net.URL(endpoint));// 為Call設(shè)置服務(wù)的位置
            
            
    // 調(diào)用Web Service的方法
            call.setOperationName("getSN");
            
            
    // 調(diào)用Web Service,傳入?yún)?shù)
            String retval = (String) call.invoke(new Object[] { "CD" });
            
            System.out.println(retval);
        }
    }

    輸出示例:
    SN:CD-000004


    例程下載(使用Axis,注意Tomcat的lib目錄中要包括mail.jar和activation.jar):
    http://www.tkk7.com/Files/heyang/SerialNumber20090929130453.rar

    使用說明:
    使用Ant腳本將jar包打好,再部署到Tomcat中,可以用http://localhost:8080/SerialNumber/services來測試一下是否有輸出,有則表示部署成功,之后執(zhí)行WebServiceClientTest。

    主要參考資料:
    梁愛虎著《SOA 思想,技術(shù)與系統(tǒng)集成應(yīng)用詳解》
    posted on 2009-09-29 14:09 何楊 閱讀(433) 評論(0)  編輯  收藏
    主站蜘蛛池模板: 中文字幕在线成人免费看| 久久久久国产精品免费看| 亚洲Av永久无码精品三区在线| 午夜视频在线免费观看| 亚洲AV无码国产一区二区三区| 色婷婷精品免费视频| 日本午夜免费福利视频| 中文字幕高清免费不卡视频| 亚洲成人免费网站| 午夜亚洲av永久无码精品| 99蜜桃在线观看免费视频网站| 亚洲AV噜噜一区二区三区| 日韩亚洲一区二区三区| 免费黄色app网站| 国产99视频精品免费专区| 337P日本欧洲亚洲大胆艺术图| 久久国产亚洲精品麻豆| 日韩中文无码有码免费视频 | 亚洲视频在线观看免费视频| 亚洲国产精品久久久久婷婷老年| 毛片免费视频在线观看| 精品无码国产污污污免费网站国产| 亚洲伊人久久大香线蕉在观| 亚洲人午夜射精精品日韩| 免费看一级高潮毛片| 亚洲高清视频免费| 久久精品网站免费观看| 免费在线观影网站| 污网站免费在线观看| 亚洲av乱码一区二区三区香蕉| 亚洲精品乱码久久久久久自慰 | 日本一区二区三区日本免费| 最近免费最新高清中文字幕韩国| 黄页网站在线视频免费| 亚洲中文字幕乱码熟女在线| 毛片免费在线观看网址| **俄罗斯毛片免费| 国产在线观看免费视频软件| 一级做a爰片久久毛片免费陪 | 亚洲精品国偷自产在线| 免费国产小视频在线观看|