Java封装xml格式参数请求第三方接口


1、引用包

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult; import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.StringWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

2、封装方法生成xml格式文本

里面用到了两个方法

1、getStringFromDocument,从Document对象转换为String字符串返回。

2、createElementWithValue,给某个节点创建子节点并赋值。

这是我写的例子和模板样例

public String getXmlParam(BpMaster bpMaster) {
String RawXml = null; // 返回值
try {
// 创建xml对象
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument(); // 创建根节点
Element ufinterface = doc.createElement("ufinterface");
ufinterface.setAttribute("account", "develop"); // 设置属性
ufinterface.setAttribute("billtype", "customer");
doc.appendChild(ufinterface);
// 创建 bill节点
Element bill = doc.createElement("bill");
ufinterface.appendChild(bill); // 添加bill节点
bill.setAttribute("id", ""); // 设置属性
// 创建 billhead
Element billhead = doc.createElement("billhead");
bill.appendChild(billhead); // 添加 billhead 到 bill下
// 添加billhead子节点和text值
createElementWithValue(doc, billhead, "pk_group", String.valueOf(bpMaster.getParentCompanyId()));
// 规范化XML文档
doc.getDocumentElement().normalize();
// 获取XML原文
RawXml = getStringFromDocument(doc);
} catch (Exception e) {
e.printStackTrace();
}
return RawXml;
}
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.Element; public class XMLGenerator {
public static void main(String[] args) {
try {
// Create the XML document
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument(); // Create the root element
Element ufinterface = doc.createElement("ufinterface");
ufinterface.setAttribute("account", "develop");
ufinterface.setAttribute("billtype", "customer");
ufinterface.setAttribute("isexchange", "Y");
ufinterface.setAttribute("sender", "sys001");
doc.appendChild(ufinterface); // Create the bill element
Element bill = doc.createElement("bill");
ufinterface.appendChild(bill); // Create the billhead element
Element billhead = doc.createElement("billhead");
bill.appendChild(billhead); // Add the elements and their values
createElementWithValue(doc, billhead, "pk_group", "uap60");
createElementWithValue(doc, billhead, "pk_org", "uap60");
createElementWithValue(doc, billhead, "code", "customer_pfxx");
createElementWithValue(doc, billhead, "name", "customer_pfxx");
// Add other elements and their values... // Output the XML document
doc.getDocumentElement().normalize();
System.out.println(getStringFromDocument(doc));
} catch (Exception e) {
e.printStackTrace();
}
} private static void createElementWithValue(Document doc, Element parent, String tagName, String value) {
Element element = doc.createElement(tagName);
element.appendChild(doc.createTextNode(value));
parent.appendChild(element);
} private static String getStringFromDocument(Document doc) {
try {
StringWriter writer = new StringWriter();
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.transform(new DOMSource(doc), new StreamResult(writer));
return writer.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}

3、getStringFromDocument

/**
* @description: 转换Document对象为String并返回
* @author: chuanwei.yang 42624
* @date: 2023/6/26 15:10
* @param: doc
* @return: * @return: java.lang.String
**/
private String getStringFromDocument(Document doc) {
try {
// 接收转换后的字符串结果
StringWriter writer = new StringWriter();
// 生成进行XML文档转换对象
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
// 不省略XML声明
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
// 对输出结果进行缩进处理
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
// 将Document对象表示的XML文档内容转换为字符串,并写入到StringWriter对象中
transformer.transform(new DOMSource(doc), new StreamResult(writer));
// 将转换后的XML内容作为字符串返回
return writer.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

4、createElementWithValue

/**
* @description: 构建XML文件使用,创建子节点和值。
* @author: chuanwei.yang 42624
* @date: 2023/6/26 15:06
* @param: doc
* @param: parent
* @param: tagName
* @param: value
* @return: * @return: void
**/
private void createElementWithValue(Document doc, Element parent, String tagName, String value) {
Element element = doc.createElement(tagName);
element.appendChild(doc.createTextNode(value));
parent.appendChild(element);
}

5、发起请求

拼接xml格式的参数请求接口。

RawXml变量 是生成的xml参数文本。

            String RawXml = getStringFromDocument(doc);	// 调用方法生成xml文本
String apiUrl = "接口地址";
try {
// 创建URL对象和HttpURLConnection连接
URL url = new URL(apiUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // 设置请求方法为POST
connection.setRequestMethod("POST"); // 设置请求头信息
connection.setRequestProperty("Content-Type", "application/xml"); // 启用输出流,并写入XML数据
connection.setDoOutput(true);
OutputStream outputStream = connection.getOutputStream();
outputStream.write(RawXml.getBytes(StandardCharsets.UTF_8));
outputStream.close(); // 发送请求并获取响应
int responseCode = connection.getResponseCode(); // 获取响应码
// 获取响应报文
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
StringBuilder response = new StringBuilder();
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
// 输出响应结果
System.out.println("Response Code: " + responseCode);
System.out.println("Response Body: " + response.toString());
} catch (Exception e) {
e.printStackTrace();
}

6、实现效果

最终生成的xml文件如下:

Java封装xml格式参数请求第三方接口的更多相关文章

  1. python接口自动化(四十一)- 发xml格式参数的post请求(超详解)

    简介 最近在工作中,遇到一种奇葩的接口,它的参数数据是通过xml,进行传递的,不要大惊小怪的,林子大了什么鸟都有,每个人的思路想法不一样,开发的接口也是各式各样的,如果想要统一的话,必须是提前团队已经 ...

  2. JAVA发送xml格式的接口请求

    /** * * @param urlStr 接口地址 * @param xmlInfo xml格式参数数据 * @return */ public static String sendMsgXml(S ...

  3. 【SoapUI、Postman、WebServiceStudio、Jmeter】接口测试工具结合测试webservice接口(发送XML格式参数)

    目录: SoapUI测试webservice接口,发送XML格式参数 Postman测试webservice接口,发送XML格式参数 WebServiceStudio.exe测试webservice接 ...

  4. Java Web系统经常使用的第三方接口

    1. Web Service 接口 1.1 接口方式说明和长处 在笔者的开发生涯中,当作为接口提供商给第三方提供接口时,以及作为client去调用第三方提供的接口时,大部分时候都是使用 Web  Se ...

  5. Spring Boot 2.x基础教程:如何扩展XML格式的请求和响应

    在之前的所有Spring Boot教程中,我们都只提到和用到了针对HTML和JSON格式的请求与响应处理.那么对于XML格式的请求要如何快速的在Controller中包装成对象,以及如何以XML的格式 ...

  6. Java中XML格式的字符串4读取方式的简单比较

    Java中XML格式的字符串4读取方式的简单比较 1.java自带的DOM解析. import java.io.StringReader; import javax.xml.parsers.Docum ...

  7. 分别使用http,express,koa请求第三方接口

    今天又再次恶补了一下http的内容,确切地说是node.js里面的http的内容,啊,百度了半天express怎么请求第三方接口,结果发现自己买的入门书籍都有这个内容.舍近求远,我真是醉了.还有百度上 ...

  8. python接口自动化-发xml格式post请求

    前言 post请求相对于get请求多一个body部分,body部分常见的数据类型有以下四种(注意是常见的,并不是只有4种) application/x-www-form-urlencoded appl ...

  9. 【经验随笔】Restlet Client发送XML格式参数消息

    背景介绍 Restlet Client是一款模拟客户端发送http请求的chrome插件,可以作为驱动调试后台程序,个人觉得比POSTMAN好用.CXF是一款发布restful服务的开源组件. 编写r ...

  10. Ajax实现异步操作实例_针对XML格式的请求数据

    js分类中有一节[原生js异步请求,XML解析]主要说明了js前台是如何处理XML格式请求和如何接受由服务器返回的XML数据的解析,今天我将用一个实例来说明具体要如何操作. 前台的参数类型也是XML使 ...

随机推荐

  1. CSS加JS实现网页返回顶部功能

    最近在设计自己的博客,前端页面在内容很多的时候往下拖动会有滚动条.通常我们都需要一个返回顶部的功能来实现快速来到网页顶部.当然实现方式不止一种,这里我采用的最实用的一种.使用CSS+Jquery方式 ...

  2. python基础语法知识

    1.多组输入没有结束标志的两种表示形式 #method1: try: while True: #代码 except EOFError: pass #method2: while True: try: ...

  3. 我在winform项目里使用“Windows I/O完成端口”的经验分享

    少年!看你骨骼惊奇,是万中无一的练武奇才,我这儿有本武林秘籍,见与你有缘就送你了! 如来神掌 Windows I/O完成端口是一个我至今都说不好的话题,请宽容的接受我这不是科班出身的自学成才的野生程序 ...

  4. ubuntu 23.04 无法联网

    一些参考文章: 解决ubuntu突然无法联网问题 共享主机网络方法: https://www.server-world.info/en/note?os=Ubuntu_22.04&p=squid ...

  5. 【Android逆向】定位native函数在哪个so中方法

    1. 在逆向过程中经常需要定位方法在哪个so中,而app加载的so很多,比如 那么如何快速定位方法在哪里呢 2. 比如如下案例,首先看日志 03-28 11:01:56.457 14566 14566 ...

  6. Ubuntu常用工具和问题整理

    安装Ubuntu虚拟机时常会遇到的几个问题 1.安装时设置镜像 安装Ubuntu系统时设置国内镜像可以加快安装速度:http://mirrors.aliyun.com/ubuntu/ 参考:ubunt ...

  7. ContentType组件表使用

    https://www.shuzhiduo.com/A/qVdepN2r5P/

  8. 07、Etcd 中Raft算法简介

    本篇内容主要来源于自己学习的视频,如有侵权,请联系删除,谢谢. 思考: etcd是如何基于Raft来实现高可用.数据强-致性的? 1.什么是Raft算法 Raft 算法是现在分布式系统开发首选的共识算 ...

  9. Jupyter Notebook 遇上 NebulaGraph,可视化探索图数据库

    在之前的<手把手教你用 NebulaGraph AI 全家桶跑图算法>中,除了介绍了 ngai 这个小工具之外,还提到了一件事有了 Jupyter Notebook 插件: https:/ ...

  10. linux基本文件命令复习笔记

    https://www.bilibili.com/video/BV1ex411x7Em/?p=4&spm_id_from=pageDriver&vd_source=92305fa48e ...