Webserver 基于ws超级简单入门

 

基于mavn 

项目目录结构

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>web_server</groupId>
    <artifactId>web_server</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <!-- 要进行jaxws 服务开发 -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>3.0.1</version>
        </dependency>

        <!-- 内置jetty web服务器  -->
        <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>
    </dependencies>

</project>

 

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

}

 

接口包

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<Car> 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<Car> findCarsByUser(User user) {
        if ("xiaoming".equals(user.getUsername())) {
            List<Car> cars = new ArrayList<Car>();
            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("服务已经启动...");


    }

}

 

运行可以看见控制台

在游览器访问地址

这里意思说没有调用

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

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

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里面的方法了

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

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值