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. HttpFox插件安装和打开教程

    HttpFox插件安装教程 1.打开火狐浏览器,选择右上角的打开菜单 2.选择附加组件,在获取附件组件栏中搜索HttpFox插件 3.找到HttpFox插件选择安装 4.安装完成后选择左边的扩展栏确认 ...

  2. C# 加载 SQLite DLL问题

    /********************************************************************************* * C# 加载 SQLite DL ...

  3. AOP 手动,半自动,全自动

    dao层 package com.yaorange.dao; public interface StudentDao { public void saveStudent(); public void ...

  4. 用canvas生成二维码

    $("#actimg").qrcode({                        render: "canvas",    //设置渲染方式,有tabl ...

  5. 个人制作-css+html旋转立方体的制作

    源代码: <!DOCTYPE html><html><head>    <title></title>    <meta charse ...

  6. solr+mongo-connector+mongdb+tomcat集成

    话题:solr安装 一.下载solr 本例采用4.10.3版本. Solr所有版本下载地址:http://archive.apache.org/dist/lucene/solr/ 下载完成后,解压的目 ...

  7. 编译.NET项目的时候报错错误“ResGen.exe”已退出,代码为 -1073741701

    解决的办法如下: 1.关闭所有Visual Studio: 2.以管理员的身份打开命令提示窗口:(开始-运行-cmd)         //有人说要使用vs tools 里面的控制台 亲试无卵用 3. ...

  8. SQL EXEC 命令用法

    EXEC命令有两个用法: 1.执行一个存储过程,或者执行一个动态批次. 2.批次是一个内容为SQL语句的字符串. 举列子: 1.exec name_proc :没有参数 exec name_proc ...

  9. 2016 、12 、11<本周>

    翻了翻记录 想把上周没搞出来的1159和day2T2搞出来.

  10. 【Django】Django 定时任务实现(django-crontab+command)

    一.编写自定义django-admin命令 注:利用django-admin自定义命令我们可以ORM框架对model进行操作,如:定时更新数据库,检测数据库状态..... Django为项目中每一个应 ...