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

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

//报文发送

<dependency>

<groupId>com.squareup.okhttp3</groupId>

<artifactId>okhttp</artifactId>

<version>3.8.0</version>

</dependency>

//报文解析

<dependency>

<groupId>xom</groupId>

<artifactId>xom</artifactId>

<version>1.2.5</version>

</dependency>

报文示例

<STUDENT>

<AGE>18</AGE>

<NAME>

<XING>赵</XING>

<MING>明玉</MING>

</NAME>

<NAME>

<XING>沙</XING>

<MING>明德</MING>

</NAME>

</STUDENT>

报文拼接

StringBuffer strBuff = new StringBuffer();

strBuff.append("<STUDENT>");

strBuff.append("<AGE>18</AGE>");

strBuff.append("<NAME>");

strBuff.append("<XING>赵</XING>");

strBuff.append("<MING>明玉</MING>");

strBuff.append("</NAME>");

strBuff.append("<NAME>");

strBuff.append("<XING>沙</XING>");

strBuff.append("<MING>明德</MING>");

strBuff.append("</NAME>");

strBuff.append("</STUDENT>");

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().retryOnConnectionFailure(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> NAME;

public String getAGE() {

return AGE;

}

public void setAGE(String AGE) {

this.AGE = AGE;

}

public List<NAME> getNAME() {

return NAME;

}

public void setNAME(List<NAME> 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格式的返回结果 但是里面的“<”,“>”都是“&lt;”,“&gt;”显示 所以就需要解析,具体解析见下表

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

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

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

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

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

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

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

Document document = DocumentHelper.parseText(ret);

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

Element root = document.getRootElement();

// root节点下的子节点

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

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

String healthCode = business.getStringValue();

// 拼接返回值

Map<String,Object> thisResult = new HashMap();

thisResult.put("healthCode",healthCode);

resultList.add(thisResult);

// 统一返回值

Map<String,Object> returnset = new HashMap<>();

xml解析五种格式:

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

<?xml version="1.0" encoding="utf-8" ?>

<Root>

<business>我想要的值:healthCode</business >

</Root>

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

以上这篇java中xml进行报文发送和解析操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

以上是 java中xml进行报文发送和解析操作 的全部内容, 来源链接: utcz.com/z/335817.html

回到顶部