Springboot调用WebServices接口wsdl地址

webservice的 发布一般都是使用WSDL(web service descriptive language)文件的样式来发布的,一般都有三种方式
1,直接AXIS调用远程的web service
2,直接SOAP调用远程的webservice
3,使用wsdl2java把WSDL文件转成本地类,然后像本地类一样使用。

这些方法介绍文章很多,要么不全,要么比较麻烦,介绍一个其他的方式,也是我一直使用的,挺方便的。

一,引包,主要的就是这个,其他的框架相关的大家肯定有的。

        <!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>

二、代码,注意getXML要根据querymap对应修改一下

package com.cm.common.utils;

import com.alibaba.fastjson.JSONObject;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;


public class WebServicesUtils {
    public static void main(String[] args) {
        getResult("2020-11-11 07:00:00","2020-11-11 20:00:00");
    }
    @ResponseBody
    public static String getResult(
            @RequestParam(value = "PlanEndDateStart",defaultValue = "") String PlanEndDateStart,
            @RequestParam(value = "PlanEndDateEnd",defaultValue = "")String PlanEndDateEnd
    ){
        Date start=new Date();
        JSONObject object = new JSONObject();
        try {
            //第一步:创建服务地址
            URL url = new URL("http://需要调用的地址/TransService.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);
            connection.connect();
            //封装请求参数
            Map querymap = new HashMap();
            //querymap.put("PlanEndDateStart",PlanEndDateStart);//完成日期-起始-必填-按计划结束日期来查
            querymap.put("PlanEndDateStart","2020-11-11 07:00:00");//完成日期-起始-必填-按计划结束日期来查
            //querymap.put("PlanEndDateEnd",PlanEndDateEnd);//完成日期-结束-必填-按计划结束日期来查
            querymap.put("PlanEndDateEnd","2020-11-11 20:00:00");//完成日期-结束-必填-按计划结束日期来查
            querymap.put("Factory","100");//工厂-必填
            querymap.put("DefID","LSJ4088");//物料号
            querymap.put("SAPOrderID","008077546");//生产订单
            querymap.put("TeamName","02");//班组=username
            //第四步:组织SOAP数据,发送请求
            String soapXML = getXML(querymap);
            //将信息以流的方式发送出去
            //POST请求
            PrintWriter out = new PrintWriter(new OutputStreamWriter(connection.getOutputStream(),"utf-8"));
            out.println(soapXML);
            out.flush();
            out.close();
            //第五步:接收服务端响应,打印
            int responseCode = connection.getResponseCode();
            if(200 == responseCode){//表示服务端响应成功
                //获取当前连接请求返回的数据流
                BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(),"utf-8"));
                String lines;
                StringBuffer sb = new StringBuffer("");
                while ((lines = reader.readLine()) != null) {
                    sb.append(lines);
                }
                reader.close();
                //System.out.println(sb.toString());
                //处理获取数据(xml格式字符串)
                // 下面的是通过解析xml字符串的
                Document doc = DocumentHelper.parseText(sb.toString()); // 将字符串转为XML
                Element rootElt = doc.getRootElement(); // 获取根节点
                //System.out.println("根节点:" + rootElt.getName()); // 拿到根节点的名称
                Iterator iter = rootElt.elementIterator("Body"); // 获取根节点下的子节点Body

                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                Date end=new Date();
                long diff = end.getTime() - start.getTime();
                System.out.println("2.获取mes数据的时间:"+sdf.format(new Date())+",并且获取mes数据用了:"+diff+"毫秒");//打印刚刚进入方法的时间

                // 遍历head节点
                while (iter.hasNext()) {
                    Element recordEle = (Element) iter.next();
                    Iterator getOrderInfosByTimeResponse = recordEle.elementIterator("getOrderInfosByTimeResponse"); // 获取子节点Body下的子节点getOrderInfosByTimeResponse
                    while (getOrderInfosByTimeResponse.hasNext()) {
                        Element info = (Element) getOrderInfosByTimeResponse.next();
                        Iterator result = info.elementIterator("getOrderInfosByTimeResult"); // 获取子节点getOrderInfosByTimeResult下的子
                        while (result.hasNext()) {
                            Element itemEle = (Element) result.next();
                            String code = itemEle.elementTextTrim("code"); // 拿到head下的子节点getOrderInfosByTimeResult下的字节点code的值
                            if("1".equals(code)){//成功返回数据
                                object.put("recode",1);
                                String data = itemEle.elementTextTrim("data");
                                System.out.println(data);
                                //解析得到的jsonArray字符串
								//根据拿到的数据做自己想做的事情


                            }else if("6".equals(code)){//失败获取error提示信息
                                object.put("recode",2);
                                String error = itemEle.elementTextTrim("error");
                                object.put("error",error);
                            }
                        }
                    }
                }
            }else{
                object.put("recode",2);
                object.put("error","请求MesService失败");
            }
            // 断开连接
            connection.disconnect();
        } catch (Exception e){
            e.printStackTrace();
            object.put("recode",3);
            object.put("error","系统后台错误");
        }
        return object.toJSONString();
    }

    /**
     * 携带参数访问WebService接口
     */
    public static String getXML(Map querymap){
        String soapXML = ""
                +"
                +"xmlns:web=\"http://tempuri.org/\"  "
                +"xmlns:xsd=\"http://www.w3.org/2003/XMLSchema\" "
                +"xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
                +""
                +""
                +""
                +""
                +querymap.get("PlanEndDateStart")
                +""
                +""
                +querymap.get("PlanEndDateEnd")
                +""
                +""
                +querymap.get("Factory")
                +""
                +""
                +querymap.get("DefID")
                +""
                +""
                +querymap.get("SAPOrderID")
                +""
                +""
                +querymap.get("TeamName")
                +""
                +""
                +""
                +""
                +"";
        return soapXML;
    }
}

三、成功打印
Springboot调用WebServices接口wsdl地址_第1张图片

你可能感兴趣的:(webservice,java,wsdl,spring,boot)