Webserver 基于ws超级简单入门

 

基于mavn 

项目目录结构

Webserver 基于ws超级简单入门_第1张图片

pom.xml



    4.0.0

    web_server
    web_server
    1.0-SNAPSHOT
    
        
        
            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
        
    

 

domain包里就是一些实体类而已,没什么好说的

package cxf.domain;

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 + "]";
   }

}

 

package 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;
   }

}

 

接口包

package cxf.server;


import cxf.domain.Car;
import cxf.domain.User;

import javax.jws.WebMethod;
import javax.jws.WebService;
import java.util.List;

@WebService//声明这个接口是webserver接口
public interface IUserServer {

    @WebMethod//@WebMethod用于向外公布,它修饰的方法是webservice方法,去掉也没影响的,类似一个注释信息
    public String sayHello(String name);

    @WebMethod
    public List findCarsByUser(User user);
}

 

package cxf.server.serverimpl;

import cxf.domain.Car;
import cxf.domain.User;
import cxf.server.IUserServer;

import javax.jws.WebService;
import java.util.ArrayList;
import java.util.List;

@WebService(endpointInterface = "cxf.server.IUserServer",serviceName = "userService")//endpointInterfacewebserver接口的全类名,serviceName 是访问的名称
public class UserserverIMpl implements IUserServer {
    // 简单参数传递
    public String sayHello(String name) {
        return "say"+name;
    }

    // 复杂参数传递
    public List findCarsByUser(User user) {
        if ("xiaoming".equals(user.getUsername())) {
            List cars = new ArrayList();
            Car car1 = new Car();
            car1.setId(1);
            car1.setCarName("大众途观");
            car1.setPrice(200000d);
            cars.add(car1);

            Car car2 = new Car();
            car2.setId(2);
            car2.setCarName("现代ix35");
            car2.setPrice(170000d);
            cars.add(car2);

            return cars;
        } else {
            return null;
        }
    }
}

接下来就是启动webserver了编写启动类

package cxf.ws;

import cxf.server.IUserServer;
import cxf.server.serverimpl.UserserverIMpl;

import javax.xml.ws.Endpoint;

public class WS_server {
    public static void main(String[] args) {
        // 使用CXF 将 UserService服务 注册到网络上
        // 1 、 服务实现对象
        IUserServer userServer=new UserserverIMpl();
        // 2、 发布服务地址
        String address="http://localhost:9989/userServer";
        // 3、 发布服务
        Endpoint.publish(address,userServer);
        System.out.println("服务已经启动...");


    }

}

 

运行可以看见控制台

在游览器访问地址

Webserver 基于ws超级简单入门_第2张图片

这里意思说没有调用

在路径上加上?wsdl可以看到此webserver所提供的方法及其各种参数

Webserver 基于ws超级简单入门_第3张图片

接下来写客户端,我这里为了方便把客户端写在一个项目里面,你也可以重新新建一个项目来写

package cxf.ws.client;


import cxf.domain.User;
import cxf.server.IUserServer;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

public class WebClient {
    public static void main(String[] args) {
        JaxWsProxyFactoryBean jaxWsProxyFactoryBean=new JaxWsProxyFactoryBean();
        jaxWsProxyFactoryBean.setServiceClass(IUserServer.class);
        jaxWsProxyFactoryBean.setAddress("http://localhost:9989/userServer");
        // 创建调用远程服务代理对象
        IUserServer proxy= (IUserServer) jaxWsProxyFactoryBean.create();
        // 调用代理对象 任何一个方法,都将通过网络 调用web服务
        String helloName = proxy.sayHello("张三");
        System.out.print(helloName);
        System.out.print("\r\n");
        User user = new User();
        user.setUsername("xiaoming");
        System.out.println(proxy.findCarsByUser(user));
    }
}

我们通过JaxWsProxyFactoryBean 来构建一个IUserServer的代理对象

传入两个基本参数

jaxWsProxyFactoryBean.setServiceClass(IUserServer.class);
jaxWsProxyFactoryBean.setAddress("http://localhost:9989/userServer");

通过create()方法获得代理对象

这样就可以调用IUserServer里面的方法了

喜欢的小伙伴可以去主页下载全部代码。

你可能感兴趣的:(Webserver 基于ws超级简单入门)