当前位置 : 主页 > 网页制作 > Nodejs >

WebService技术总结(一):jdk自带的WebService API:jaxws

来源:互联网 收集:自由互联 发布时间:2021-06-24
WebService的调用,一般存在服务端和客户端,由服务端编写接口和实现类,并发布成服务,生成wsdl文件,再由客户端去调用。 接下来按照上述步骤实现jaxws远程调用 1.在服务器端编写接

WebService的调用,一般存在服务端和客户端,由服务端编写接口和实现类,并发布成服务,生成wsdl文件,再由客户端去调用。

接下来按照上述步骤实现jaxws远程调用

1.在服务器端编写接口及实现类

接口:

package com.yonyou.service;

public interface QueryData {
    public String[] query(int num);
}

实现类:注意类和方法上的注解即可

package com.yonyou.service.imp;

    import javax.jws.WebMethod;
    import javax.jws.WebService;
    import javax.jws.soap.SOAPBinding;

    import com.yonyou.service.QueryData;

    @WebService
    @SOAPBinding(style = SOAPBinding.Style.RPC)  
    public class QueryDataImp implements QueryData{

        @Override
        @WebMethod
        public String[] query(int num) {

            return new String[]{"yy1","yy2","yy3"};
        }
    }

2.发布服务,生成wsdl文件:

提示,可以使用ipconfig查看自己的Ipv4地址

    public static void main(String[] args) {
        String address = "http://10.101.238.173:15008/query";
        //发布服务,传入地址和实现类对象
        Endpoint.publish(address, new QueryDataImp());
    }

打开浏览器,输入http://10.101.238.173:15008/query?wsdl

显示一个xml配置文件的网页,这就是wsdl文件,即webservice description language

1.从该文件的底部找到service节点,它的子节点port name=”QueryDataImpPort” binding=”tns:QueryDataImpPortBinding”

2.根据binding=”tns:QueryDataImpPortBinding”, 找到binding name=”QueryDataImpPortBinding” type=”tns:QueryDataImp”

3.根据type=”tns:QueryDataImp”,找到portType name=”QueryDataImp”,里面有方法名,输入的参数和返回值信息

总结:通过service找binding,通过binding找到portType,然后找到方法信息


在拿到服务端发布的wsdl文件之后,客户端怎么调用呢

首先打开cmd命令行,cd到客户端项目路径src下

然后通过wsdl文件生成java类

这时候刷新下客户端项目,会出现以下这些类


如果你的jdk是1.6及以下的,有一个类会报错

而注释里也写的很清楚,需要使用wsdl2java命令并加上”-frontend jaxws21”,即:wsdl2java -d . -frontend jaxws21 http://10.101.238.173:15008/query?wsdl

3.在客户端进行调用

public class Client {
    public static void main(String[] args) {
        //在wsdl中<service name="QueryDataImpService">
        QueryDataImpService service = new QueryDataImpService();
        //获取Port,也就是<portType name="QueryDataImp">
        QueryDataImp query = service.getQueryDataImpPort();
        StringArray nameArr = query.query(10);
        List<String> names = nameArr.getItem();
        if(names != null && names.size() > 0){
            for (String name : names) {
                System.out.println(name);
            }
        }
    }
}

客户端更为灵活的Service调用

QName两个参数说明:

public static void main(String[] args) throws MalformedURLException {
        //wsdl文件地址
        URL url = new URL("http://10.101.238.173:15008/query?wsdl");
        //namespace和服务类名
        QName qName = new QName("http://imp.service.yonyou.com/", "QueryDataImpService");
        Service service = Service.create(url, qName);
        //获取portType
        QueryDataImp query = service.getPort(QueryDataImp.class);
        StringArray result = query.query(3);
        List<String> item = result.getItem();
        for (String ele : item) {
            System.out.println(ele);
        }
    }

运行结果:

yy1
yy2
yy3
网友评论