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并且获得指定名称的节点信息的更多相关文章

  1. dom4j怎么获得指定名称的节点信息

    <?xml version="1.0" encoding="utf-8" ?> <MgUtil> <db_config> & ...

  2. Java进阶(二十七)使用Dom4j解析XML文件

    使用Dom4j解析XML文件 写在前面的话 由于论文实验要求,需要实现操作XML文档,为此想到了dom4j这个工具,使用之后深感受益.在此分享给大家,以此共勉. 注:本文转载自http://blog. ...

  3. java基础 xml 使用dom4j解析 xml文件 servlet根据pattern 找到class

    package com.swift.kaoshi; import java.io.File; import java.util.List; import java.util.Scanner; impo ...

  4. java中采用dom4j解析xml文件

    一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...

  5. 转:在java中使用dom4j解析xml

    JAVA 使用Dom4j 解析XML Java DOM4J Parser - Parse XML Document Dom4j下载及使用Dom4j读写XML简介 在java中使用dom4j解析xml ...

  6. Dom4j解析xml

    public class Dom4jTest { // Dom4j解析xml // 因为所有的方法都需要Dom树 static Document document = null; static Ele ...

  7. 使用dom4j解析XML文档

    dom4j的包开源包,不属于JDK里面,在myeclipse中要单独导入在项目中,这里不累赘了 做这个过程,很慢,因为很多方法没用过不熟悉,自己得去查帮助文档,而且还得去试,因为没有中文版,英文翻译不 ...

  8. 【JAVA使用XPath、DOM4J解析XML文件,实现对XML文件的CRUD操作】

    一.简介 1.使用XPath可以快速精确定位指定的节点,以实现对XML文件的CRUD操作. 2.去网上下载一个“XPath帮助文档”,以便于查看语法等详细信息,最好是那种有很多实例的那种. 3.学习X ...

  9. 用DOM4J解析XML文件案例

    用DOM4J解析XML文件案例,由于DOM4J不像JAXP属于JAVASE里,所以如果要使用DOM4J,则必须额外引入jar包,如图:

随机推荐

  1. svn客户端命令

    记几个常用的命令. 首次拉仓库时,先要进行检出(url可以带端口号): svn checkout http://svn.example.com:9834/repos svn checkout file ...

  2. BSD和云 – 不可错过的BSD聚会

    自2012年开始,微软云计算与企业事业部和Citrix思杰,NetApp达成合作,共同开发出第一版针对Hyper-V虚拟设备驱动以及相关的用户态程序,并将此称之为集成服务 (Integration S ...

  3. python 中*args 和 **kwargs

    简单的可以理解为python 中给函数传递的可变参数,args 是 列表的形式.kwargs 是 key,value的形式,也就是python 中的字典. *args 必须出现在**kwargs 的前 ...

  4. 4-Spark高级数据分析-第四章 用决策树算法预测森林植被

    预测是非常困难的,更别提预测未来. 4.1 回归简介 随着现代机器学习和数据科学的出现,我们依旧把从“某些值”预测“另外某个值”的思想称为回归.回归是预测一个数值型数量,比如大小.收入和温度,而分类则 ...

  5. LintCode Find Minimum In Rotated Sorted Array

    1. 画图, 直观. 2. 讨论数组为空或者个数为零. 3. 讨论首尾, 若为翻转过的则进行查找直到最后两个数进行比较, 取小者. public class Solution { /** * @par ...

  6. svn:cleanup failed previous operation has not finished; run cleanup if it was interrupted

    svn:cleanup failed previous operation has not finished; run cleanup if it was interrupted 今天 大脑一时短路 ...

  7. Android 多线程处理之多线程用法大集合

    handler.post(r)其实这样并不会新起线程,只是执行的runnable里的run()方法,却没有执行start()方法,所以runnable走的还是UI线程. 1.如果像这样,是可以操作ui ...

  8. OS实验报告--FCFS算法

    实验二.作业调度模拟实验 专业:商业软件工程  姓名:王泽锴 学号:201406114113 一.实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 二.实验内容和要求 (1)实验 ...

  9. 关于Cookie的 工具类

    import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; ...

  10. 瞎BB

    今天家里停电了,什么都没干,又开始胡思乱想了.或许有点时候真的应该沉迷一些东西. 小时候其实挺喜欢数学的,考试都是90分,100分,我喜欢思考钻研不懂的题目,花很多时间,所以有的时候会跳过课堂的东西, ...