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

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

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

    使用CXF來發布WebService

            Apache CXF提供方便的Spring整合方法,可以通過注解、Spring標簽式配置來暴露Web Services和消費Web Services。

            @WebService和@WebMethod是WSDL映射Annotation.這些Annotation將描述Web Service的WSDL文檔元素和JAVA源代碼聯系在一起。@SOAPBinding是一個綁定的annotation,用來說明網絡協議和格式

            1、@WebService annotation的元素name,serviceName和targetNamespace成員用來描述wsdl:protType,wsdl:service,和targetNameSpace生成WebService中的WSDL文件。

            2、@SOAPBinding是一個用來描述SOAP格式和RPC的協議的綁定Annotation.

           3、@WebMethod Annotation的operationName成員描述了wsdl:operation,而且它的操作描述了WSDL文件中的SOAPAction頭部,這是客戶端必須要放入到SOAPHeader中的數值,SOAP1.1中的一種約束。

            4、@WebParam Annotation的partName成員描述了WSDL文檔中的wsdl:part.

            5、@WebResult Annotation的partName成員描述了wsdl:part用來返回WSDL文檔的值。

            接下來通過一個實例來講解CXF的使用方法。

            首先請下載最新版本的CXF下載地址是http://cxf.apache.org/

             下載好了cxf后請設置好CXF_HOME的路徑和JAVA_HOME一樣,并在path中加入路徑,進入cmd后直接輸入cxf version可以看見版本號代表設置成功

            在eclipse中新建一個web項目,開始我們的CXF之旅吧

            在web項目中,個人感覺web.xml是骨架,是提綱,是一切之根本,所以請打開這個文件吧,在這里將加入我們的CXF的Servlet

     1    <!-- Spring ApplicationContext配置文件的路徑,可使用通配符,多個路徑用,號分隔
     2        此參數用于后面的Spring Context Loader -->
     3    <context-param>
     4        <param-name>contextConfigLocation</param-name>
     5        <param-value>classpath*:spring/applicationContext*.xml</param-value>
     6    </context-param>
     7
     8    <!--Spring ApplicationContext 載入 -->
     9    <listener>
    10        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    11    </listener>
    12    <!-- Spring 刷新Introspector防止內存泄露 -->
    13    <listener>
    14        <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
    15    </listener>
    16
    17    <!-- CXF 配置 -->
    18    <servlet>
    19        <servlet-name>CXFServlet</servlet-name>
    20        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
    21    </servlet>
    22    <servlet-mapping>
    23        <servlet-name>CXFServlet</servlet-name>
    24        <url-pattern>/ws/*</url-pattern>
    25    </servlet-mapping>

     

            在WEB-INF/lib中加入CXF的jar包。

            在src/spring/中添加applicationContext-webservice.xml

            內容如下

     1<?xml version="1.0" encoding="UTF-8"?>
     2<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     3    xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:cxf="http://cxf.apache.org/core"
     4    xsi:schemaLocation="http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
     5    default-lazy-init="true">
     6
     7    <description>Apache CXF的Web Service配置</description>
     8
     9    <import resource="classpath:META-INF/cxf/cxf.xml" />
    10    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
    11    <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
    12
    13    <!-- jax-ws endpoint定義  -->
    14    <jaxws:endpoint address="/tracedatasender"><!-- 你的webservice訪問路徑  -->
    15        <jaxws:implementor ref="traceDataSenderService" /><!--你要發布的service-->
    16    </jaxws:endpoint>
    17
    18    <!-- WebService的實現Bean定義 -->
    19    <bean id="traceDataSenderService" class="com.xxx.ws.impl.TraceDataSenderImpl" />
    20
    21
    22</beans>

            對于CXF來說返回的結果是不支持集合的,如果你想返回集合,你必須要在包裝一次,只能返回一個對象,里面可以有集合屬性,這個太不好了。

            好了,我們接下來只要實現我們的Service就好了我們去看看com.xxx.ws.impl.TraceDataSenderImpl吧

           

     1/**
     2  2        大家請看聲明的定義
     3  3         serviceName聲明了service的名稱
     4  4         portName聲明了端口名稱
     5  5         endpointInterface聲明了接口ITraceDataSender
     6  6         targetNamespace聲明了訪問根路徑
     7  7         實現的方法很簡單就是插入數據到數據庫中
     8  8         數據是TraceData 
     9  9*/

    10 10@WebService(serviceName = "TraceDataSenderService", portName = "TraceDataSenderServicePort", endpointInterface = "com.xxx.ws.ITraceDataSender", targetNamespace = "http://localhost:8080/tracesender")
    11 11public class TraceDataSenderImpl implements ITraceDataSender {
    12 12public final String TASK_ID="2000001";
    13 13    public void addTraceDate(TraceData traceData) {
    14 14        // TODO Auto-generated method stub
    15 15        MyDBAccess dba = new MyDBAccess();
    16 16        dba.open();
    17 17        String tbn = "data_daily_"+this.getNow("yyyyMMdd");
    18 18        
    19 19         dba.update("INSERT INTO `"+tbn+"`(task_id,srcobject,destiobject," +
    20 20                "instance,stringvalue,ts,min,comment) VALUES("+TASK_ID+",'"+traceData.getArea()+
    21 21                "','"+traceData.getDestdesc()+"','"+traceData.getSrcFlag()+"','"+
    22 22                traceData.getDest()+"','"+traceData.getTs()+"',"+traceData.getIsReach()+
    23 23                ",'"+traceData.getTraceips()+"')");
    24 24        AddTraceResult result = new AddTraceResult();
    25 25        result.setSuccess(success);
    26 26        dba.close();
    28 28    }

    29 29}

     

            涉及接口包括ITraceDataSender和數據TraceData,請看ITraceDataSender

    11/** *//**
    22 在這里定義好service的方法并聲明webservice相關信息
    33*/

    44@WebService(name = "TraceDataSenderService", targetNamespace = "http://localhost:8080/trancesender")
    55public interface ITraceDataSender {
    66 public AddTraceResult addTraceDate(TraceData traceData);
    77}

            接下來是TraceData

     1
     2
     3import javax.xml.bind.annotation.XmlType;
     4
     5@XmlType(name = "TraceData", namespace = "http://localhost:8080/tracesender")
     6public class TraceData {
     7    String area;        
     8    String srcFlag;
     9    String dest;
    10    String destdesc;
    11    String traceips;
    12    String ts;
    13    String isReach;
    14    /**
    15     * 區域-運營商 對應srcobject
    16     * @return
    17     */

    18    public String getArea() {
    19        return area;
    20    }

    21    public void setArea(String area) {
    22        this.area = area;
    23    }

    24    /**
    25     * 運營商標記 對應instance
    26     * @return
    27     */

    28    public String getSrcFlag() {
    29        return srcFlag;
    30    }

    31    public void setSrcFlag(String srcFlag) {
    32        this.srcFlag = srcFlag;
    33    }

    34    /**
    35     * 目的地域名對應stringvalue
    36     * @return
    37     */

    38    public String getDest() {
    39        return dest;
    40    }

    41    public void setDest(String dest) {
    42        this.dest = dest;
    43    }

    44    /**
    45     * 目的地中文描述destobject
    46     * @return
    47     */

    48    public String getDestdesc() {
    49        return destdesc;
    50    }

    51    public void setDestdesc(String destdesc) {
    52        this.destdesc = destdesc;
    53    }

    54    /**
    55     * Trace IP列表格式ip地址(時間),ip地址(時間)
    56     * @return
    57     */

    58    public String getTraceips() {
    59        return traceips;
    60    }

    61    public void setTraceips(String traceips) {
    62        this.traceips = traceips;
    63    }

    64    /**
    65     * 測試時間對應ts格式yyyy-MM-dd HH:mm:ss
    66     * @return
    67     */

    68    public String getTs() {
    69        return ts;
    70    }

    71    public void setTs(String ts) {
    72        this.ts = ts;
    73    }

    74    /**
    75     * 是否可達對應min
    76     * @return
    77     */

    78    public String getIsReach() {
    79        return isReach;
    80    }

    81    public void setIsReach(String isReach) {
    82        this.isReach = isReach;
    83    }

    84    
    85
    86    
    87}

            一個最簡單的webservice就可以發布了,啟動tomcat訪問http://localhost:8080/trancesender/ws/就能看到相關信息了,客戶端可以由CXF提供的工具自動生成。

     

            打開命令行輸入如下信息 wsdl2java.bat -client -b build-client-binding.xml -exsh true http://localhost:8080/tracesender/ws/tracedatasender?wsdl 請確保你有了build-client-binding.xml 這個文件,此文件內容如下

    1<jaxws:bindings wsdlLocation="http://localhost:8080/tracesender/ws/tracedatasender?wsdl"
    2          xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
    3          xmlns:xs="http://www.w3.org/2001/XMLSchema"
    4          xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
    5          xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    6  <jaxws:bindings  node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='http://localhost:8080/tracesender']">
    7  </jaxws:bindings>
    8</jaxws:bindings>

     

     




    posted on 2011-04-09 13:18 Cloud kensin 閱讀(3715) 評論(0)  編輯  收藏 所屬分類: Java

    <2011年4月>
    272829303112
    3456789
    10111213141516
    17181920212223
    24252627282930
    1234567

    導航

    統計

    常用鏈接

    留言簿(4)

    隨筆分類

    相冊

    相冊

    搜索

    最新評論

    主站蜘蛛池模板: 亚洲国产午夜电影在线入口| 小说区亚洲自拍另类| 免费黄色一级毛片| 一级成人a做片免费| 亚洲视频手机在线| 免费乱理伦在线播放| 亚洲美女在线国产| 91精品国产免费网站| 精品在线视频免费| 亚洲综合激情六月婷婷在线观看| 成人免费无毒在线观看网站| 国产在线播放线91免费| 亚洲日韩一中文字暮| 久久精品国产精品亚洲艾 | 免费看国产一级片| 无码人妻丰满熟妇区免费| 亚洲AV无码AV日韩AV网站| 亚洲an天堂an在线观看| 免费观看国产小粉嫩喷水| 中文字幕成人免费视频| jizz免费在线观看| 亚洲熟妇AV日韩熟妇在线| 亚洲AV无码久久精品成人| 免费在线观看理论片| 青青视频观看免费99| a毛片视频免费观看影院| 色偷偷亚洲男人天堂| 亚洲同性男gay网站在线观看| 亚洲综合网站色欲色欲| 国产精品视频免费一区二区三区| 久久国产色AV免费看| 亚欧洲精品在线视频免费观看 | 亚洲一区免费观看| 丁香六月婷婷精品免费观看| 亚洲黄页网在线观看| 97se亚洲综合在线| 亚洲第一AAAAA片| 鲁丝片一区二区三区免费| 精品无码一区二区三区亚洲桃色 | 亚洲情侣偷拍精品| 免费看美女被靠到爽的视频|