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. POJ 2653

    题目大意:一个小孩不断往地上扔棍子,共n根,求结束后共有多少根不与去他相交. 解法思路:典型的判断线段相交问题,利用快速排斥+双跨立判断相交,最后输出没相交的. (图片来源:http://www.2c ...

  2. Nginx下css的链接问题

    放在 Nginx 下的网页代码,在链接外部 css 文件时,可能出现没有链接成功的问题.需要在 nginx.conf 里的 http 下添加一行. http { include mime.types;

  3. RBM阅读笔记

    RBM包含两个层,可见层(visble layer)和隐藏层(hidden layer).神经元之间的连接具有以下特点:层内无连接,层间全连接.RBM可以看做是一个二分图(神经元当做顶点,神经元之间的 ...

  4. JDBC使用事务实例

    package qddx.JDBC; import java.sql.*; public class useTransaction { public static void main(String[] ...

  5. Android之ScrollView嵌套ListView和GridView冲突

    由于ListView,GridView本身都继承于ScrollView,一旦在ScrollView中嵌套ScrollView, 在ScrollView中嵌套使用ListView或者GridView,L ...

  6. google gtest window 平台应用

    下载gtest:https://code.google.com/p/googletest/downloads/detail?name=gtest-1.7.0.zip 编译: 会出现的问题:error ...

  7. linux下根据进程名字获取PID,类似pidof(转)

    linux有一个命令行工具叫做pidof,可以根据用户输入的进程名字查找到进程号,但有时候我们需要在程序里实现,不想调用system,在查阅了很多版本的pidof源代码后,没有发现一个自己感觉比较好的 ...

  8. ubuntu 安装mongodb

    安装 mongodb sudo apt-get install mongodb 创建目录(放在单独文件夹中) mkdir data/aa 在目录外面启动,端口为27017 mongod -dbpath ...

  9. 如何分析解决Android ANR

    来自: http://blog.csdn.net/tjy1985/article/details/6777346 http://blog.csdn.net/tjy1985/article/detail ...

  10. 安装第三方Python模块,增加InfoPi的健壮性

    这3个第三方Python模块是可选的,不安装的话InfoPi也可以运行. 但是如果安装了,会增加InfoPi的健壮性. 目录 1.cchardet    自动检测文本编码 2.lxml    用于解析 ...