zoukankan      html  css  js  c++  java
  • CXF 实现webservice (Jax-rs)

    服务端:

     pom.xml

      <dependencies>
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-frontend-jaxrs</artifactId>
                <version>3.0.1</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-transports-http-jetty</artifactId>
                <version>3.0.1</version>
            </dependency>
    
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>1.7.12</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-rs-client</artifactId>
                <version>3.0.1</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-rs-extension-providers</artifactId>
                <version>3.0.1</version>
            </dependency>
            <dependency>
                <groupId>org.codehaus.jettison</groupId>
                <artifactId>jettison</artifactId>
                <version>1.3.7</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.10</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.2</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>UTF-8</encoding>
                        <showWarnings>true</showWarnings>
                    </configuration>
                </plugin>
            </plugins>
        </build>

    实体类:

    @XmlRootElement(name = "Car")
    public class Car {
        private Integer id;
        private String carName;
        private Double price;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getCarName() {
            return carName;
        }
    
        public void setCarName(String carName) {
            this.carName = carName;
        }
    
        public Double getPrice() {
            return price;
        }
    
        public void setPrice(Double price) {
            this.price = price;
        }
    
        @Override
        public String toString() {
            return "Car [id=" + id + ", carName=" + carName + ", price=" + price + "]";
        }
    
    }
    @XmlRootElement(name = "User")
    public class User {
        private Integer id;
        private String username;
        private String city;
    
        private List<Car> cars = new ArrayList<Car>();
    
        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<Car> getCars() {
            return cars;
        }
    
        public void setCars(List<Car> cars) {
            this.cars = cars;
        }
    
        @Override
        public String toString() {
            return "User [id=" + id + ", username=" + username + ", city=" + city + ", cars=" + cars + "]";
        }
    
    }

    服务类

    //  访问当前服务接口对应的路径
    @Path("/userService")
    @Produces("*/*")  // 服务器支持的返回的数据格式类型
    public interface IUserService {
    
        // 表示处理的请求的类型,post 对应的是insert新增操作
        @POST
        // 访问当前服务接口方法对应的路径。 【.../userService/user】
        @Path("/user")
        //  服务器支持的请求的数据格式类型
        @Consumes({ "application/xml", "application/json" })
        public void saveUser(User user);
    
        // 表示处理的请求的类型,put 对应的是update修改操作
        @PUT
        @Path("/user")
        @Consumes({ "application/xml", "application/json" })
        public void updateUser(User user);
    
        // 表示处理的请求的类型,get 对应的是查询修改操作
        @GET
        @Path("/user")
        @Consumes("application/json")
        // 服务器支持的返回的数据格式类型
        @Produces({ "application/xml", "application/json" })
        public List<User> findAllUsers();
    
        @GET
        @Path("/user/{id}")
        @Consumes("application/xml")
        @Produces({ "application/xml", "application/json" })
        public User finUserById(@PathParam("id") Integer id);
    
        // 表示处理的请求的类型,delete 对应的是删除操作
        @DELETE
        @Path("/user/{id}")
        @Consumes({"application/xml", "application/json"})
        public void deleteUser(@PathParam("id") Integer id);
    }
    public class UserServiceImpl implements IUserService {
    
        @Override
        public void saveUser(User user) {
            System.out.println("save user:" + user);
        }
    
        @Override
        public void updateUser(User user) {
            System.out.println("update user:" + user);
        }
    
        @Override
        public List<User> findAllUsers() {
            List<User> users = new ArrayList<User>();
            User user1 = new User();
            user1.setId(1);
            user1.setUsername("小明");
            user1.setCity("北京");
    
            List<Car> carList1 = new ArrayList<Car>();
            Car car1 = new Car();
            car1.setId(101);
            car1.setCarName("保时捷");
            car1.setPrice(1000000d);
            carList1.add(car1);
            Car car2 = new Car();
            car2.setId(102);
            car2.setCarName("宝马");
            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;
        }
    
        @Override
        public User finUserById(Integer id) {
            if (id == 1) {
                User user1 = new User();
                user1.setId(1);
                user1.setUsername("小明");
                user1.setCity("北京");
                return user1;
            }
            return null;
        }
    
        @Override
        public void deleteUser(Integer id) {
            System.out.println("delete user id :" + id);
        }
    
    }

    启动测试类:

    public class Server {
        public static void main(String[] args) {
            // 创建发布服务的工厂
            JAXRSServerFactoryBean factory = new JAXRSServerFactoryBean();
    
            // 设置服务地址
            factory.setAddress("http://localhost:8001/ws/");
    
            // 设置服务类
            factory.setServiceBean(new UserServiceImpl());
    
            // 添加日志输入输出拦截器
            factory.getInInterceptors().add(new LoggingInInterceptor());
            factory.getOutInterceptors().add(new LoggingOutInterceptor());
    
            // 发布服务
            factory.create();
    
            System.out.println("发布服务成功,端口8001");
        }
    }

     客户端:

    pom.xml

     <dependencies>
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-frontend-jaxrs</artifactId>
                <version>3.0.1</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-transports-http-jetty</artifactId>
                <version>3.0.1</version>
            </dependency>
    
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>1.7.12</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-rs-client</artifactId>
                <version>3.0.1</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-rs-extension-providers</artifactId>
                <version>3.0.1</version>
            </dependency>
            <dependency>
                <groupId>org.codehaus.jettison</groupId>
                <artifactId>jettison</artifactId>
                <version>1.3.7</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.10</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.2</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>UTF-8</encoding>
                        <showWarnings>true</showWarnings>
                    </configuration>
                </plugin>
            </plugins>
        </build>

    实体类:

    和服务端一样,这里就不贴出来了。

    测试类:

    @Test
        public void testSave(){
            User user = new User();
            user.setId(100);
            user.setUsername("Jerry");
            user.setCity("gz");
            // 通过WebClient对象远程调用服务端
            WebClient
                        .create("http://localhost:8001/ws/userService/user")
                        .type(MediaType.APPLICATION_JSON)  // 指定请求的数据格式为json
                        .post(user);
        }

    @Test
        public void testGet(){
            // 查询一个
            User user =
                WebClient
                        .create("http://localhost:8001/ws/userService/user/1")
                       .accept(MediaType.APPLICATION_JSON)
                        .get(User.class);
            System.out.println(user);
        }

     

    @Test
        public void testUpdate(){
            User user = new User();
            user.setId(100);
            user.setUsername("Jerry");
            user.setCity("gz");
            WebClient
                    .create("http://localhost:8001/ws/userService/user")
                    .accept(MediaType.APPLICATION_XML)
                    .put(user);
            System.out.println(user);
        }

  • 相关阅读:
    poj1661【DP,左右两端dp】
    hdoj1074【A的无比爆炸】
    hdoj1024【DP.最 大 m 字 段 和】(写完我都怕。。。不忍直视。。)
    qq教xixi写模拟加法【非常爆炸】
    错排公式
    POJ3616【基础DP】
    hdoj1257【疑问】(贪心)
    【弱的C艹之路。。未完待续】
    hdoj1728【搜索的两种写法】
    hdoj1001【智障了。。。】
  • 原文地址:https://www.cnblogs.com/dalianpai/p/12349801.html
Copyright © 2011-2022 走看看