前言:本文主要讲述调用接口的过程中需要传送xml字符串,此时,创建xml及解析返回的xml极为重要。
XML.java
package com.jalor.xml;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
/**
* JAVA构建XML字符串并解析
* @author Administrator
*
*/
public class XML {
/**
* 请求构建XML
* @return
*/
public String createXmlString (){
String xml = "";
try {
// 构建XML
String requestXml = buildRequestXml();
System.out.println(requestXml);
//把字符串转换为输入流
ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(requestXml.getBytes("UTF-8"));
System.out.println(arrayInputStream);
//获取XML(流里取得)
StringBuffer buf = new StringBuffer();
InputStream stream = arrayInputStream;
BufferedReader br = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
String line;
while (null != (line = br.readLine())) {
buf.append(line);
}
xml = buf.toString();
}
catch (Exception e) {
e.printStackTrace();
}
return xml;
}
/**
* 构建XML
* @param
* @return
*/
public static String buildRequestXml() {
String requestXml = "";
try {
//创建请求报文
Document document = DocumentHelper.createDocument();
document.setXMLEncoding("UTF-8");
Element message = document.addElement("Message");
//创建请求报文头
Element header = message.addElement("header");
header.addElement("action").addText("validateUser");
header.addElement("userName").addText("xxxxxx");
header.addElement("password").addText("xxxxxx");
header.addElement("service").addText("siteadmin");
header.addElement("siteName").addText("box");
header.addElement("type").addText("XML");
header.addElement("version").addText("30");
//请求报文体
Element body = message.addElement("body");
Element parameter = body.addElement("parameter");
parameter.addElement("type").addText("1");
parameter.addElement("value").addText("xxxxx");
body.addElement("password").addText("xxxxx");
requestXml = document.asXML();
} catch (Exception e) {
String msg = "构建请求XML失败";
System.out.println(msg);
}
return requestXml;
}
/**
* 调用接口
* @param xml
* @return
*/
public String analysis(String xml){
String rt = "";
try {
// 创建url资源
URL url = new URL("http://xxxxxxxxx");
// 建立http连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 设置允许输出
conn.setDoOutput(true);
conn.setDoInput(true);
// 设置不用缓存
conn.setUseCaches(false);
// 设置传递方式
conn.setRequestMethod("POST");
// 设置维持长连接
conn.setRequestProperty("Connection", "Keep-Alive");
// 设置文件字符集:
conn.setRequestProperty("Charset", "UTF-8");
//转换为字节数组
byte[] data = xml.getBytes();
// 设置文件长度
conn.setRequestProperty("Content-Length", String.valueOf(data.length));
// 设置文件类型:
conn.setRequestProperty("contentType", "text/xml");
// 开始连接请求
conn.connect();
OutputStream out = conn.getOutputStream();
// 写入请求的字符串
out.write(data);
out.flush();
out.close();
System.out.println(conn.getResponseCode());
// 请求返回的状态
if (conn.getResponseCode() == 200) {
System.out.println("连接成功");
// 请求返回的数据
InputStream in = conn.getInputStream();
String message = null;
try {
byte[] data1 = new byte[in.available()];
in.read(data1);
// 转成字符串
message = new String(data1);
//从返回的xml文件中获取想要的URL
rt = getByXML(message);
} catch (Exception e1) {
e1.printStackTrace();
}
} else {
System.out.println("no++");
}
} catch (Exception e) {
e.printStackTrace();
}
return rt;
}
/**
* 从xml中获取url
* @param xmlStr
* @return
*/
public static String getByXML(String xmlStr){
String rt = "";
try {
Document document=DocumentHelper.parseText(xmlStr);
// 获取节点对象,注意引号内的“//”必须加 ,否则报错
Node result=document.selectSingleNode("//result");
// 根据返回值判断接口是否请求成功
if (result.getText().equals("SUCCESS")) {
Node hostUrl=document.selectSingleNode("//hostUrl");
rt = hostUrl.getText();
}
}
catch (DocumentException e) {
e.printStackTrace();
}
return rt;
}
}
测试案例 toXml.java
package com.jalor.xml;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
/**
* 构建请求XML
* @author Administrator
*
*/
public class toXml {
public static void main(String[] args) throws IOException {
//构建请求XML
String requestXml = buildRequestXml();
System.out.println(requestXml);
//把字符串转换为输入流
ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(requestXml.getBytes("UTF-8"));
System.out.println(arrayInputStream);
//获取XML(流里取得)
StringBuffer buf = new StringBuffer();
InputStream stream = arrayInputStream;
BufferedReader br = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
String line;
while (null != (line = br.readLine())) {
buf.append(line);
}
String xml = buf.toString();
System.out.println(xml);
System.out.println("----------------");
}
/**
* 构建请求XML
* @param
* @return
*/
public static String buildRequestXml() {
String requestXml = "";
try {
//创建请求报文
Document document = DocumentHelper.createDocument();
document.setXMLEncoding("UTF-8");
Element message = document.addElement("Message");
//创建请求报文头
Element header = message.addElement("header");
header.addElement("action").addText("validateUser");
header.addElement("userName").addText("admin");
header.addElement("password").addText("hbmt-688");
header.addElement("service").addText("siteadmin");
header.addElement("siteName").addText("box");
header.addElement("type").addText("XML");
header.addElement("version").addText("30");
//SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//header.addElement("flowintime").addText(sdf.format(new Date()));
//请求报文体
Element body = message.addElement("body");
Element parameter = body.addElement("parameter");
parameter.addElement("type").addText("1");
parameter.addElement("value").addText("44165@103810972");
body.addElement("password").addText("123456");
requestXml = document.asXML();
} catch (Exception e) {
String msg = "构建请求XML失败";
System.out.println(msg);
}
return requestXml;
}
}
提取码:i4vt
注意:本文归作者所有,未经作者允许,不得转载