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. An Introduction to ANYDATA

    以下内容来自Oracle FAQ writen By Kevin,关于ANYDATA类型在项目中的应用. My newest project needed to create a record kee ...

  2. docker基于commit方式为镜像添加SSH服务

    下载启动镜像 docker pull ubuntu: 18.04 docker run -it ubuntu:18.04 bash 配置软件源 备份/etc/apt/sources.list#备份cp ...

  3. 分享一个Github相关彩蛋

    楼上很多回答 都是基于手把手实操Github.Git源代码管理相关, 这些操作"无他,唯手熟尔". 今天提供一个github上阅读源码的小技巧,逆天级别的彩蛋. 要想成为大神,Gi ...

  4. IDA 常用快捷键记录

    常用快捷键1 1.切换文本视图与图表视图 空格键 2.返回上一个操作地址 ESC 3.搜索地址和符号 G 4.对符号进行重命名 N 5.常规注释 冒号键 6.可重复注释 分号键 7.添加标签 Alt+ ...

  5. 案例分享:Qt高频fpga采集数据压力位移速度加速度分析系统(通道配置、电压转换、采样频率、通道补偿、定时采集、距离采集,导出exce、自动XY轴、隐藏XY轴、隐藏显示通道,文件回放等等)

    需求   1.0-7通道压力采集,采集频率1~100Khz(1,10,20,30-1000Khz):  2.0-7通道压力,可设置补偿值,测量范围:  3.编码器0,1脉冲采集,计算位移,速度,加速度 ...

  6. ASP.NET Core 微信支付(四)【支付结果通知回调(未按照官方步骤) APIV3】

    官方文档 支付通知API 证书和回调报文解密 参考资料 netcore 中没有Request.InputStream 理论实战 对于我来说,这个微信支付结果通知回调有两个难点. 难点一 一开始在想是怎 ...

  7. Springboot 撞上 NebulaGraph——NGbatis 初体验

    本文首发于 NebulaGraph 公众号 https://mp.weixin.qq.com/s/z56o6AEz1Z4RmS8Zdx6dTA 大家好,我是开源项目 NGbatis 的发起人大叶(Co ...

  8. Volatile关键字原理

    转载请标明:https://www.cnblogs.com/tangZH/p/15113505.html 一.如果一个变量被volatile关键字修饰,那么所有线程都是可见的.所谓可见就是,当一条线程 ...

  9. 谈谈在incubator-dolphinscheduler 中为啥不能及时看到python任务输出的print日志

    一.incubator-dolphinscheduler 中如何获取shell类型的节点或者python类型的节点任务的日志 1.在org.apache.dolphinscheduler.server ...

  10. Java 多线程------例子(1) --创建 三个窗口 买票 总票数为 100张 使用继承Thread类的方式

    1 package com.bytezero.threadexer; 2 3 4 5 /** 6 * 7 * 创建 三个窗口 买票 总票数为 100张 使用继承Thread类的方式 8 * @auth ...