熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

使用cxf寫web service的簡單實例

2013-11-23 18:50:05  來源: Java核心技術 
實例步驟
   
    第一步在myeclipse中新建一個web項目名為webservicetest並導入依賴的jar包(cxfspringapachecommons相關)
   
    commonsloggingjar
   
    cxfjar
   
    geronimojaxws__specjar
   
    geronimowsmetadata__specjar
   
    neethijar
   
    cxf結合spring時所需jar包此例子也需要這些用到了spring上下文加載
   
    springasmRELEASEjar
   
    springbeansRELEASEjar
   
    springcontextRELEASEjar
   
    springcoreRELEASEjar
   
    springexpressionRELEASEjar
   
    springaopRELEASEjar
   
    springwebRELEASEjar
   
    xmlschemacorejar
   
    jaxbapijar
   
    wsdljjar
   
    jsr_apijar
   
    commonannotationsjar
   
    jaxbimpljar
   
    staxapijar
   
    wstxasljar
   
    jettyutilvjar
   
    jettycontinuationvjar
   
    jetty
   
    jettyiovjar
   
    jettysecurityvjar
   
    jettyservervjar
   
    @WebService和@WebMethod是WSDL映射Annotation這些Annotation將描述Web Service的WSDL文檔元素和JAVA源代碼聯系在一起
   
    @WebService annotation的元素nameserviceName和targetNamespace成員用來描述wsdl:protTypewsdl:service和targetNameSpace生成WebService中的WSDL文件
    


    @SOAPBinding是一個綁定的annotation用來說明網絡協議和格式
   
    @SOAPBinding是一個用來描述SOAP格式和RPC的協議的綁定Annotation
   
    @WebMethod Annotation的operationName成員描述了wsdl:operation而且它的操作描述了WSDL文件中的SOAPAction頭部這是客戶端必須要放入到SOAPHeader中的數值SOAP中的一種約束
   
    @WebParam Annotation的partName成員描述了WSDL文檔中的wsdl:part
   
    @WebResult Annotation的partName成員描述了wsdl:part用來返回WSDL文檔的值
   
    第二步創建webservice接口及實現類(下面為Java代碼)
   
    創建HelloWorld接口
   
    View Code
   
    @WebServicepublic interface HelloWorld {
   
    @WebMethod
   
    String sayHi(@WebParam(name=text)String text)
   
    @WebMethod
   
    String sayHiToUser(User user)
   
    @WebMethod
   
    String[] SayHiToUserList(List<User> userList)}
   
    第三步創建HelloWorldImpl實現類
   
    View Code
   
    @WebService(endpointInterface = demospringserviceHelloWorld serviceName = HelloWorld)//endpointInterface表示該類就必須實現此接口所有方法serviceName表示webservice的服務名稱public class HelloWorldImpl implements HelloWorld {
   
    Map<Integer User> users = new LinkedHashMap<Integer User>()
   
    @WebMethod
   
    public String sayHi(String text) {
   
    return Hello + text;
   
    }
   
    @WebMethod
   
    public String sayHiToUser(User user) {
   
    usersput(userssize() + user)
   
    return Hello + usergetName()
   
    }
   
    @WebMethod
   
    public String[] SayHiToUserList(List<User> userList) {
   
    String[] result = new String[userListsize()];
   
    int i = ;
   
    for (User u : userList) {
   
    result[i] = Hello + ugetName()
   
    i++;
   
    }
   
    return result;
   
    }}
   


    第四步啟動webserviceAppjava訪//localhost:/helloWorld?WSDL
   
    View Code
   
    public class WebServiceApp {
   
    public static void main(String[] args) {
   
    Systemoutprintln(web service start
   
    HelloWorldImpl implementor= new HelloWorldImpl()
   
    String address=//localhost:/helloWorld;
   
    Endpointpublish(address implementor)
   
    Systemoutprintln(web service started
   
    }}
   
    第五步在webxml中加入cxf相應配置內容如下
   
    View Code
   
    <!cxf start>  <!用於加載applicationContextxml配置信息>
   
    <contextparam>
   
    <paramname>contextConfigLocation</paramname>
   
    <paramvalue>WEBINF/classes/applicationContextxml</paramvalue>
   
    </contextparam>
   
    <!使用spring ContextLoaderListener 加載applicationContextxml>
   
    <listener>
   
    <listenerclass>orgsprntextContextLoaderListener</listenerclass>
   
    </listener>  <!配置CXFServlet>
   
    <servlet>
   
    <servletname>CXFServlet</servletname>
   
    <displayname>CXF Servlet</displayname>
   
    <servletclass>orgapachecxftransportservletCXFServlet</servletclass>
   
    <loadonstartup></loadonstartup>
   
    </servlet>
   
    <servletmapping>
   
    <servletname>CXFServlet</servletname>
   
    <! url可自定義配置用於CXFServlet請求地址攔截訪問會用到 >
   
    <urlpattern>/webservice/*</urlpattern>
   
    </servletmapping>  <!cxf end >
   
    第六步在src中創建基本的applicationContextxml內容如下(作用主要做webservice接口屬性配置通過webxml配置加載)
   
    View Code
   
    <?xml version= encoding=UTF?><beans xmlns=
   
    xmlns:xsi=instance
   
    xmlns:jaxws=
   
    xsi:schemaLocation=
   
   
   
    beansxsd
   
    >
   
    <import resource=classpath:METAINF/cxf/cxfxml />
   
    <import resource=classpath:METAINF/cxf/cxfextensionsoapxml />
   
    <import resource=classpath:METAINF/cxf/cxfservletxml /><!id:名稱(隨意配)implementor:指定接口具體實現類address:隨意配>
   
    <jaxws:endpoint id=helloWorld
   
    implementor=demospringserviceHelloWorldImpl
   
    address=/HelloWorld /> <! WebService 客戶端 spring 配置文件cxf與Spring集成cxf裡提供了一個工廠類orgapachecxfjaxwsJaxWsProxyFactoryBean可以方便實現的調用WebServiceserviceClass屬性是接口類address是webService的路徑在其他bean裡如果要調用webservice只要將client這個bean注入到需要使用的bean裡>
   
    <bean id=client class=demospringserviceHelloWorld
   
    factorybean=clientFactory factorymethod=create />
   
    <bean id=clientFactory
   
    class=orgapachecxfjaxwsJaxWsProxyFactoryBean>
   
    <property name=serviceClass
   
    value=demospringserviceHelloWorld />
   
    <property name=address
   
    value=//localhost:/webservices/HelloWorld />
   
    </bean></beans>
   
    第七步發布webservice到tomcat
   
    Java代碼驗證WSDL是否發布成功
   
    如果項目發布放在/webapps/ROOT下時
   
    訪//IP地址端口/webservices/{applicationContentxml中配置的address}?wsdl
   
    //webservices對應webxml中的<urlpattern>/webservices/*</urlpattern>驗證是否能正常看到xml格式的頁面
   
    第八步測試
   
    View Code
   
    public class HelloWorldClient {
   
    public static void main(String[] args) {
   
    /**
   
    * 簡單的用ApplicationContext做測試的話獲得Spring中定義的Bean實例(對象)可以用以下方法
   
    * ClassPathXmlApplicationContext[只能讀放在webinfo/classes目錄下的配置文件]
   
    */
   
    ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { applicationContextxml })
   
    HelloWorld client = (HelloWorld) contextgetBean(client
   
    User user = new User()
   
    usersetName(Tony
   
    usersetDescription(test
   
    String str = clientsayHiToUser(user)
   
    Systemoutprintln(str)
   
    }}


From:http://tw.wingwit.com/Article/program/Java/hx/201311/25827.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.