http调用webservice接口方法

该博客介绍了如何使用Java的HttpURLConnection类实现POST方式调用WebService接口。代码示例展示了从建立连接、设置请求头、发送XML数据到接收并解析响应的过程。主要涉及网络编程和XML处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HTTP调用webservice接口方法

 

完整代码如下:

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.dom4j.Element;
/**
 * 
 * Copyright © 2020 All rights reserved.
 * @Title: WebServicePostSoapUtil
 * @Package: 
 * @Description:
 * @author: 
 * @date: 2020年3月30日 
 */
public class WebServicePostSoapUtil {
     static Logger logger = LoggerFactory.getLogger(WebServicePostSoapUtil.class);

        // 编码格式。发送编码格式统一用UTF-8
        private static final String ENCODING = "UTF-8";

        // 设置连接超时时间,单位毫秒。
        private static final int CONNECT_TIMEOUT = 6000;

        // 请求获取数据的超时时间(即响应时间),单位毫秒。
        private static final int SOCKET_TIMEOUT = 6000;


        public static Map<String,Object> map = new HashMap<String,Object>();
        /**
         * 发起webservice请求
         * @param url
         * @param soap
         * @return String
         * @throws Exception
         */
        public static String doPostSoap(String url, String soap,String resultNodeName) throws IOException, DocumentException {
            String returnStr = "";
            //创建url地址
            URL wsUrl = new URL(url);
            //打开连接
            URLConnection conn = wsUrl.openConnection();
            //转换成HttpURL
            HttpURLConnection httpConn = (HttpURLConnection) conn;
            //打开输入输出的开关
            httpConn.setDoInput(true);
            httpConn.setDoOutput(true);
            //设置请求方式
            httpConn.setRequestMethod("POST");
            //设置请求的头信息
            httpConn.setRequestProperty("Content-type", "text/xml;charset=UTF-8");
            //获得输出流
            OutputStream out = httpConn.getOutputStream();
            //发送数据
            out.write(soap.getBytes());
            //判断请求成功
            if (httpConn.getResponseCode() == 200) {
            //获得输入流
            InputStream in = httpConn.getInputStream();
            //使用输入流的缓冲区
            BufferedReader reader = new BufferedReader(new InputStreamReader(in,"UTF-8"));
            StringBuffer sb = new StringBuffer();
            String line = null;
            //读取输入流
            while ((line = reader.readLine()) != null) {
                sb.append(line);
            }
            logger.info("返回xml:"+sb.toString());
            Map map = parse(sb.toString());
            logger.info("返回xml转map:"+map);
            returnStr=map.get(resultNodeName).toString();
              in.close();
            }

            out.close();
            httpConn.disconnect();
            return returnStr;
        }
     

        public static Map parse(String soap) throws DocumentException{
            Document doc = DocumentHelper.parseText(soap);//报文转成doc对象
            Element root = doc.getRootElement();//获取根元素,准备递归解析这个XML树
            getCode(root);
            return map;
        }

        public static void getCode(Element root){
            if(root.elements()!=null){
                List<Element>list = root.elements();//如果当前跟节点有子节点,找到子节点
                for(Element e:list){//遍历每个节点
                    if(e.elements().size()>0){
                        getCode(e);//当前节点不为空的话,递归遍历子节点;
                    }
                    if(e.elements().size()==0){
                        map.put(e.getName(), e.getTextTrim());
                    }//如果为叶子节点,那么直接把名字和值放入map
                }
            }
        }
      
        
        
}
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值