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

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

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

    風(fēng)行天下

    JAVA太極
    posts - 4, comments - 10, trackbacks - 0, articles - 55
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    利用XFire開發(fā)一個簡單的WebService

    Posted on 2006-12-03 17:08 風(fēng)太少 閱讀(1081) 評論(0)  編輯  收藏 所屬分類: java編程spring
    你將了解到如何將一個普通的java文件轉(zhuǎn)換為一個web服務(wù),services.xml文件是如何定義的,如何發(fā)布這個web服務(wù)、如何獲得這個服務(wù)的WSDL。
    首先打開Eclipse,創(chuàng)建一個普通的java工程,將xfire所需的jar和xfire的jar加入到工程所需的類庫引用中。創(chuàng)建一個簡單的java文件,這個java文件簡單到只提供一個add方法。
    版本:xfire-all-1.1.2.jar
    web.xml
    ?1<!--?Context?Param?Configuration?-->
    ?2????<context-param>
    ?3????????<param-name>contextConfigLocation</param-name>
    ?4????????<param-value>
    ?5????????????/WEB-INF/spring/basic-context.xml,?
    ?6????????????/WEB-INF/spring/security-context.xml,?
    ?7????????????/WEB-INF/spring/lookup-context.xml,
    ?8????????????/WEB-INF/struts/security/security-action-bean.xml
    ?9????????????classpath:org/codehaus/xfire/spring/xfire.xml
    10????????</param-value>
    11????</context-param>
    紅色字是我們要添加的,而且必須這么寫。
    還有映射,也是web.xml
    1<servlet>
    2????????<servlet-name>xfire</servlet-name>
    3????????<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    4????</servlet>
    5
    6????<servlet-mapping>
    7????????<servlet-name>xfire</servlet-name>
    8????????<url-pattern>/xfire/*</url-pattern>
    9????</servlet-mapping>

    然后在WEB-INF下新增一個文件
    xfire-servlet.xml

    ?1<?xml?version="1.0"?encoding="UTF-8"?>
    ?2<!DOCTYPE?beans?PUBLIC?"-//SPRING//DTD?BEAN//EN"?"http://www.springframework.org/dtd/spring-beans.dtd">
    ?3<beans>
    ?4????<bean?class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    ?5????????<property?name="urlMap">
    ?6????????????<map>
    ?7????????????????<entry?key="/mathBean">
    ?8????????????????????<ref?bean="math"/>
    ?9????????????????</entry>
    10????????????</map>
    11????????</property>
    12????</bean>
    13????
    14????<!--?Declare?a?parent?bean?with?all?properties?common?to?both?services?-->
    15????<bean?id="math"?class="org.codehaus.xfire.spring.remoting.XFireExporter">
    16????????<property?name="serviceFactory">
    17????????????<ref?bean="xfire.serviceFactory"/>
    18????????</property>
    19????????<property?name="xfire">
    20????????????<ref?bean="xfire"/>
    21????????</property>
    22????????<property?name="serviceBean">
    23????????????<ref?bean="mathBean"/>
    24????????</property>
    25????????<property?name="serviceClass">
    26????????????<value>cn.redstoneinfo.oss.security.inteface.MathService</value>
    27????????</property>
    28????</bean>
    29????
    30
    31</beans>
    這里的<property?name="xfire">
    ?????????????????? <ref?bean="xfire"/>
    ????????? </property>
    就這么寫,不用想別的,而
    ?????????? <property?name="serviceBean">
    ????????????<ref?bean="mathBean"/>
    ????????</property>
    需要調(diào)用你自己的實現(xiàn)類bean的聲明。我的是:
    1<bean?id="mathBean"?class="cn.redstoneinfo.oss.security.util.MathServiceImpl"/>

    接口:
    ?1package?cn.redstoneinfo.oss.security.inteface;
    ?2
    ?3/**
    ?4?*?define?the?MathService.java
    ?5?*?Create?at?2006-9-14?下午02:59:59
    ?6?*??
    ?7?*?@version?1.0
    ?8?*?@author?zhangli
    ?9?*/

    10public?interface?MathService?
    11
    12{?
    13
    14??public?long?add(int?p1,?int?p2);?
    15
    16}
    ?
    實現(xiàn)類:
    ?1package?cn.redstoneinfo.oss.security.util;
    ?2
    ?3import?cn.redstoneinfo.oss.security.inteface.MathService;
    ?4
    ?5/**
    ?6?*?define?the?MathServiceImpl.java
    ?7?*?Create?at?2006-9-14?下午03:00:40
    ?8?*??
    ?9?*?@version?1.0
    10?*?@author?zhangli
    11?*/

    12public?class?MathServiceImpl?implements?MathService?
    13
    14{?
    15
    16??public?long?add(int?p1,?int?p2)?
    17
    18??{?
    19
    20????return?p1?+?p2;?
    21
    22??}
    ?
    23
    24}
    ?
    配置完成后,啟動tomcat,用http://127.0.0.1:8080/nextoss1/xfire/mathBean?wsdl可以看到wsdl的描述。

    ?1<?xml?version="1.0"?encoding="UTF-8"?>
    ?2<wsdl:definitions?xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"?xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/"?xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"?xmlns:soapenc11="http://schemas.xmlsoap.org/soap/encoding/"?xmlns:soapenc12="http://www.w3.org/2003/05/soap-encoding"?xmlns:tns="http://inteface.security.oss.redstoneinfo.cn"?xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"?xmlns:xsd="http://www.w3.org/2001/XMLSchema"?targetNamespace="http://inteface.security.oss.redstoneinfo.cn">
    ?3??<wsdl:types>
    ?4????<xsd:schema?targetNamespace="http://inteface.security.oss.redstoneinfo.cn"?elementFormDefault="qualified"?attributeFormDefault="qualified">
    ?5??????<xsd:element?name="add">
    ?6????????<xsd:complexType>
    ?7??????????<xsd:sequence>
    ?8????????????<xsd:element?name="in0"?type="xsd:int"?minOccurs="1"?maxOccurs="1"?/>
    ?9????????????<xsd:element?name="in1"?type="xsd:int"?minOccurs="1"?maxOccurs="1"?/>
    10??????????</xsd:sequence>
    11????????</xsd:complexType>
    12??????</xsd:element>
    13??????<xsd:element?name="addResponse">
    14????????<xsd:complexType>
    15??????????<xsd:sequence>
    16????????????<xsd:element?name="out"?type="xsd:long"?minOccurs="1"?maxOccurs="1"?/>
    17??????????</xsd:sequence>
    18????????</xsd:complexType>
    19??????</xsd:element>
    20????</xsd:schema>
    21??</wsdl:types>
    22??<wsdl:message?name="addResponse">
    23????<wsdl:part?element="tns:addResponse"?name="parameters"?/>
    24??</wsdl:message>
    25??<wsdl:message?name="addRequest">
    26????<wsdl:part?element="tns:add"?name="parameters"?/>
    27??</wsdl:message>
    28??<wsdl:portType?name="MathServicePortType">
    29????<wsdl:operation?name="add">
    30??????<wsdl:input?message="tns:addRequest"?name="addRequest"?/>
    31??????<wsdl:output?message="tns:addResponse"?name="addResponse"?/>
    32????</wsdl:operation>
    33??</wsdl:portType>
    34??<wsdl:binding?name="MathServiceHttpBinding"?type="tns:MathServicePortType">
    35????<wsdlsoap:binding?style="document"?transport="http://schemas.xmlsoap.org/soap/http"?/>
    36????<wsdl:operation?name="add">
    37??????<wsdlsoap:operation?soapAction=""?/>
    38??????<wsdl:input?name="addRequest">
    39????????<wsdlsoap:body?use="literal"?/>
    40??????</wsdl:input>
    41??????<wsdl:output?name="addResponse">
    42????????<wsdlsoap:body?use="literal"?/>
    43??????</wsdl:output>
    44????</wsdl:operation>
    45??</wsdl:binding>
    46??<wsdl:service?name="MathService">
    47????<wsdl:port?binding="tns:MathServiceHttpBinding"?name="MathServiceHttpPort">
    48??????<wsdlsoap:address?location="http://127.0.0.1:8080/nextoss1/xfire/mathBean"?/>
    49????</wsdl:port>
    50??</wsdl:service>
    51</wsdl:definitions>
    52
    53

    Web服務(wù)定義語言(Web Services Definition Language,WSDL)是一個建議性標(biāo)準(zhǔn),用于描 述Web服務(wù)的技術(shù)調(diào)用語法。WSDL定義了一套基于 XML的語法,將Web服務(wù)描述為能夠進行消息交換的服務(wù)訪問點的集合,從而滿足了這種需求。WSDL服務(wù)定義為分布式系統(tǒng)提供了可機器識別的SDK文檔,并且可用于描述自動執(zhí)行應(yīng)用程序通信中所涉及的細(xì)節(jié)。WSDL的當(dāng)前版本是1.1,規(guī)范可以從http://www.w3.org/TR/wsdl獲得。

      WSDL就是描述XMLWeb服務(wù)的標(biāo)準(zhǔn)XML格式,WSDL由Ariba、Intel、IBM微軟等開發(fā)商提出。它用一種和具體語言無關(guān)的抽象方式定義了給定Web服務(wù)收發(fā)的有關(guān)操作和消息。就其定義來說,你還不能把WSDL當(dāng)作一種對象接 口定義語言,例如,CORBA或COM等應(yīng)用程序體系結(jié)構(gòu)就會用到對象接口定義語言。 WSDL保持協(xié)議中立,但它確實內(nèi)建了綁定SOAP的支持,從而同SOAP建立了不可分割的聯(lián)系。

      WSDL服務(wù)描述是一個XML文檔,它與WSDL模式(schema)的定義一致。WSDL文檔并不是完整的服務(wù)描述,而只包括了服務(wù)描述任務(wù)的較低層次,即:服務(wù)接口的原始技術(shù)描述。WSDL是Web服務(wù)的接口定義語言IDL(Interface Definition Language,),本質(zhì)上,WSDL描述說明的是Web服務(wù)的以下三個基本屬性:

      服務(wù)做些什么--服務(wù)所提供的操作(方法)。
      如何訪問服務(wù)--數(shù)據(jù)格式詳情以及訪問服務(wù)操作的必要協(xié)議。
      服務(wù)位于何處--由特定協(xié)議決定的網(wǎng)絡(luò)地址,如URL。

    1、WSDL信息模型

      WSDL信息模型充分利用了抽象規(guī)范與規(guī)范具體實現(xiàn)的分離,也就是分離了服務(wù)接口定義(抽象接口)與服務(wù)實現(xiàn)定義(具體端點)。 抽象接口規(guī)范描述了終端的處理能力,它在WSDL中表示為portType。束定機制 (binding mechanism)在WSDL中表示為binding元素,它使用特定的通信協(xié)議、數(shù)據(jù)編碼模型和底層通信協(xié)議,將Web服務(wù)的抽象定義映射至特定實現(xiàn)。若束定結(jié)合了實現(xiàn)的訪問地址,抽象端點也就成為可供服務(wù)請求者調(diào)用的具體端點(concrete endpoint),WSDL的port元素表示了這一結(jié)合。

      抽象接口可以支持任何數(shù)量的操作(operations)。操作是由一組消息(messages)定義,消息定義了操作的交互定式。與抽象的消息、操作概念相對應(yīng)的具體實現(xiàn)是由binding元素指定。與XML應(yīng)用相同,WSDL模式定義了幾個高層元素,或稱為主要元素。在WSDL中,Web服務(wù)描述中的主要元素如下:

      Types,定義了Web服務(wù)使用的所有數(shù)據(jù)類型集合,可被元素的各消息部件所引用。它使用某種類型系統(tǒng)(一般地使用XMLSchema中的類型系統(tǒng))。
      Message,通信消息數(shù)據(jù)結(jié)構(gòu)的抽象類型化定義。使用Types所定義的類型來定義整個消息的數(shù)據(jù)結(jié)構(gòu)。
      Operation,對服務(wù)中所支持操作的抽象描述。一般單個Operation描述了一個訪問入口的請求/響應(yīng)消息對。
      PortType,對于某個訪問入口點類型所支持操作的抽象集合。這些操作可以由一個或多個服務(wù)訪問點來支持。
      Binding,包含了如何將抽象接口的元素(portType)轉(zhuǎn)變?yōu)榫唧w表示的細(xì)節(jié),具體表示也就是指特定的數(shù)據(jù)格式和協(xié)議的結(jié)合;特定端口類型的具體協(xié)議和數(shù)據(jù)格式規(guī)范的綁定。
      Port,定義為協(xié)議/數(shù)據(jù)格式綁定與具體Web訪問地址組合的單個服務(wù)訪問點。
      Service,這是一個粗糙命名的元素,代表端口的集合;相關(guān)服務(wù)訪問點的集合。

      因此,portType(與message和type元素的細(xì)節(jié)相結(jié)合)描述了Web服務(wù)是什么,binding元素描述了如何使用Web服務(wù),port及service元素描述了Web服務(wù)的位置。
    2、WSDL對象結(jié)構(gòu)圖

      從圖2所示的WSDL對象結(jié)構(gòu)圖可知,一個WSDL文檔中可以包含一個Types,多個Message、PortType、Binding和Service。


    ?

      其中,Types是一個數(shù)據(jù)類型定義的容器,包含了所有在消息定義中需要的XML元素的類型定義。

      Message具體定義了在通信中使用的消息的數(shù)據(jù)結(jié)構(gòu),Message元素包含了一組Part元素,每個Part元素都是最終消息的一個組成部分,每個Part都會引用一個DataType來表示它的結(jié)構(gòu)。Part元素不支持嵌套(可以使用DataType來完成這方面的需要),都是并列出現(xiàn)。

      PortType具體定義了一種服務(wù)訪問入口的類型(傳入/傳出消息的模式及其格式),一個PortType可以包含若干個Operation,而一個Operation則是指訪問入口支持的一種類型的調(diào)用。在WSDL里面支持四種訪問入口調(diào)用的模式:1) 單請求; 2) 單響應(yīng); 3) 請求/響應(yīng); 4) 響應(yīng)/請求。在這里請求指的是從客戶端到Web服務(wù)端,而響應(yīng)指的是從Web服務(wù)端到客戶端。PortType的定義中會引用消息定義部分的一個到兩個消息,作為請求或響應(yīng)消息的格式。

      Service描述的是一個具體的被部署的Web服務(wù)所提供的所有訪問入口的部署細(xì)節(jié),一個Service往往會包含多個服務(wù)訪問入口,而每個訪問入口都會使用一個Port元素來描述。

      Port描述的是一個服務(wù)訪問入口的部署細(xì)節(jié),包括通過哪個Web地址(URL)來訪問,應(yīng)當(dāng)使用怎樣的消息調(diào)用模式來訪問等。其中消息調(diào)用模式則是使用Binding結(jié)構(gòu)來表示。

      Binding結(jié)構(gòu)定義了某個PortType與某一種具體的網(wǎng)絡(luò)傳輸協(xié)議或消息傳輸協(xié)議相綁定,從這一層次開始,描述的內(nèi)容就與具體服務(wù)的部署相關(guān)了。比如可以將PortType與SOAP/HTTP綁定,也可以將PortType與MIME/SMTP相綁定等。


    ?


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 麻豆va在线精品免费播放| 亚洲av不卡一区二区三区| 免费观看在线禁片| 久久精品国产69国产精品亚洲| 69式国产真人免费视频| 精品亚洲456在线播放| 亚洲乱码无码永久不卡在线| 拍拍拍又黄又爽无挡视频免费| 亚洲另类自拍丝袜第五页| 国产一区二区三区在线观看免费 | 久久亚洲日韩看片无码| 国产又大又长又粗又硬的免费视频 | 成人免费黄色网址| 久久久久国色AV免费观看| 亚洲成a人片在线观看中文动漫| 国产免费一区二区三区VR| 四虎免费影院ww4164h| 亚洲AV永久无码精品一福利| 少妇中文字幕乱码亚洲影视| 18禁超污无遮挡无码免费网站国产| 水蜜桃视频在线观看免费播放高清 | 一级特黄色毛片免费看| 自拍偷区亚洲国内自拍| 中文字幕亚洲综合久久| 精品亚洲一区二区| 中文字幕在线亚洲精品 | 亚洲高清免费在线观看| 在线观看亚洲av每日更新| 国产又大又长又粗又硬的免费视频| 免费毛片a在线观看67194 | 热99re久久免费视精品频软件 | xxxx日本免费| 91精品国产免费| 日韩精品在线免费观看| 国产精品亚洲片夜色在线| 久久精品国产精品亚洲下载| 国产一级高清视频免费看| 免费鲁丝片一级观看| 性色av无码免费一区二区三区| 国产无人区码卡二卡三卡免费 | 女人被弄到高潮的免费视频|