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. js根据输入字符长度自动调整textarea高度

    1.编写html <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  2. 文件的拓展及文件函数,定义函数及函数参数---day09

    1.文件的拓展模式 utf-8 编码格式下,默认一个中文三个字节,一个英文或符号占用一个字节 read() 功能:读取字符的个数(里面的参数代表字符个数) seek() 功能:调整指针的位置(里面的参 ...

  3. mysql数据库jar包下载

    1.mysql-connector-java-8.0.16.jar驱动包 链接:https://pan.baidu.com/s/1G1SfPP895wU6YvTOAcTxhA提取码:7r43 2.my ...

  4. 安装SQL Server 具有不支持的属性(Compressed)集。

    安装sqlserver 2014报错信息 D:\Program Files\Microsoft SQL Server 具有不支持的属性(Compressed)集.请通过使用文件夹属性对话框从该文件夹中 ...

  5. 可视化探索开源项目的 contributor 关系

    引语:作为国内外最大的代码托管平台,根据最新的 GitHub 数据,它拥有超 372,000,000 个仓库,其中有 28,000,000 是公开仓.分布式图数据库 NebulaGraph 便是其中之 ...

  6. [C++] epoll编写的echo服务端

    直接贴代码,代码是运行在Linux上面的,通过 g++ epoll.cpp编译 #include <sys/socket.h> #include <sys/epoll.h> # ...

  7. Failed to execute goal on project WebBackend: Could not resolve dependencies for project com.lang.yi:WebBackend:jar:1.0.0

    一.问题由来 自己在搭建项目的时候报一个错误,如标题所示,具体错误信息如下: Failed to execute goal on project WebBackend: Could not resol ...

  8. axios post xml data方法

    axios#request(config) axios#get(url[,config]) axios#delete(url[,config]) axios#head(url[,config]) ax ...

  9. 浏览器的文件访问 API 入门(英文)- 资料

    浏览器的文件访问 API 入门(英文)- 资料 浏览器现在提供了文件访问 API(File System Access API),允许网页 JS 脚本读写本地文件,本文是一个详细的介绍.另外,也可以参 ...

  10. CSS Navigation - vscode 插件 - vue css 跳转

    CSS Navigation - vscode 插件 - vue css 跳转