webService 制作简单demo

987 阅读2分钟

「这是我参与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可以自动生成客户端代码

在执行下面的操作前,需要将鼠标锁定到输出目录

image.png

url 即服务端的网址,需要在后面加上?wsdl

image.png

生成成功,输出的目录在client,结构如下图

image.png

如何调用:

具体的调用流程如左图,代码流程如右图

image.png

image.png

调用生成的客户端代码流程

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

返回结果

image.png

探索出入参

点进hello方法,接口中规定了入参类型和出参类型

image.png

这两个其实就是通讯方法入参出参的String类型封装了一下

image.png

更换出入参

为了验证我的猜想是不是正确的,可以将通讯方法中的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文档如下

image.png

Trans入参里面就有一个User. Trans即入参合集,因为可能有多个入参.

User和我们创建的一模一样

image.png

客户端调用接口

// 客户端调用通讯方法
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 就会有三个参数.

image.png