发布一个webservice

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 15:48   3476   0

目录

创建一个java工程

提供接口,并实现

发布webservice

访问服务

解释


我们已经知道了如何访问线上的web service服务,现在我们试着发布一下自己的服务。这个过程并不复杂。


创建一个java工程

在这个工程里。我们先写一个POJO。

package cxfuse.model;

import java.io.Serializable;

@SuppressWarnings("serial")
public class UserModel implements Serializable{
 private String name;
 private double score;
 
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public double getScore() {
  return score;
 }
 public void setScore(double score) {
  this.score = score;
 }
 
 
}

提供接口,并实现

现在我们提供一个访问接口。向用户提供获取这个UserModel,以及其下属性的方法。

package cxfuse;

import javax.jws.WebMethod;
import javax.jws.WebService;

import cxfuse.model.UserModel;

@WebService
public interface ShowUserService {
 @WebMethod
 UserModel getUserObject();
 @WebMethod
 String getUserName();
 @WebMethod
 double getUserScore();
}

此处需要注意的是使用了两个注解。@WebService(指明这是web service的接口类)和@WebMethod。

有了接口必然要提供一个接口的实现。

package cxfuse;

import javax.jws.WebService;

import cxfuse.model.UserModel;

@WebService(endpointInterface="cxfuse.ShowUserService", serviceName="user")
public class ShowUserServiceImpl implements ShowUserService{
 private UserModel userModel;
 @Override
 public UserModel getUserObject() {
  return userModel;
 }

 @Override
 public String getUserName() {
  return userModel.getName();
 }

 @Override
 public double getUserScore() {
  return userModel.getScore();
 }
 
 
 public ShowUserServiceImpl() {
  userModel = new UserModel();
  userModel.setName("zhangxu");
  userModel.setScore(92.5);
 }
}

需要注意的是@WebService(endpointInterface="cxfuse.ShowUserService", serviceName="user")中,endpointInterface的参数是接口的全类名。serviceName指明了webservice服务的访问点集合。这也是我们需要在客户端最先实例化的类。只有实例化了这个类我们才能获取我们的接口类对象。

这里我用了一个构造函数。当然你也可以有其他设置值的方法。比如:在重写方法中直接返回一个值。


发布webservice

package cxfuse;

import javax.xml.ws.Endpoint;

public class WebService {
    public static void main(String[] args) {
        //注解中声明的URL
        String addressUser = "http://localhost:8080/user";
        Endpoint.publish(addressUser, new ShowUserServiceImpl());
        System.out.println("web service 发布了。。。");
    }
}

当你的控制台成功打印,我们的服务便发布成功了。


访问服务

至于访问的方法和上一次我们提到的是一样一样的。

首先创建一个客户端(一个java工程就可以,当然你在这个工程上写也没什么。只是不太符合实际。)

然后引入jar包,复制生成的类文件。

最后编写测试类。

程序如下:

package cxfuse;

public class Client {
 public static void main(String[] args) {
  User user = new User();
  
  ShowUserService showUserService = user.getShowUserServiceImplPort();
  String name = showUserService.getUserName();
  double score = showUserService.getUserScore();
  UserModel userModel = showUserService.getUserObject();
  System.out.println("name is " + name);
  System.out.println("score is " + score);
  System.out.println("name is " + userModel.getName());
  
 }

}

解释

现在我们回头看一下我们发布接口后生成的wsdl。

访问的地址很简单 http://localhost:8080/user?wsdl

再看一下我们通过cmd命令生成的java类。

可见生成的java类是与这个wsdl息息相关,且类名就是xml中name所对应的名字。


参考:

@webservice注解 https://www.cnblogs.com/zhao-shan/p/5515174.html

Java WebService接口生成和调用 图文详解 https://blog.csdn.net/qazwsxpcm/article/details/70370490 (推荐)

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP