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

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

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

    風行天下

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

    利用XFire開發一個簡單的WebService

    Posted on 2006-12-03 17:08 風太少 閱讀(1090) 評論(0)  編輯  收藏 所屬分類: java編程spring
    你將了解到如何將一個普通的java文件轉換為一個web服務,services.xml文件是如何定義的,如何發布這個web服務、如何獲得這個服務的WSDL。
    首先打開Eclipse,創建一個普通的java工程,將xfire所需的jar和xfire的jar加入到工程所需的類庫引用中。創建一個簡單的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>
    需要調用你自己的實現類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}
    ?
    實現類:
    ?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服務定義語言(Web Services Definition Language,WSDL)是一個建議性標準,用于描 述Web服務的技術調用語法。WSDL定義了一套基于 XML的語法,將Web服務描述為能夠進行消息交換的服務訪問點的集合,從而滿足了這種需求。WSDL服務定義為分布式系統提供了可機器識別的SDK文檔,并且可用于描述自動執行應用程序通信中所涉及的細節。WSDL的當前版本是1.1,規范可以從http://www.w3.org/TR/wsdl獲得。

      WSDL就是描述XMLWeb服務的標準XML格式,WSDL由Ariba、Intel、IBM微軟等開發商提出。它用一種和具體語言無關的抽象方式定義了給定Web服務收發的有關操作和消息。就其定義來說,你還不能把WSDL當作一種對象接 口定義語言,例如,CORBA或COM等應用程序體系結構就會用到對象接口定義語言。 WSDL保持協議中立,但它確實內建了綁定SOAP的支持,從而同SOAP建立了不可分割的聯系。

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

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

    1、WSDL信息模型

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

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

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

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

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


    ?

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

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

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

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

      Port描述的是一個服務訪問入口的部署細節,包括通過哪個Web地址(URL)來訪問,應當使用怎樣的消息調用模式來訪問等。其中消息調用模式則是使用Binding結構來表示。

      Binding結構定義了某個PortType與某一種具體的網絡傳輸協議或消息傳輸協議相綁定,從這一層次開始,描述的內容就與具體服務的部署相關了。比如可以將PortType與SOAP/HTTP綁定,也可以將PortType與MIME/SMTP相綁定等。


    ?


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


    網站導航:
     
    主站蜘蛛池模板: 久久夜色精品国产亚洲av| 日韩精品免费一级视频| 亚洲精品A在线观看| 亚洲AV无码国产一区二区三区| 理论亚洲区美一区二区三区 | www.亚洲一区| 国产黄色免费观看| 免费一级黄色毛片| 牛牛在线精品观看免费正| 免费国产怡红院在线观看| 国产亚洲午夜精品| 成人亚洲性情网站WWW在线观看| mm1313亚洲国产精品无码试看| 成年性生交大片免费看| 亚洲欧洲专线一区| 国产午夜免费秋霞影院| 国产成人麻豆亚洲综合无码精品| 亚洲欧美日韩综合俺去了| 国产精品免费一级在线观看| 精品特级一级毛片免费观看| 国产午夜亚洲不卡| 免费无码毛片一区二区APP| 亚洲一级片在线观看| 在线成人a毛片免费播放| 一个人看的免费高清视频日本| 亚洲电影日韩精品| 女人体1963午夜免费视频| va天堂va亚洲va影视中文字幕| 成人黄页网站免费观看大全| 免费无码国产在线观国内自拍中文字幕 | 又黄又爽的视频免费看| 99精品视频在线观看免费| 亚洲精品中文字幕乱码影院| 成年午夜视频免费观看视频| 一区二区三区免费视频播放器 | 色欲aⅴ亚洲情无码AV| 亚洲乱亚洲乱妇无码麻豆| jizz免费观看| 亚洲欧洲尹人香蕉综合| 免费jjzz在在线播放国产| 久久狠狠躁免费观看2020|