soap发送报文请求和dom4j解析XML并且获得指定名称的节点信息
package com.lzw.b2b.soap;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class DynamicSoapclientCall {
private static Logger logger = LoggerFactory.getLogger(DynamicSoapclientCall.class);
private String namespace;
private String methodName;
private String wsdlLocation;
private String soapResponseData;
public DynamicSoapclientCall(String namespace, String methodName, String wsdlLocation) {
this.namespace = namespace;
this.methodName = methodName;
this.wsdlLocation = wsdlLocation;
}
public int invoke(Map<String, String> patameterMap) throws Exception {
PostMethod postMethod = new PostMethod(wsdlLocation);
String soapRequestData = buildRequestData(patameterMap);
byte[] bytes = soapRequestData.getBytes("utf-8");
InputStream inputStream = new ByteArrayInputStream(bytes, 0, bytes.length);
RequestEntity requestEntity = new InputStreamRequestEntity(inputStream,
bytes.length, "application/soap+xml; charset=utf-8");
postMethod.setRequestEntity(requestEntity);
HttpClient httpClient = new HttpClient();
int statusCode = httpClient.executeMethod(postMethod);
soapResponseData = postMethod.getResponseBodyAsString();
return statusCode;
}
private String buildRequestData(Map<String, String> patameterMap) {
StringBuffer soapRequestData = new StringBuffer();
soapRequestData.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
soapRequestData.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\""
+ " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""
+ " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">");
soapRequestData.append("<soapenv:Body>");
soapRequestData.append("<" + methodName + " xmlns=\"" + namespace + "\">");
soapRequestData.append("<" + methodName + "ln>");
Set<String> nameSet = patameterMap.keySet();
for (String name : nameSet) {
soapRequestData.append("<" + name + ">" + patameterMap.get(name)
+ "</" + name + ">");
}
soapRequestData.append("</" + methodName + "ln>");
soapRequestData.append("</" + methodName + ">");
soapRequestData.append("</soapenv:Body>");
soapRequestData.append("</soapenv:Envelope>");
logger.info("soapRequestData:"+soapRequestData.toString());
return soapRequestData.toString();
}
public String getSoapResponseData() {
return soapResponseData;
}
/**
* 获取文件的xml对象,然后获取对应的根节点root
*/
public static void getRoot(String xmlString) throws Exception {
Document document = DocumentHelper.parseText(xmlString);
final Element root = document.getRootElement();// 获取根节点
getNodes(root);// 从根节点开始遍历所有节点
}
/**
* 从指定节点Element node开始,递归遍历其所有子节点
*/
@SuppressWarnings("unchecked")
public static void getNodes(final Element node) {
System.out.println("-------开始新节点-------------");
// 当前节点的名称、文本内容和属性
System.out.println("当前节点名称:" + node.getName());// 当前节点名称
System.out.println("当前节点的内容:" + node.getTextTrim());// 当前节点内容
final List<Attribute> listAttr = node.attributes();// 当前节点的所有属性
for (final Attribute attr : listAttr) {// 遍历当前节点的所有属性
final String name = attr.getName();// 属性名称
final String value = attr.getValue();// 属性的值
System.out.println("属性名称:" + name + "---->属性值:" + value);
}
// 递归遍历当前节点所有的子节点
final List<Element> listElement = node.elements();// 所有一级子节点的list
for (final Element e : listElement) {// 遍历所有一级子节点
getNodes(e);// 递归
}
}
@SuppressWarnings("unchecked")
public List<Map<String,String>> loadAdPlayListMap(){
try {
if (StringUtils.isNotBlank(adType) && adType.equals("13")) {
File adXmlFile = ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX + "lzw.xml");
String adXml = FileUtils.readFileToString(adXmlFile, IHttpRequest.DEFAULT_CHARSET);
Document document = DocumentHelper.parseText(adXml);
Element element = document.getRootElement();
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
if (element != null) {
List<Element> itemElements = element.elements("item");
for (Element item : itemElements) {
List<Element> playerUrlElements = item.elements("playerUrl");
for (Element playerUrlElement : playerUrlElements) {
Map<String, String> map = new HashMap<String, String>();
map.put("type", playerUrlElement.attributeValue("type"));
map.put("duration", playerUrlElement.attributeValue("duration"));
map.put("name", playerUrlElement.attributeValue("name"));
String tag = playerUrlElement.attributeValue("tag");
map.put("tag", tag);
map.put("playerUrl", playerUrlElement.getTextTrim() + "&" + tag);
list.add(map);
}
}
this.adPlayListMap = list;
logger.debug("xml信息:{}",JsonUtils.objectToJson(this.adPlayListMap));
return adPlayListMap;
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public void parseXml() throws Exception {
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+ "<voole>"
+ "<list>"
+ "<epg>"
+ "<title>hljgd</title>"
+ "<price>48.88</price>"
+ "</epg>"
+ "<epg>"
+ "<title mac=\"30026\">jndx</title>"
+ "<price>39.95</price>"
+ "</epg>"
+ "</list>"
+ "</voole>";
Document doc = DocumentHelper.parseText(xml);
Element database = (Element) doc.selectSingleNode("/voole/list/epg[2]");
@SuppressWarnings("unchecked")
List<Element> list = database.elements(); // 得到database元素下的子元素集合
for (Element element : list) {
// getName()是元素名,getText()是元素值
System.out.println(element.getName() + ": " + element.getText());
}
List<?> fieldList = doc.selectNodes("//*[name()='title']");
Iterator<?> fieldItr = fieldList.iterator();
while (fieldItr.hasNext()) {
Element fieldElement = (Element) fieldItr.next();
System.out.println("当前 XPath: " + fieldElement.getPath());
String fieldName = fieldElement.getText(); // field
System.out.println(fieldName); // name
String fieldClass = fieldElement.attributeValue("mac"); // field
System.out.println(fieldClass);
}
}
public static void main(String[] args) throws Exception {
DynamicSoapclientCall dynamicHttpclientCall = new DynamicSoapclientCall(
"http://webservice.lzw.shtel.com", "ServiceAuth",
"http://1.1.1.1/LzwAuth");
Map<String, String> patameterMap = new HashMap<String, String>();
patameterMap.put("SPID", "1");
patameterMap.put("UserID", "12");
patameterMap.put("UserToken", "123");
patameterMap.put("ProductID", "1234");
patameterMap.put("ServiceID", "12345");
patameterMap.put("ContentID", "123456");
patameterMap.put("TimeStamp", "1234567");
patameterMap.put("IP", "12345678");
patameterMap.put("MAC", "123456789");
patameterMap.put("TransactionID", "1234567890");
String soapRequestData = dynamicHttpclientCall.buildRequestData(patameterMap);
System.out.println(soapRequestData);
int statusCode = dynamicHttpclientCall.invoke(patameterMap);
if(statusCode == 200) {
logger.info("调用成功!");
System.out.println(dynamicHttpclientCall.soapResponseData);
} else {
logger.info("调用失败!错误码:" + statusCode);
}
}
}
soap发送报文请求和dom4j解析XML并且获得指定名称的节点信息的更多相关文章
- dom4j怎么获得指定名称的节点信息
<?xml version="1.0" encoding="utf-8" ?> <MgUtil> <db_config> & ...
- Java进阶(二十七)使用Dom4j解析XML文件
使用Dom4j解析XML文件 写在前面的话 由于论文实验要求,需要实现操作XML文档,为此想到了dom4j这个工具,使用之后深感受益.在此分享给大家,以此共勉. 注:本文转载自http://blog. ...
- java基础 xml 使用dom4j解析 xml文件 servlet根据pattern 找到class
package com.swift.kaoshi; import java.io.File; import java.util.List; import java.util.Scanner; impo ...
- java中采用dom4j解析xml文件
一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...
- 转:在java中使用dom4j解析xml
JAVA 使用Dom4j 解析XML Java DOM4J Parser - Parse XML Document Dom4j下载及使用Dom4j读写XML简介 在java中使用dom4j解析xml ...
- Dom4j解析xml
public class Dom4jTest { // Dom4j解析xml // 因为所有的方法都需要Dom树 static Document document = null; static Ele ...
- 使用dom4j解析XML文档
dom4j的包开源包,不属于JDK里面,在myeclipse中要单独导入在项目中,这里不累赘了 做这个过程,很慢,因为很多方法没用过不熟悉,自己得去查帮助文档,而且还得去试,因为没有中文版,英文翻译不 ...
- 【JAVA使用XPath、DOM4J解析XML文件,实现对XML文件的CRUD操作】
一.简介 1.使用XPath可以快速精确定位指定的节点,以实现对XML文件的CRUD操作. 2.去网上下载一个“XPath帮助文档”,以便于查看语法等详细信息,最好是那种有很多实例的那种. 3.学习X ...
- 用DOM4J解析XML文件案例
用DOM4J解析XML文件案例,由于DOM4J不像JAXP属于JAVASE里,所以如果要使用DOM4J,则必须额外引入jar包,如图:
随机推荐
- oracle远程连接配置
今日需要对站内所有的空间数据做入库处理,所以在服务器上安装了oracle,在本地需要对其进行连接,在网上查阅了相关资料,整理如下: 远程服务端配置:1. 数据库配置 因为要为外界客户端提供数据服 ...
- ThinkPHP BASE
对于thinkphp 开源框架来说 是一个基于 模型/控制器/视图 的结构 V(View):视图接收来自用户操作的信息返回到 对应的控制器或方法 C (controller):控制器则调用 相 ...
- JDBC查询指定条件的数据
使用select语句的条件查询,需要用到where子句. package qddx.JDBC; import java.sql.*; public class QueryById { public b ...
- Retrofit学习笔记01
retrofit把你的HTTP API改造成java接口. public interface GitHubService { @GET("users/{user}/repos") ...
- dll 和 lib--初级
今天碰到一个奇怪的问题,一个第三方的库,提供了A.dll和A.lib,编译的时候可以通过,运行的时候一直报错,说找不到A.dll. 我就在main函数那里设了断点,发现没有进main 函数的时候就已经 ...
- https/相对路径,绝对路径
1. htttps HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全 ...
- Static List
Static ListStatic List is the smart implementation of list data structure for those languages that h ...
- Kindle DXG和Win10 64bits无法连接的问题
直入主题:换根数据线. 不要觉得答案简单,我就是不负责任的在调侃. 在得出这条答案之前,我的思路是,既然插上线以后,kindle的充电指示灯会亮,那就应该不是线的问题. 所以实际的过程是我安装了驱动之 ...
- Linux-TCP Queue的一些问题
先来回顾下三次握手里面涉及到的问题:1. 当 client 通过 connect 向 server 发出 SYN 包时,client 会维护一个 socket 等待队列,而 server 会维护一个 ...
- 利用.net的内部机制在asp.net中实现身份验证
知识点: 在ASP.NET中,任何页面都是继承于System.Web.UI.Page,他提供了Response,Request,Session,Application的操作.在使用Visual Stu ...