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. ORA-24247问题解决

    错误信息: scott@ORCL> select utl_http.request('www.baidu.com') from dual; select utl_http.request('ww ...

  2. nodejs+express4实现文件上传下载删除和列表展示功能

    0.效果展示 1.创建项目 创建文件夹:express_file_upload npm init # 入口文件选择server.js 安装插件 npm install express npm inst ...

  3. golang指针和结构体

    指针 指针操作 指针包括指针地址.指针类型和指针取值 &: &符号放在变量前面进行取地址操作 **:*放在变量前面根据地址进行取值 指针地址: func main() { var a ...

  4. ~Keven_He的黑历史~

    "先生,我认为文言文比白话文更加简洁" "请举例" "就好像沉鱼落雁这句成语不是比白话文更加简洁吗" "沉鱼落雁是四个字,该用白话 ...

  5. Go微服务框架go-kratos实战学习06:配置中心使用-nacos作为配置中心和 file作为配置存储

    一.kratos 配置介绍 配置文件的作用就是把一些会变化的配置项单独存放,与程序相剥离. 把配置项进行单独管理. kratos 支持多种形式的配置, 比如 file,环境变量. 还支持一些配置软件, ...

  6. logback 常用配置(详解)

    转自:https://blog.csdn.net/qq_36850813/article/details/83092051 官方文档参考:https://logback.qos.ch/manual/a ...

  7. cmake安装及报错解决办法

    安装 yum install cmake 报错 centOS8(x86_64 或 aarch64) 系统下 yum或dnf 默认安装的 cmake-3.18.2-11.el8版本,安装后无法使用,出现 ...

  8. 狂神说Git学习笔记整理

    Git 版本控制 ​ 在开发过程中,项目会进行版本迭代,新版本会取代旧版本,但是我们不希望直接删除旧版本,所以就需要一个版本管理器来管理新旧版本,不然就是手动控制... 多人开发必须使用版本控制!!! ...

  9. Nebula Graph 源码解读系列 | Vol.06 MATCH 中变长 Pattern 的实现

    目录 问题分析 定长 Pattern 变长 Pattern 与变长 Pattern 的组合 执行计划 拓展一步 拓展多步 保存路径 变长拼接 总结 MATCH 作为 openCypher 语言的核心, ...

  10. Scyther 协议形式化验证翻译 (第二章)

    论文概述:$\alpha +\forall (\sum \oint_{3}^{4})$ 第二章:  操作语义 在第二章中我提出了一种新的安全协议的模型,用于定义安全协议以及协议的行为,在明确的模型中执 ...