學習園地

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            3 Posts :: 14 Stories :: 0 Comments :: 0 Trackbacks

          使用 CXF 做 webservice 簡單例子

            Apache CXF 是一個開放源代碼框架,提供了用于方便地構建和開發 Web 服務的可靠基礎架構。它允許創建高性能和可擴展的服務,您可以將這樣的服務部署在 Tomcat 和基于 Spring 的輕量級容器中,以及部署在更高級的服務器上,例如 Jboss、IBM® WebSphere® 或 BEA WebLogic。

           

                 該框架提供了以下功能:

          • Web 服務標準支持:CXF 支持以下 Web 服務標準:
            • Java API for XML Web Services (JAX-WS)
            • SOAP
            • Web 服務描述語言(Web Services Description Language ,WSDL)
            • 消息傳輸優化機制(Message Transmission Optimization Mechanism,MTOM)
            • WS-Basic Profile
            • WS-Addressing
            • WS-Policy
            • WS-ReliableMessaging
            • WS-Security
          • 前端建模:CXF 提供了前端建模的概念,允許您使用不同的前端 API 來創建 Web 服務。API 允許您使用簡單的工廠 Bean 并通過 JAX-WAS 實現來創建 Web 服務。它還允許您創建動態 Web 服務客戶端。
          • 工具支持:CXF 提供了用于在 Java Bean、Web 服務和 WSDL 之間進行轉換的不同工具。它提供了對 Maven 和 Ant 集成的支持,并無縫地支持 Spring 集成。
          • RESTful 服務支持:CXF 支持代表性狀態傳輸(Representational State Transfer,RESTful )服務的概念,并支持 Java 平臺的 JAX-RS 實現。(本系列的第 2 部分將提供有關 RESTful 服務的更多信息。)
          • 對不同傳輸和綁定的支持:CXF 支持不同種類的傳輸,從 XML 到逗號分隔值 (CSV)。除了支持 SOAP 和 HTTP 協議綁定之外,它還支持 Java Architecture for XML Binding (JAXB) 和 AEGIS 數據綁定。
          • 對非 XML 綁定的支持:CXF 支持非 XML 綁定,例如 JavaScript Object Notation (JSON) 和 Common Object Request Broker Architecture (CORBA)。它還支持 Java 業務集成(Java Business Integration,JBI)體系架構和服務組件體系架構(Service Component Architecture,SCA)。
          • code first 或者 xml first  : 支持使用code first 或者 xml first 的方式來創建web服務。

                 一  借助 annotation 創建獨立啟動的web 服務。

           

                 準備: 新建工程 導入需要的jar 包:

                            

                            依賴的包:

                                      commons-logging-1.1.jar
                                      geronimo-activation_1.1_spec-1.0-M1.jar (or Sun's Activation jar)
                                      geronimo-annotation_1.0_spec-1.1.jar (JSR 250)
                                      geronimo-javamail_1.4_spec-1.0-M1.jar (or Sun's JavaMail jar)
                                      geronimo-servlet_2.5_spec-1.1-M1.jar (or Sun's Servlet jar)
                                      geronimo-ws-metadata_2.0_spec-1.1.1.jar (JSR 181)
                                      jaxb-api-2.1.jar
                                      jaxb-impl-2.1.6.jar
                                      jaxws-api-2.1.jar
                                      jetty-6.1.5.jar
                                      jetty-util-6.1.5.jar
                                      neethi-2.0.jar
                                      saaj-api-1.3.jar
                                      saaj-impl-1.3.jar
                                      stax-api-1.0.1.jar
                                      wsdl4j-1.6.1.jar
                                      wstx-asl-3.2.1.jar
                                      XmlSchema-1.2.jar
                                      xml-resolver-1.2.jar     

           

                            spring jar 包, 用來支持xml配置:

                                      aopalliance-1.0.jar
                                      spring-core-2.0.4.jar
                                      spring-beans-2.0.4.jar
                                      spring-context-2.0.4.jar
                                      spring-web-2.0.4.jar

                            

                             CXF jar包:

                                      cxf-2.1.jar

             

                   以上jar 包 可從apache官方網站下載 apache-cxf-2.1.2.zip, 然后從apache-cxf-2.1.2/lib 目錄中獲得

           

                1  首先服務點接口。

                    package com.demo;

           

                    import java.util.List;

                    import javax.jws.WebParam;
                    import javax.jws.WebService;
                   

                    @WebService
                    public interface HelloWorld {
                         String sayHi(@WebParam(name="text")String text);
                         String sayHiToUser(User user);
                         String[] SayHiToUserList(List<User> userList);
                     }

           

               2  編寫服務實現

                   package com.demo;

                   import java.util.LinkedHashMap;
                   import java.util.List;
                   import java.util.Map;

                   import javax.jws.WebService;

           

                   @WebService(endpointInterface="com.demo.HelloWorld",serviceName="HelloWorld")
                   public class HelloWorldImpl implements HelloWorld {
           
                              Map<Integer, User> users = new LinkedHashMap<Integer, User>();

           
                              public String sayHi(String text) {
                                          return "Hello " + text;
                             }

           

                             public String sayHiToUser(User user) {
                                       users.put(users.size()+1, user);
                                       return "Hello "+ user.getName();
                             }

                             public String[] SayHiToUserList(List<User> userList) {
                                       String[] result = new String[userList.size()];
                                       int i=0;
                                       for(User u:userList){
                                            result[i] = "Hello " + u.getName();
                                            i++;
                                       }
                               return result;
                             }
                 }

           

            3  編寫 webServiceApp.java類來暴露 web服務。

                package com.demo;

                import javax.xml.ws.Endpoint;

           

                public class webServiceApp {
                           public static void main(String[] args) {
                                     System.out.println("web service start");
                                     HelloWorldImpl implementor= new HelloWorldImpl();
                                     String address="
          http://localhost:8080/helloWorld";
                                     Endpoint.publish(address, implementor);
                                     System.out.println("web service started");
                            }
                }

           4  run webServiceApp.java 類來啟動服務。 訪問 http://localhost:8080/helloWorld?wsdl  查看是否顯示

               wsdl。

            

           5  編寫客戶端訪問服務。

               package com.demo;

               import java.util.ArrayList;
               import java.util.List;

               import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
               import org.springframework.context.support.ClassPathXmlApplicationContext;

           

               public class HelloWorldClient {
                        public static void main(String[] args) {
                                  JaxWsProxyFactoryBean svr = new JaxWsProxyFactoryBean();
                                  svr.setServiceClass(HelloWorld.class);
                                  svr.setAddress("
          http://localhost:8080/helloWorld");
                                  HelloWorld hw = (HelloWorld) svr.create();
                                  User user = new User();
                                  user.setName("Tony");
                                  user.setDescription("test");
                                  System.out.println(hw.sayHiToUser(user));
                        }
               }

           

           

           

            6  測試: run webServiceApp.java 類來啟動服務,然后 run HelloWorldClient.java 來訪問服務。

           

            二 集成到spring 中。

            

            1 在 web.xml 中加入 :

           

                 <?xml version="1.0" encoding="UTF-8"?>
                 <web-app>
                          <welcome-file-list>
                                   <welcome-file>index.jsp</welcome-file>
                          </welcome-file-list>


                          <context-param>
                                    <param-name>contextConfigLocation</param-name>
                                    <param-value>WEB-INF/classes/applicationContext.xml</param-value>
                           </context-param>
           
                        <listener>
                                <listener-class>
                                        org.springframework.web.context.ContextLoaderListener
                                </listener-class>
                        </listener>

           

                        <servlet>
                               <servlet-name>CXFServlet</servlet-name>
                               <display-name>CXFServlet</display-name>
                               <servlet-class>
                                      org.apache.cxf.transport.servlet.CXFServlet
                               </servlet-class>
                               <load-on-startup>1</load-on-startup>
                         </servlet>

                         <servlet-mapping>
                                <servlet-name>CXFServlet</servlet-name>
                                <url-pattern>/webservice/*</url-pattern>
                         </servlet-mapping>
                   </web-app>

           

          2  在 applicationContext.xml 中加入:

              <?xml version="1.0" encoding="UTF-8"?>
              <beans xmlns="
                           xmlns:xsi="                 xmlns:jaxws="                 xsi:schemaLocation="
                                 
          http://www.springframework.org/schema/beans

                                 http://www.springframework.org/schema/beans/spring-beans.xsd
                                 http://cxf.apache.org/jaxws  
                          <import resource="classpath:META-INF/cxf/cxf.xml"/>
                          <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
                          <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
           
                           <jaxws:endpoint 
                                        id="helloWorld"
                                        implementor="com.demo.HelloWorldImpl"
                                        address="/helloWorld" />
             
                          <bean id="client" class="com.demo.HelloWorld"
                                     factory-bean="clientFactory" factory-method="create"/>
              
                           <bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
                                      <property name="serviceClass" value="com.demo.HelloWorld"/>
                                      <property name="address"

                                                        value="http://localhost:8080/s/webservice/helloWorld"/>
                            </bean>
               </beans>

           

              注意: 這里需要加入  xmlns:jaxws="

                        http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd

           

            3  修改客戶端。

                package com.demo;

               import java.util.ArrayList;
               import java.util.List;

               import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
               import org.springframework.context.support.ClassPathXmlApplicationContext;

           

               public class HelloWorldClient {
                        public static void main(String[] args) {
                              
              HelloWorld client = (HelloWorld)context.getBean("client");
                                  User user1 = new User();
                                  user1.setName("Tony");
                                  user1.setDescription("test");
                                  User user2 = new User();
                                  user2.setName("freeman");
                                  user2.setDescription("test");
                                  List<User> userList= new ArrayList<User>();
                                  userList.add(user1);
                                  userList.add(user2);
                                  String[] res = client.SayHiToUserList(userList);
                                  System.out.println(res[0]);
                                  System.out.println(res[1]);          

                        }
               }

           

            4  發布工程 啟動web服務器(我用 tomcat 6)。

           

            5 訪問 http://localhost:8080/s/webservice/helloWorld?wsdl  查看是否顯示 wsdl 。

           

            6  run run HelloWorldClient.java 來訪問服務。
          posted on 2014-03-26 15:37 丘比特 閱讀(110) 評論(0)  編輯  收藏

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


          網站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 清流县| 九龙县| 元江| 三门县| 平潭县| 宜宾县| 南充市| 潞西市| 洪洞县| 施甸县| 上栗县| 攀枝花市| 洞口县| 吉木乃县| 梁山县| 永登县| 兴城市| 彰化市| 会同县| 清苑县| 无为县| 铁力市| 河源市| 彩票| 屯昌县| 固始县| 仁寿县| 太康县| 精河县| 阳原县| 平阳县| 山阳县| 清新县| 长垣县| 临猗县| 陕西省| 论坛| 常州市| 尼勒克县| 滨海县| 冷水江市|