java中xml进行报文发送和解析操作

网友投稿 738 2022-11-16


java中xml进行报文发送和解析操作

利用OKhttp网络框架,进行Maven项目管理

//报文发送

com.sqhttp://uareup.okhttp3

okhttp

3.8.0

//报文解析

xom

xom

1.2.5

报文示例

18

明玉

明德

报文拼接

StringBuffer strBuff = new StringBuffer();

strBuff.append("");

strBuff.append("18");

strBuff.append("");

strBuff.append("");

strBuff.append("明玉");

strBuff.append("");

strBuff.append("");

strBuff.append("");

strBuff.append("明德");

strBuff.append("");

strBuff.append("");

String xmlStr = strBuff.toString;

报文发送,post请求接口调用,xmlStr为xml格式请求参数体

public String postXml(String xmlStr){

//可改变请求参数体编码GBK/UTF-8

RequestBody body= RequestBody.create(MediaType.parse("application/xml;charset=GBK"), xmlStr);

//url为接口地址

Request requestOk = new Request.Builder().url("http://192.168.0.103:8007").post(body).build();

//网络请求

OkHttpClient client = new OkHttpClient.Builder().retryOnConnectionFaihttp://lure(true).build();

//可手动设置连接时长

OkHttpClient client = new OkHttpClient().newBuilder().connectTimeout(60000, TimeUnit.MILLISECONDS)

.readTimeout(60000, TimeUnit.MILLISECONDS)

.build();

//获取处理结果

Response response = null;

try {

response = client.newCall(requestOk).execute();

} catch (IOException e) {

e.printStackTrace();

}

//获取响应

String jsonString = response.body().string();

return jsonString;

}

报文解析,进行实体解析

//STUDENT为XML最大节点

JAXBContext context = JAXBContext.newInstance(STUDENT.class);

Unmarshaller unmarshaller = context.createUnmarshaller();

//jsonString为报文响应

STUDENT student = (STUDENT)unmarshaller.unmarshal(new StringReader(jsonString));

实体类

//XmlRootElement注解是将类与XML元素进行映射,XML节点与属性大小写保持一致

@XmlRootElement(name ="STUDENT")

public class STUDENT implements Serializable {

private String AGE;

private List NAME;

public String getAGE() {

return AGE;

}

public void setAGE(String AGE) {

this.AGE = AGE;

}

public List getNAME() {

return NAME;

}

public void setNAME(List NAME) {

this.NAME = NAME;

}

@Override

public String toString() {

return "Cccc{" +

"AGE='" + AGE + '\'' +

", NAME=" + NAME +

'}';

}

}

补充知识:java发送内容为xml格式请求并解析返回json结果

封装成静态请求方法:

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.ConnectException;

import java.net.MalformedURLException;

import java.net.URL;

import java.net.URLConnection;

/**

* 发送HTTP的一种方法

* GaoLiang

*/

public class HttpSendUtil {

public static String xmlPost(String urlStr, String xmlInfo) {

try {

URL url = new URL(urlStr);

URLConnection con = url.openConnection();

con.setDoOutput(true);

// con.setRequestProperty("Pragma:", "no-cache");

// con.setRequestProperty("Cache-Control", "no-cache");

// 一定要设置报文格式,否则发送失败

con.setRequestProperty("Content-Type", "text/xml");

OutputStreamWriter out = null;

try {

out = new OutputStreamWriter(con.getOutputStream());

} catch (ConnectException e) {

// e.printStackTrace();

return "Connection refused";

}

// System.out.println("urlStr=" + urlStr);

// System.out.println("xmlInfo=" + xmlInfo);

out.write(new String(xmlInfo.getBytes("ISO-8859-1")));

out.flush();

out.close();

BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));

StringBuilder stringBuilder = new StringBuilder();

String line = "";

for (line = br.readLine(); line != null; line = br.readLine()) {

// System.out.println(line);

stringBuilder.append(line);

}

return stringBuilder.toString();

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return null;

}

在外部调用静态方法:

// 请求的xml服务地址

String url = url;

// 请求参数 由于是手动拼写的参数很长 看起来也不美观就不放了(手动哭脸)

String param = "" ;

// 发送请求 调用上面的静态方法

String ret = xmlPost(url,param);

// 得到的是xml格式的返回结果 但是里面的“<”,“>”都是“<”,“>”显示 所以就需要解析,具体解析见下表

ret = ret.replaceAll("<", "<");

ret = ret.replaceAll(">", ">");

ret = ret.replaceAll("&", "&");

ret = ret.replaceAll(""", "\"");

ret = ret.replaceAll("'", "\'");

// 因为接口最终要返回的是json格式 所以还要把想要的值取出来解析成String

// 解析 拿到节点里想要的值

Document document = DocumentHelper.parseText(ret);

// 根节点 这里不一定要和根节点取一样的名字 可自定义 这么写是方便理解

Element root = document.getRootElement();

// root节点下的子节点

Element business = root.element("business");

//解析完 取到business节点下的值

String healthCode = business.getStringValue();

// 拼接返回值

Map thisResult = new HashMap();

thisResult.put("healthCode",healthCode);

resultList.add(thisResult);

// 统一返回值

Map returnset = new HashMap<>();

xml解析五种格式:

补充一下:xml返回结果类似于这样

我想要的值:healthCode

最后,由于时间比较匆忙,又没有接触过xml格式请求,确实折磨了我一阵子时间,搜了好多大神写的博客,最终整理出自己的。写的比较笨希望大家帮忙指点,互相学习。 奥利给,冲了!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring Bean生命周期源码原理图解
下一篇:通过System.getProperty配置JVM系统属性
相关文章

 发表评论

暂时没有评论,来抢沙发吧~