发布一个webservice

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_30325009/article/details/82723481

目录

创建一个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 (推荐)

猜你喜欢

转载自blog.csdn.net/baidu_30325009/article/details/82723481