WebServiceベース入門CXF(WS+RS)

36295 ワード

一、基本的な紹介
Web Servicesは、ネットワーク上で標準化されたXMLメッセージングによってアクセスできる一連の動作を記述するソフトウェアインタフェースです.XML言語ベースのプロトコルを使用して、実行する操作または別のWebサービスと交換するデータを記述します.Web Servicesの多くは、特定のテクノロジーではなく標準であり、異なるプラットフォーム、言語の多くはWeb Servicesの開発を実現しています.Java分野では、Axis、xfire、CXFなど、Web Servicesのフレームワークが多い.
二、CXF基本紹介
Apache CXF=Celtix+XFire、Apache CXFの前身はApache CeltiXfireと呼ばれ、現在では正式にApache CXFと改称されており、以下CXFと略称する.CXFはCeltixとXFireの2つのオープンソースプロジェクトのエッセンスを継承し、JAX-WSの全面的なサポートを提供し、多くのBinding、DataBinding、Transportおよび各種Formatのサポートを提供し、実際のプロジェクトの必要に応じてコード優先(Code First)またはWSDL優先(WSDL First)を採用することができる.Webサービスのパブリケーションと使用を簡単に実現できます.Apache CXFはオープンソースのServicesフレームワークで、CXFはFrontendプログラミングAPIを使用してJAX-WSのようなServicesの構築と開発を支援します.これらのServicesは、SOAP、XML/HTTP、RESTful HTTP、CORBAなど、さまざまなプロトコルをサポートし、HTTP、JMS、JBIなど、さまざまな転送プロトコルで実行できます.CXFは、Servicesの作成を大幅に簡素化し、XFireの伝統を継承し、Springとシームレスに統合することができます.CXF WebServiceの開発は、主に2つのサービス提供方式WS、RSに分かれている.ここでは,この2つの方式の独立したパブリケーション方法とSpringと統合したパブリケーション方法をそれぞれ紹介する.
三、CXF-WS開発入門
1、JAX-WS独立サービス使用
JAX-WSはデータを伝送し、XML形式であり、SOAPプロトコルに基づいている.開発手順:
1.簡単なMavenプロジェクトを作成します.
2.次の構成により、重要座標依存性を導入します.

    4.0.0
    cn.leon.maven
    cxf_ws_first_application
    0.0.1-SNAPSHOT
    cxf_ws_first_application
         CXF-WS  java  
    

        
        
            org.apache.cxf
            cxf-rt-frontend-jaxws
            3.0.1
        

        
        
            org.apache.cxf
            cxf-rt-transports-http-jetty
            3.0.1
        

        
        
            org.slf4j
            slf4j-log4j12
            1.7.12
        
        
        
        
            javax.jws
            jsr181
            1.0
        
    

  • 最初の座標はcxfアプリケーションを開発するために使用され、2番目の座標は1つのサーバを構築し、独立してcxfアプリケーションを実行することができ、このサーバは独立したtomcaプラグインサーバに似ている.
  • の3番目の座標はログ出力のjar依存であり、この依存を設定すると、プロジェクトの実行中に詳細なデータ伝達のログ情報を印刷することができる.ただし、log 4 j.propertiesプロファイルをプロジェクトルートディレクトリにコピーすることは忘れられません.
  • 3.サービス・エンド・プログラムを作成し、エンティティー・クラスを作成します.
    Userケースエンティティークラス:
    package cn.leon.cxf.domain;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class User {
       private Integer id;
       private String username;
       private String city;
       private List cars = new ArrayList();
       
       public Integer getId() {
           return id;
       }
       public void setId(Integer id) {
           this.id = id;
       }
       public String getUsername() {
           return username;
       }
       public void setUsername(String username) {
           this.username = username;
       }
       public String getCity() {
           return city;
       }
       public void setCity(String city) {
           this.city = city;
       }
       public List getCars() {
           return cars;
       }
       public void setCars(List cars) {
           this.cars = cars;
       }
    }
    
    Carケースエンティティークラス:
    package cn.leon.cxf.domain;
    
    public class Car {
        private Integer id;
        private String name;
        private Double price;
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Double getPrice() {
            return price;
        }
        public void setPrice(Double price) {
            this.price = price;
        }
        @Override
        public String toString() {
            return "Car [id=" + id + ", name=" + name + ", price=" + price + "]";
        }
    }
    
    サービス側プログラム:サービスポートインタフェースプログラム、これは対外的に発表されたインタフェースで、必ず、具体的なコード業務の実現、その実現クラスが完成しなければならない.インタフェースコードは次のとおりです.
    package cn.leon.cxf.service;
    
    import java.util.List;
    
    import javax.jws.WebMethod;
    import javax.jws.WebService;
    
    import cn.leoncxf.domain.Car;
    import cn.leon.cxf.domain.User;
    
    /**
     *                 ,               。
     * @author lemon
     *
     */
    @WebService  //       ,     WebService       
    public interface IUserService {
        @WebMethod  //        ,       WebService       
        String sayHello(String name);
        @WebMethod
        List findCarByUser(User user);
    }
    
    注記:@WebService:クラスの上に使用され、タグクラスはWebServiceサービス提供オブジェクトです.@WebMethod:メソッドの上に使用します.タグメソッドはWebServiceサービス提供メソッドです.
    実装クラスコード実装:
    package cn.leon.cxf.service;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.jws.WebService;
    
    import cn.leon.cxf.domain.Car;
    import cn.leon.cxf.domain.User;
    
    @WebService(endpointInterface = "cn.itcast.cxf.service.IUserService", serviceName = "userService")
    //      endPointInterface         , servicename     
    public class UserServiceImpl implements IUserService {
    
        //        
        public String sayHello(String name) {
            return "Hello " + name;
        }
    
        //        
        public List findCarByUser(User user) {
            List list = null;
            if ("tom".equals(user.getUsername())) {
                list = new ArrayList();
                Car car = new Car();
                car.setId(1);
                car.setName("QQ  ");
                car.setPrice(10000D);
                list.add(car);
            }
            return list;
        }
    }
    
    注記パラメータの説明:endpointInterface:インタフェースサービスの完全なクラス名;ServiceName:サービス名.
    4.サービスパブリケーション、サービスパブリケーションコードの作成.
    package cn.leon.cxf.ws.server;
    
    import javax.xml.ws.Endpoint;
    import cn.itcast.cxf.service.IUserService;
    import cn.itcast.cxf.service.UserServiceImpl;
    
    /**
     *   CXF  UserService       
     * @author lemon
     *
     */
    public class WS_Server {
        public static void main(String[] args) {
            // 1.       
            IUserService userService = new UserServiceImpl();
            // 2.      
            String address = "http://localhost:9999/userService";
            // 3.    
            Endpoint.publish(address, userService);
            System.out.println("     ....");
        }
    }
    
    サービス・アドレス:http://localhost:9999/userService?wsdlブラウザ上でこのアドレスにアクセスし,データへのアクセスを実現できるが,ブラウザからパラメータを渡すことができないため,サービスに対するメソッドの呼び出しを完了できない.
    5.クライアントプログラムコードを作成し、通信を実現する.
    package cn.leon.cxf.ws.client;
    
    import java.util.List;
    
    import org.apache.cxf.interceptor.LoggingInInterceptor;
    import org.apache.cxf.interceptor.LoggingOutInterceptor;
    import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
    
    import cn.leon.cxf.domain.Car;
    import cn.leon.cxf.domain.User;
    import cn.leon.cxf.service.IUserService;
    
    public class WS_Client {
        public static void main(String[] args) {
            //      ,  WebService  
            JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
            jaxWsProxyFactoryBean.setAddress("http://localhost:9999/userService");
            jaxWsProxyFactoryBean.setServiceClass(IUserService.class);
            //       ,     
            jaxWsProxyFactoryBean.getInInterceptors().add(new LoggingInInterceptor());
            jaxWsProxyFactoryBean.getOutInterceptors().add(new LoggingOutInterceptor());
            //              
            IUserService proxy = (IUserService) jaxWsProxyFactoryBean.create();
            //            
            System.out.println(proxy.sayHello("ITCAST"));
            User user = new User();
            user.setUsername("tom");
            List cars = proxy.findCarByUser(user);
            for (Car car : cars) {
                System.out.println(car);
            }
        }
    }
    
    これは独立して発表されたJAX-WSの完全な流れであり、以下にまとめられる.
  • 関連依存、すなわち依存jarパケットを構成する.
  • は、データを伝達するキャリアであるエンティティクラスを記述する.
  • サービス側のインタフェースを記述する.
  • サービス側インタフェースの実装クラスを記述する.
  • サービスパブリケーションのアプリケーションを記述する.
  • は、サードパーティにアクセスパスを提供し、サードパーティがクライアントを記述してデータの通信を実現する.
  • JAX-WS原理分析:クライアントはjaxWsProxyFactoryBeanオブジェクトを作成します.これはサービス側実装クラスのエージェントオブジェクトの作成工場です.create()メソッドでサービス側実装クラスのエージェントオブジェクトを作成できます.このオブジェクトはインタフェースに@WebMethodを追加したメソッドをすべて呼び出すことができます.そのタイプはインタフェースのタイプです.サービス側実装クラスオブジェクトの兄弟オブジェクトに相当し、完全なWebサービスアプリケーションが完了します.
    2、JAX-WSとSpringを統合してWebサービスを開発する
    第一歩:tomcatに基づいてサービスを公開するmaven webプロジェクトを構築します.
    ステップ2:Maven座標をインポートし、依存関係を確立します.
    
        4.0.0
        cn.leon.maven
        cxf_ws_spring
        0.0.1-SNAPSHOT
        war
        cxf_ws_spring
        CXF WS Spring      
        
    
            
            
                org.apache.cxf
                cxf-rt-frontend-jaxws
                3.0.1
            
    
            
            
                org.springframework
                spring-context
                4.1.7.RELEASE
            
            
                org.springframework
                spring-web
                4.1.7.RELEASE
            
    
            
            
                org.springframework
                spring-test
                4.1.7.RELEASE
            
            
                junit
                junit
                4.12
            
    
            
            
                javax.servlet
                javax.servlet-api
                3.0.1
                test
            
        
    
        
        
            
                
                    org.codehaus.mojo
                    tomcat-maven-plugin
                    1.1
                    
                        9998
                    
                
            
        
    
    
    3.web.xmlの構成
    
    
    
        
        
            contextConfigLocation
            classpath:applicationContext.xml
        
        
        
            org.springframework.web.context.ContextLoaderListener
        
    
        
        
            CXFService
            org.apache.cxf.transport.servlet.CXFServlet
            1
        
        
            CXFService
            /service/*
        
    
        
            index.html
            index.htm
            index.jsp
            default.html
            default.htm
            default.jsp
        
    
    
    4.既存のエンティティークラス、インタフェース、およびサービスインプリメンテーションクラスをインポートします.
    5.アプリケーションContext.xmlでサービスを構成します.このサービスはspringに渡されて管理されます.
    
    
        
        
        
        
            
                
            
        
    
    
    jaxwsネーミングスペースと制約を導入する必要があることに注意してください.xmlns:jaxws="http://cxf.apache.org/jaxws"
    6.tomcatプラグインを使用してmavenプロジェクトを起動し、サードパーティへのアクセスパスを提供する:http://localhost:9998/cxf_ws_spring/service/userService?wsdl.
    注意:特にアクセスパスの接続の問題に注意してください.tomcatアクセスパス+プロジェクト名+web.xml構成のアクセスパス+サービス名、後にパラメータwsdlを接続します.
    7.springを統合し、クライアントを構成し、クライアントはspringに渡して管理する.
    
    
    
        
        
        
            
                
            
        
    
        
        
            
            
                
            
            
            
                
            
        
    
    
    メッセージ・ブロッカーはオプションです.
    8.テストケースを作成します.
    package cn.leon.cxf.server.test;
    
    import java.util.List;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    import cn.leon.cxf.domain.Car;
    import cn.leon.cxf.domain.User;
    import cn.leon.cxf.service.IUserService;
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = "classpath:applicationContext.xml")
    public class CXFTest {
    
        //         
        @Autowired
        private IUserService proxy;
        
        @Test
        public void testServer() {
            System.out.println(proxy.sayHello("     "));
        }
        
        @Test
        public void testServer2() {
            User user = new User();
            user.setUsername("tom");
            List cars = proxy.findCarByUser(user);
            for (Car car : cars) {
                System.out.println(car);
            }
        }
    }
    
    四、CXF-RS開発入門(重点)
    1、JAX-RS独立サービス使用
    1.簡単なMaven javaプロジェクトを作成します.
    2.Maven座標をインポートします.
    
        4.0.0
        cn.leon.maven
        cxf_rs_first_application
        0.0.1-SNAPSHOT
        cxf_rs_first_application
           jax-rs  
        
            
            
                org.apache.cxf
                cxf-rt-frontend-jaxrs
                3.0.1
            
            
            
                org.apache.cxf
                cxf-rt-transports-http-jetty
                3.0.1
            
            
            
                org.slf4j
                slf4j-log4j12
                1.7.12
            
            
            
            
                org.apache.cxf
                cxf-rt-rs-client
                3.0.1
            
            
            
            
                org.apache.cxf
                cxf-rt-rs-extension-providers
                3.0.1
            
            
            
            
                org.codehaus.jettison
                jettison
                1.3.7
            
         
    
    
    3.エンティティークラスを作成します.
    Userクラス:
    package cn.leon.cxf.domain;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.xml.bind.annotation.XmlRootElement;
    
    @XmlRootElement(name = "User")
    public class User {
        private Integer id;
        private String username;
        private String city;
        private List cars = new ArrayList();
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getCity() {
            return city;
        }
    
        public void setCity(String city) {
            this.city = city;
        }
    
        public List getCars() {
            return cars;
        }
    
        public void setCars(List cars) {
            this.cars = cars;
        }
    
        @Override
        public String toString() {
            return "User [id=" + id + ", username=" + username + ", city=" + city + ", cars=" + cars + "]";
        }
        
    }
    
    Car類:
    package cn.itcast.cxf.domain;
    
    import javax.xml.bind.annotation.XmlRootElement;
    
    @XmlRootElement(name = "Car")
    public class Car {
        private Integer id;
        private String name;
        private Double price;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Double getPrice() {
            return price;
        }
    
        public void setPrice(Double price) {
            this.price = price;
        }
    
        @Override
        public String toString() {
            return "Car [id=" + id + ", name=" + name + ", price=" + price + "]";
        }
    }
    
    注意:@XmlRootElement(name="Car")は、xmlとjsonに変換するときのオブジェクトの名前を指定します.
    4.業務インタフェースと業務実現クラスを作成する.
    ビジネスインタフェース:
    package cn.leon.cxf.service;
    
    import java.util.List;
    
    import javax.ws.rs.Consumes;
    import javax.ws.rs.DELETE;
    import javax.ws.rs.GET;
    import javax.ws.rs.POST;
    import javax.ws.rs.PUT;
    import javax.ws.rs.Path;
    import javax.ws.rs.PathParam;
    import javax.ws.rs.Produces;
    
    import cn.leon.cxf.domain.User;
    
    @Path("/userService")
    @Produces("*/*")
    public interface IUserService {
    
        @POST
        @Path("/user") //         
        @Consumes({ "application/xml", "application/json" }) //          
        void saveUser(User user);
    
        @PUT
        @Path("/user")
        @Consumes({ "application/xml", "application/json" })
        void updateUser(User user);
    
        @GET
        @Path("/user")
        @Consumes({ "application/xml", "application/json" })
        @Produces({ "application/xml", "application/json" })   //         
        List findAll();
    
        @GET
        @Path("/user/{id}")
        @Consumes({ "application/xml", "application/json" })
        @Produces({ "application/xml", "application/json" })
        User findUserById(@PathParam("id") Integer id);  //             
    
        @DELETE
        @Path("/user/{id}")
        @Consumes({ "application/xml", "application/json" })
        void deleteUserById(@PathParam("id") Integer id);
    }
    
    説明:
  • @Pathは、クラス上のpath+メソッド上のpathであるサービスアクセスリソースパスを指定します.
  • @Consumesは、クライアントから伝達されたデータフォーマットを処理できること、すなわちクライアントから伝達されたデータフォーマットを指定する.
  • @Producesは、クライアントに返すフォーマットデータを生成できるかどうかを指定します.
  • @GET照会@PUT修正@POST増加@DELETE削除;
  • @PathParam(「id」)は、アクセスパスに接続するパラメータを指定します.ビジネス実装クラス:
  • package cn.leon.cxf.service;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import cn.leon.cxf.domain.Car;
    import cn.leon.cxf.domain.User;
    
    public class UserServiceImpl implements IUserService {
    
        public void saveUser(User user) {
            System.out.println("save user:" + user);
        }
    
        public void updateUser(User user) {
            System.out.println("update user:" + user);
        }
    
        public List findAll() {
            List users = new ArrayList();
            User user1 = new User();
            user1.setId(1);
            user1.setUsername("  ");
            user1.setCity("  ");
    
            List carList1 = new ArrayList();
            Car car1 = new Car();
            car1.setId(101);
            car1.setName("   ");
            car1.setPrice(1000000d);
            carList1.add(car1);
            Car car2 = new Car();
            car2.setId(102);
            car2.setName("  ");
            car2.setPrice(400000d);
            carList1.add(car2);
            user1.setCars(carList1);
    
            users.add(user1);
    
            User user2 = new User();
            user2.setId(2);
            user2.setUsername("  ");
            user2.setCity("  ");
            users.add(user2);
    
            return users;
        }
    
        public User findUserById(Integer id) {
            if (id == 1) {
                System.out.println(22222);
                User user1 = new User();
                user1.setId(1);
                user1.setUsername("  ");
                user1.setCity("  ");
                return user1;
            }
            return null;
        }
    
        public void deleteUserById(Integer id) {
            System.out.println("delete user id :" + id);
        }
    
    }
    
    5.リリースサービス
    package cn.leon.cxf.server;
    
    import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
    
    import cn.leon.cxf.domain.Car;
    import cn.leon..cxf.domain.User;
    import cn.leon.cxf.service.IUserService;
    import cn.leon.cxf.service.UserServiceImpl;
    
    public class RSServer {
        public static void main(String[] args) {
            //               
            IUserService userService = new UserServiceImpl();
            
            //     
            JAXRSServerFactoryBean jaxrsServerFactoryBean = new JAXRSServerFactoryBean();
            jaxrsServerFactoryBean.setResourceClasses(User.class, Car.class); //            xml、json    
            jaxrsServerFactoryBean.setAddress("http://localhost:9997");
            jaxrsServerFactoryBean.setServiceBean(userService);
            
            //     
            jaxrsServerFactoryBean.create();
            System.out.println("     ....");
        }
    }
    
    ブラウザからサービス側へのデータアクセスが可能になりました.
    6.クライアントを作成します.
    クライアント・プログラムの作成には2つの方法があります.
  • httpクライアントツールを使用するには、HTTPプロトコルの内容をカスタマイズして解析する必要があります.
  • WebClientツールクラス使用(CXF付属)2つ目は、cxf-rt-rs-client依存をインポートする必要があります.依存:
  • 
            
                org.apache.cxf
                cxf-rt-rs-client
                3.0.1
            
    
    クライアント作成:
    package cn.leon.cxf.client;
    
    import java.util.Collection;
    
    import javax.ws.rs.core.MediaType;
    
    import org.apache.cxf.jaxrs.client.WebClient;
    
    import cn.leon.cxf.domain.User;
    
    public class RSClient {
        public static void main(String[] args) {
            //     :
            // create       ,        
            // accept            ,                       
            // getCollection           ,       ,   get,        
            // type        ,                    
            Collection extends User> collection = WebClient.create("http://localhost:9997/userService/user")
                    .accept(MediaType.APPLICATION_XML).getCollection(User.class);
            System.out.println(collection);
    
            //       
            User user = new User();
            user.setUsername("Lemon");
            WebClient.create("http://localhost:9997/userService/user")
            .type(MediaType.APPLICATION_XML).post(user);
        }
    }
    
    メソッドの説明:
  • createは、アクセスアドレス
  • を与える接続を作成する.
  • acceptは、指定されたタイプのデータを受信するが、このタイプは、サービスインタフェースで指定された戻りデータ型
  • でなければならない.
  • getCollectionはすべてのオブジェクトを取得する方法であり、1つのオブジェクトであればgetであり、これは実際によって
  • と決定される.
  • typeは、サービス側インタフェースによって定義受信データ型
  • である必要がある送信データのフォーマットである.
    考え:
    どのようにJSONデータフォーマットでインタラクションを行いますか?JSONデータをインタラクションするには,2つの依存を導入する必要がある.そうでないとエラーが発生します:Caused by:javax.ws.rs.ProcessingException:No message body writer has been found for class cn.itcast.cxf.domain.User,ContentType:アプリケーション/jsonがインポートする必要がある依存は次のとおりです.
    
            
                org.apache.cxf
                cxf-rt-rs-extension-providers
                3.0.1
            
            
            
            
                org.codehaus.jettison
                jettison
                1.3.7
            
    
    JSONデータを使用して対話するクライアント:
    package cn.leon.cxf.client;
    
    import java.util.Collection;
    
    import javax.ws.rs.core.MediaType;
    
    import org.apache.cxf.jaxrs.client.WebClient;
    
    import cn.leon.cxf.domain.User;
    
    public class RSClient2 {
        public static void main(String[] args) {
            //     :
            // create       ,        
            // accept            ,                       
            // getCollection           ,       ,   get,        
            // type        ,                    
            Collection extends User> collection = WebClient.create("http://localhost:9997/userService/user")
                    .accept(MediaType.APPLICATION_JSON).getCollection(User.class);
            System.out.println(collection);
    
            //       
            User user = new User();
            user.setUsername("Lemon");
            WebClient.create("http://localhost:9997/userService/user")
            .type(MediaType.APPLICATION_JSON).post(user);
        }
    }
    
    2、JAX-RSとSpringを統合してWebサービスを開発する
    1.Maven Webプロジェクトを作成します.
    2.依存関係をインポートします.
    
        4.0.0
        cn.leon.maven
        cxf_rs_spring
        0.0.1-SNAPSHOT
        war
        cxf_rs_spring
        CXF rs     spring  
    
        
            
            
                org.apache.cxf
                cxf-rt-frontend-jaxrs
                3.0.1
            
    
            
            
                org.slf4j
                slf4j-log4j12
                1.7.12
            
    
            
            
                org.apache.cxf
                cxf-rt-rs-client
                3.0.1
            
    
            
            
                org.apache.cxf
                cxf-rt-rs-extension-providers
                3.0.1
            
    
            
            
                org.codehaus.jettison
                jettison
                1.3.7
            
    
            
            
                org.springframework
                spring-context
                4.1.7.RELEASE
            
    
            
            
                org.springframework
                spring-web
                4.1.7.RELEASE
            
    
            
            
                org.springframework
                spring-test
                4.1.7.RELEASE
            
    
            
            
                junit
                junit
                4.12
            
        
        
            
                
                    org.codehaus.mojo
                    tomcat-maven-plugin
                    1.1
                    
                        9996
                    
                
            
        
    
    
    ステップ3:3.web.xmlのインポート
    
    
    
        
        
            contextConfigLocation
            classpath:applicationContext.xml
        
        
        
            org.springframework.web.context.ContextLoaderListener
        
    
        
        
            CXFService
            org.apache.cxf.transport.servlet.CXFServlet
            1
        
        
            CXFService
            /service/*
        
    
        
            index.html
            index.htm
            index.jsp
            default.html
            default.htm
            default.jsp
        
    
    
    4.上記のエンティティークラスとサービスインタフェース、サービス実装クラスをインポートします.サービスインタフェースの@Pathは削除する必要があるか、アプリケーションContext.xmlの送信アクセスアドレスを空に設定する必要があることに注意してください.@PathはアプリケーションContext.xmlの構成と重複しているので一般的にはコメントしますが、xmlの構成を空にすることをお勧めします.ここでpathの設定は空ではありません.xmlではインタフェースの複数の実装クラスを構成することができるので、xmlで統一的なアクセスパスを設定すると、どの実装クラスが働いているのか、クラスに@pathを設定しているのかを区別することが難しくなります.では,異なる実装クラスを区別できることが明らかになった.
    5.アプリケーションContext.xmlの構成
    
    
    
        
        
            
                
            
            
                
            
            
                
            
        
        
    
    
    名前空間を導入する必要があることに注意してください.
    xmlns:jaxrs="http://cxf.apache.org/jaxrs"http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
    6.サービスを開始し、パスにアクセスします.
    アクセスパス:サーバールートアドレス(プロジェクトアドレス)+web.xml構成+アプリケーションContext.xml address構成(またはクラス@Path)+メソッド@Path
    7.クライアントを作成します.
    package cn.leon.cxf.client;
    
    import java.util.Collection;
    
    import javax.ws.rs.core.MediaType;
    
    import org.apache.cxf.jaxrs.client.WebClient;
    
    import cn.leon.cxf.domain.User;
    
    public class RSClient {
        public static void main(String[] args) {
            //     :
            // create       ,        
            // accept            ,                       
            // getCollection           ,       ,   get,        
            // type        ,                    
            Collection extends User> collection = WebClient.create("http://localhost:9996/cxf_rs_spring/service/userService/user")
                    .accept(MediaType.APPLICATION_XML).getCollection(User.class);
            System.out.println(collection);
    
            //       
            User user = new User();
            user.setUsername("Lemon");
            WebClient.create("http://localhost:9996/cxf_rs_spring/service/userService/user")
            .type(MediaType.APPLICATION_XML).post(user);
        }
    }