如何通过wsdl生成接口接口jar

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过wsdl生成接口接口jar相关的知识,希望对你有一定的参考价值。

参考技术A   通常与web服务的通讯方式为:
  以POST方式建立与服务端URL的HTTP连接,然后发送指定的XML串。服务端也会以XML方式返回响应。
  XML串类似:
  <soapenv:Envelope>
  <soapenv:Body>
  <request>…</request>
  </soapenv:Body>
  </soapenv:Envelope>
  其中,WSDL中描述了上述通讯协议中大部分内容:
  网络协议由wsdl中的binding描述,通常为http.
  URL由wsdl中的service/port/address指定。
  XML的Body之内的格式由wsdl的message与types指定。
  理论上这些可以通过程序来完成,而不需要stub类。
  但是由于很多web服务的输入输出格式很复杂,靠程序来实现难度很大。
  我认为你的多个wsdl应该输入输出格式一致的,仅仅是URL的不同而已(不然程序也没法知道朝哪儿赋值)。因此,你可以仅利用一套固定的stub,只需在调用时区分不同的URL即可(axis里可用setEndpoint,cxf似乎是在初始化service对象时指定的)。
  另外,团IDC网上有许多产品团购,便宜有口碑

使用axis调用wsdl接口

1、需要用到的jar包如下:

axis.jar、axis-ant.jar、commons-discovery-0.2.jar、commons-logging-1.0.4.jar、jaxrpc.jar、log4j-1.2.8.jar、saaj.jar、wsdl4j-1.5.1.jar

2、调用代码举例如下

    /**
     * 查询用户手机信息
     * 这个接口是网上免费提供的接口,需要电脑联网才能访问
     */
    public static void getMobileCodeInfo(){
        String endpoint = "http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl";
        String nameSpace = "http://WebXml.com.cn/";
        String method = "getMobileCodeInfo";
        try {
            //新建服务
            Service service = new Service();
            //生成客户端
            Call call = (Call) service.createCall();
            //配置endpoint
            call.setTargetEndpointAddress(new URL(endpoint));
            //配置命名空间和方法
            call.setOperationName(new QName(nameSpace,method));
            //配置参数名和参数值
            call.addParameter(new QName(nameSpace,"mobileCode"), XMLType.XSD_STRING, ParameterMode.IN);
            call.addParameter(new QName(nameSpace,"userID"), XMLType.XSD_STRING, ParameterMode.IN);
            Object[] paramValues = new Object[]{"18705187159",""};
            //设置返回值类型
            call.setReturnType(XMLType.XSD_STRING);
            //SoapAction的配置,在浏览器url中输入wsdl,在结果中搜索soapAction,如果有值,则需要设置,如果没有值,则设不设都行
            call.setUseSOAPAction(true);
            call.setSOAPActionURI(nameSpace+method);
            //调用接口
            String result = (String) call.invoke(paramValues);
            
            System.out.println("result->"+result); //result->18705187159:江苏 南京 江苏移动全球通卡
        } catch (Exception e) {
            System.out.println("接口getMobileCodeInfo调用失败!异常信息如下:");
            System.out.println(e.toString());
        }
    }
  /**
     * 查询实体类集合json
     * 这个接口是我自己在另一个eclipse中构造的接口,需要另一个项目中接口程序启动才能访问
     */
    public static void listBeanTest(){
        String endpoint = "http://localhost:8080/test2?wsdl";
        String nameSpace = "http://webservice.ws.glaway.com/";
        String method = "listBeanTest";
        try {
            //新建服务
            Service service = new Service();
            //生成客户端
            Call call = (Call) service.createCall();
            //配置endpoint
            call.setTargetEndpointAddress(new URL(endpoint));
            //配置命名空间和方法
            call.setOperationName(new QName(nameSpace,method));
            //配置参数名和参数值
            Object[] paramValues = new Object[0];
            //设置返回值类型
            call.setReturnType(XMLType.XSD_STRING);
            //SoapAction的配置,在浏览器url中输入wsdl,在结果中搜索soapAction,如果有值,则需要设置,如果没有值,则设不设都行
//            call.setUseSOAPAction(true);
//            call.setSOAPActionURI(nameSpace+method);
            //调用接口
            String result = (String) call.invoke(paramValues);
            
            System.out.println("result->"+result); //result->{"code":"success","data":[{"age":25,"name":"1"},{"age":8,"name":"2"}]}

        } catch (Exception e) {
            System.out.println("接口listBeanTest调用失败!异常信息如下:");
            System.out.println(e.toString());
        }
    }

 

以上是关于如何通过wsdl生成接口接口jar的主要内容,如果未能解决你的问题,请参考以下文章

webservice怎么用wsdl生成接口类

提供了webservice的wsdl地址,如何生成消费端(客户端),怎么调用已经提供的wsdl接口

java如何调用webservice接口

根据接口wsdl怎么生成soap消息请求数据

怎么根据wsdl写相应的接口

使用别人的系统,对方提供了wsdl 和soap,我如何使用这些调用对方的接口呀,请高手指点!!!