「这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战」
制作demo
服务端
定义一个webService接口.使用@WebService注释,想要通讯的方法使用@WebMethod
@javax.jws.WebService
public interface WebService {
@WebMethod
String hello(String name);
}
实现类 : 使用@WebService注释
@javax.jws.WebService
public class WebServiceImpl implements WebService{
@Override
public String hello(String name) {
System.out.println("请求成功");
name += "访问成功";
return name;
}
}
执行.将webService服务启动到指定网址
public class PublishWebService {
public static void main(String[] args) {
String address = "<http://localhost:8181/service/webService>";
Endpoint.publish(address,new WebServiceImpl());
System.out.println("发布成功");
}
}
客户端
通过idea可以自动生成客户端代码
在执行下面的操作前,需要将鼠标锁定到输出目录
url 即服务端的网址,需要在后面加上?wsdl
生成成功,输出的目录在client,结构如下图
如何调用:
具体的调用流程如左图,代码流程如右图
调用生成的客户端代码流程
public class ClientService {
public static void main(String[] args) {
// 创建wsd文档中的service的name
WebServiceImplService service = new WebServiceImplService();
// 创建 portType的name
WebServiceImpl webServiceImplPort = service.getWebServiceImplPort();
// 执行 opration中的name
String yzy = webServiceImplPort.hello("yzy");
System.out.println(yzy);
}
}
返回结果
探索出入参
点进hello方法,接口中规定了入参类型和出参类型
这两个其实就是通讯方法入参出参的String类型封装了一下
更换出入参
为了验证我的猜想是不是正确的,可以将通讯方法中的String改成自定义类.
//通讯方法
public Animal trans(User user) {
Animal animal = new Animal();
String sex = user.isSex()==true?"公":"母";
animal.setType(sex +" : "+ user.getName());
LocalDate now = LocalDate.now();
animal.setBirthYear(now.minusYears(user.getAge()).getYear());
return animal;
}
重新启动后,wsdl文档如下
Trans入参里面就有一个User. Trans即入参合集,因为可能有多个入参.
User和我们创建的一模一样
客户端调用接口
// 客户端调用通讯方法
public static void main(String[] args) {
// 创建wsd文档中的service的name
WebServiceImplService service = new WebServiceImplService();
// 创建 portType的name
WebServiceImpl webServiceImplPort = service.getWebServiceImplPort();
// 执行 opration中的name
User user = new User();
user.setAge(22);
user.setName("yzy");
user.setSex(true);
Animal trans = webServiceImplPort.trans(user);
System.out.println(JSONObject.toJSONString(trans));
}
把通讯方法的入参改成三个
Animal trans(User user,String name,int age);
trans 就会有三个参数.