WebService的简单应用

WebService作为一种跨平台的技术,应用相当广泛,具体介绍请参照百度百科,这里不做详细介绍

WebService--百度百科

java版的实现

服务端:

定义接口,提供给远程调用者,接口上添加@WebService(),若对所有方法均对外可访问,则不需要添加@WebMethod,如果仅仅一部分方法客户端可调用,则在对应的方法上添加@WebMethod注解即可

import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

@WebService()
public interface MyService {
    /**
     * WebResult通过webservice浏览器访问时结果输出控制,name为结果显示名称
     * WebParam对于参数输入时的显示名称
     */
    @WebResult(name="addResult")
    public int add(@WebParam(name="a")int a,@WebParam(name="b")int b);
    
    @WebResult(name="minusResult")
    public int minus(@WebParam(name="aa")int a,@WebParam(name="ab")int b);
    
    @WebResult(name="checkUser")
    public User login(@WebParam(name="username")String username,@WebParam(name="password")String password);

}

服务端接口实现类

import javax.jws.WebService;

@WebService(endpointInterface="对应MyService全类名")
public class MyServiceImpl implements MyService {

    @Override
    public int add(int a, int b) {
        System.out.println(a+" + "+b+" = "+(a+b));
        return a+b;
    }

    @Override
    public int minus(int a, int b) {
        System.out.println(a + " - " + b + " = " + (a-b));
        return a-b;
    }

    @Override
    public User login(String username, String password) {
        System.out.println(username + " " + password);
        User user = new User();
        user.setId(123);
        user.setUsername(username);
        user.setPassword(password);
        return user;
    }

}

User.java

public class User {
    private int id;
    private String username;
    private String password;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

 发布自己的webservice

import javax.xml.ws.Endpoint;

public class MyServer {

    public static void main(String[] args) {
        String address = "http://localhost:9999/ms";
        Endpoint.publish(address, new MyServiceImpl());
    }

}

此时运行后在浏览器输入http://localhost:9999/ms?wsdl就可看到对应的wsdl文档

在eclipse的webservice 浏览窗口便可访问,注意,是wsdl模式

客户端:

import java.net.URL;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;

public class Test {
    public static void main(String[] args) {
        try {
            //创建访问wsdl服务地址的url
            URL url = new URL("http://localhost:9999/ms?wsdl");
            //通过Qname指明服务的具体信息
            QName sname = new QName("http://对应的服务端的包名,倒着写/", "MyServiceImplService");
            //创建服务
            Service service = Service.create(url,sname);
            //实现接口
            IMyService ms = service.getPort(IMyService.class);
            System.out.println(ms.add(12,33));
            //以上服务有问题,依然依赖于IMyServie接口
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

客户端也可利用jdk的工具生成,在资源管理器中src目录下输入wsimport -keep http://localhost:9999/ms?wsdl

public class Client {
    
    public static void main(String[] args) {
        MyServiceImplService factory = new MyServiceImplService();
        IMyService service = factory.getMyServiceImplPort();
        System.out.println(service.add(123, 123));
    }
}
原文地址:https://www.cnblogs.com/zqq1234/p/5257382.html