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