加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 21:57:20 所属栏目:安全 来源:网络整理
导读:WebService的调用,一般存在服务端和客户端,由服务端编写接口和实现类,并发布成服务,生成wsdl文件,再由客户端去调用。 接下来按照上述步骤实现jaxws远程调用 1.在服务器端编写接口及实现类 接口: package com.yonyou.service;public interface QueryDat

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读