Java 发送和解析Soap Xml数据

最近项目上遇到了一个需要对接客户Soap系统,查看他们C#源码发现格式如下,与之前用过的Xml数据还不太一样,于是又研究了下如何封装。

 请求数据

                String sendMsg="\n" +
                    "\n" +
                    "  \n" +
                    "    \n" +
                    "      103431\n" +
                    "      19\n" +
                    "    \n" +
                    "  \n" +
                    "";

请求方法

    /**
     * 拼接请求体
     * @param table 表面
     * @param fields 参数键值对 name:key value:value
     * @return 拼接后xml
     */
    public static String requestWeb(String table, Map fields) {
        String fieldsMsg = "";
        for (Map.Entry entry : fields.entrySet()) {
            fieldsMsg += "<" + entry.getKey() + ">" + entry.getValue() + "";
        }
        String sendMsg = "\n" +
                "\n" +
                "  \n" +
                "    <" + table + " xmlns=\"http://tempuri.org/\">\n" +
                fieldsMsg +
                "    \n" +
                "  \n" +
                "";
        return sendMsg;
    }


            //表名
            String table="GetUserInfo";
            Map fields = new HashMap<>();
            //参数
            fields.put("code", username);
            fields.put("pwd", password);
            String sendMsg = SoapUtils.requestWeb(table, fields);
//发送请求时需要加上.mediaType(MediaType.parse("text/xml; charset=utf-8"))

 解析数据使用 dom4j

有两种数据格式,单数据(如获取用户信息),列表数据(获取单据信息)

    /**
     * 解析SOAP返回数据
     * @param response 数据源
     * @param table 表名
     * @return Map;空数据返回null
     * 单数据形式
     * 
     *     
     *         
     *         
     *     
     * 
     */
    public static Map responseWeb(String response, String table) {
        //创建Reader对象
        SAXReader reader = new SAXReader();
        //加载xml
        Document document = null;
        Map request = new HashMap();
        try {
            //获取数据流
            InputStream is = new ByteArrayInputStream(response.getBytes());
            document = reader.read(is);
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        //获取根节点
        Element rootElement = document.getRootElement();
        Iterator iterator = rootElement.elementIterator();
        while (iterator.hasNext()) {
            request = new HashMap();
            Element stu = (Element) iterator.next();
            //判断节点是否为Result 如果不是则向下遍历
            while (!stu.getName().equals((table + "Result"))) {
                if (stu.elementIterator().hasNext()) {
                    stu = stu.elementIterator().next();
                }else {
                    return null;
                }
            }
//            List attributes = stu.attributes();
//            System.out.println("======获取属性值======");
//            for (Attribute attribute : attributes) {
//                System.out.println(attribute.getValue());
//            }
            Log.d(TAG, "responseWeb: ======遍历子节点======");
            Iterator iterator1 = stu.elementIterator();
            while (iterator1.hasNext()) {
                Element stuChild = (Element) iterator1.next();
                Log.d(TAG, "节点名:" + stuChild.getName() + "---节点值:" + stuChild.getStringValue());
                request.put(stuChild.getName(), stuChild.getStringValue());
            }
        }
        return request;
    }
    /**
     * 解析SOAP返回数据
     *
     * @param response 数据源
     * @param table    表名
     * @return List Map;空数据返回null
     * list数据形式
     * 
     *     
     *         
     *             
     *             
     *         
     *         
     *             
     *             
     *         
     *     
     * 
     */
    public static List> responseWebList(String response, String table) {
        //创建Reader对象
        SAXReader reader = new SAXReader();
        //加载xml
        Document document = null;
        List> requestList = new ArrayList<>();
        Map request = new HashMap();
        try {
            //获取数据流
            InputStream is = new ByteArrayInputStream(response.getBytes());
            document = reader.read(is);
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        //获取根节点
        Element rootElement = document.getRootElement();
        Iterator iterator = rootElement.elementIterator();
        while (iterator.hasNext()) {
            Element stu = (Element) iterator.next();
            //判断节点是否为Result 如果不是则向下遍历
            while (!stu.getName().equals((table + "Result"))) {
                if (stu.elementIterator().hasNext()) {
                    stu = stu.elementIterator().next();
                } else {
                    return null;
                }
            }
//            List attributes = stu.attributes();
//            System.out.println("======获取属性值======");
//            for (Attribute attribute : attributes) {
//                System.out.println(attribute.getValue());
//            }
            Log.d(TAG, "responseWebList: ======遍历子节点======");
            Iterator iterator1 = stu.elementIterator();
            while (iterator1.hasNext()) {
                Element stuChild = (Element) iterator1.next();
                if (stuChild.elementIterator().hasNext()) {
                    Log.d(TAG, "responseWebList: ======遍历孙节点======");
                    Iterator iterator2 = stuChild.elementIterator();
                    request = new HashMap();
                    while (iterator2.hasNext()) {
                        Element stuSon = (Element) iterator2.next();
                        Log.d(TAG, "节点名:" + stuSon.getName() + "---节点值:" + stuSon.getStringValue());
                        request.put(stuSon.getName(), stuSon.getStringValue());
                    }
                }
                requestList.add(request);
            }
        }
        return requestList;
    }


 

你可能感兴趣的:(Android,java,xml,开发语言)