根据WSDL编写JAVA调用

在开发过程中获取到了提供方的wsdl服务地址,然后在网页上能够访问wsdl文档以后,如何调用对方的webservic借口呢?


内容说明

1、WSDL文档基本说明

2、httpURLConnection方式调用

3、获取的数据用dom4j就可以解析了


WSDL文档基本说明

接口文档如下:以下是公共对外开放的查询手机号归属地的一个接口文档:

WSDL:http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl

具体去这个链接看,太长就不截图了

很长接口看起来很复杂,较为繁琐。  但是作为开发人员,使用的时候,  我们可以查看关注点信息,就能实现接口的调用了!!

那么我们需要了解吗哪些信息呢?

从上面的文档里面,我们需要从头部(最上面一行)了解到:

系统的targetNamespace="http://WebXml.com.cn/"

从<wsdl:types>标签里的<s:element ></s:element>的name=“xxxxxxx”,获知该文档提供了两个方法:

getMobileCodeInfo、getDatabaseInfo(后面带Response的是对应方法的回复)

从底部的<wsdl:service name=“MobileCodeWS”></wsdl:service>标签里面,能获知<http:address location=“http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx”/>请求地址。

http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx


一般而言,知悉以上信息,你就能调用借口了。需要传参数调用的,可能在业务上需要与对方了解一下,参数的格式(数据类型,文档里是可以知晓的)



httpURLConnection方式调用

代码如下:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;

public class WSDLTest {
    public static void main(String[] args) throws IOException {
        //第一步:创建服务地址  //http://ws.webxml.com.cn/
        URL url = new URL("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl");
        //第二步:打开一个通向服务地址的连接
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        //第三步:设置参数
        //3.1发送方式设置:POST必须大写
        connection.setRequestMethod("POST");
        //3.2设置数据格式:content-type
        connection.setRequestProperty("content-type", "text/xml;charset=utf-8");
        //3.3设置输入输出,因为默认新创建的connection没有读写权限,
        connection.setDoInput(true);
        connection.setDoOutput(true);

        //第四步:组织SOAP数据,发送请求
        String soapXML = getXML("155748093xx");
        //将信息以流的方式发送出去
        OutputStream os = connection.getOutputStream();
        os.write(soapXML.getBytes());
        //第五步:接收服务端响应,打印
        int responseCode = connection.getResponseCode();
        if(200 == responseCode){//表示服务端响应成功
            //获取当前连接请求返回的数据流
            InputStream is = connection.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);

            StringBuilder sb = new StringBuilder();
            String temp = null;
            while(null != (temp = br.readLine())){
                sb.append(temp);
            }

            /**
             * 打印结果
             */
            System.out.println(sb.toString());

            is.close();
            isr.close();
            br.close();
        }
        os.close();
    }


    public static String getXML(String phone){
        //http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?op=getMobileCodeInfo
        String soapXML = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
                +"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2003/XMLSchema-instance\" "
                +"xmlns:web=\"http://WebXml.com.cn/\"  "
                +"xmlns:xsd=\"http://www.w3.org/2003/XMLSchema\" "
                +"xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
                +"<soap:Body>"
                +"<getMobileCodeInfo xmlns=\"http://WebXml.com.cn/\">"
                +"<mobileCode>"+phone+"</mobileCode>"
//                +"<userID>"+phone+"</userID>"
                +"</getMobileCodeInfo>"
                +"</soap:Body>"
                +"</soap:Envelope>";
        return soapXML;
    }
}

说明 :

一般的HTTP请求大部分都是相同的,但是由于webservice是基于soap协议的,所以,请求时的文本格式需要设置好。

文中的soapXML信息,需要注意xmlns:web=“tns” 这个xml命名空间, 这个空间是依据wsdl文档里的头部NameSpace信息,确定的

程序会依据这个名称,检索到该文档里面的方法,譬如:

<web: getDatabaseInfo> 获取getDatabaseInfo方法 (web是xmlns的名字,可以自定义,相当于“id”)






参考:[https://blog.csdn.net/myblogzz/article/details/80311038?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase](https://blog.csdn.net/myblogzz/article/details/80311038?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase)
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
使用WSDL本地客户端调用Web服务的步骤如下: 1. 获取WSDL文件。WSDL文件包含了Web服务的定义信息,可以通过Web浏览器访问Web服务的URL,并在URL后面添加“?wsdl”参数,从而获取WSDL文件。 2. 使用WSDL2Java工具生成客户端代码。WSDL2Java是一个Java开发工具,可以将WSDL文件转换为Java客户端代码。你可以从Apache CXF或Apache Axis等Web服务框架中找到WSDL2Java工具。 以Apache CXF为例,在命令行中输入以下命令生成客户端代码: ``` wsdl2java -p <package-name> -d <output-directory> <wsdl-url> ``` 其中,`<package-name>`是客户端代码的Java包名,`<output-directory>`是客户端代码的输出目录,`<wsdl-url>`是Web服务的WSDL文件URL。 3. 编写客户端代码。在生成的客户端代码中,可以找到代表Web服务的Java接口。你需要实例化该接口,并调用接口中定义的方法来调用Web服务。 ``` // 实例化Web服务接口 ServiceName serviceName = new ServiceName(); WebServicePortType port = serviceName.getWebServicePort(); // 调用Web服务方法 String result = port.webServiceMethod(param1, param2, ...); ``` 其中,`ServiceName`是生成的代表Web服务的Java类,`WebServicePortType`是Web服务接口,`webServiceMethod`是Web服务中定义的方法。 4. 运行客户端代码。你可以将客户端代码打包成一个可执行的Java应用程序,并在命令行中运行该应用程序,从而调用Web服务。 以上是使用WSDL本地客户端调用Web服务的基本步骤。需要注意的是,不同的Web服务框架和工具可能会有所不同,具体步骤请参考相关的文档或教程。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值