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. Linux下mysql忘记root密码

    一台机器上的MYSQL服务器很久没用了,忘了root密码无法连接.一时情急,网上搜寻办法,解决,记录在此备用. 修改MySQL的登录设置:  //不同的版本的Linux配置文件的位置也不一样,以Lin ...

  2. Android 学习第12课,应用出错信息

    应用在运行时,出现的错误信息都会在LogCat中显示 如果调出LogCat ? 菜单:窗口 -> 显示视图 -> 其他 -> LogCat

  3. 最全的运营推广方案,教你如何从零开始运营APP

    转载自:最全的运营推广方案,教你如何从零开始运营APP(http://www.kusocial.com/9319 ) 最全的运营推广方案,教你如何从零开始运营APP 2014-10-07 • 运营 • ...

  4. ICA和PCA

    http://wenku.baidu.com/link?url=BsmIM7T4CU1D_MgiBzu4Ul1oLnM2Qpmc0sCfXIcD9S20qq3BEkSnuY4RUc7gDZoeFR1N ...

  5. C#编程语言与面向对象—— 多态

    多态编程的基本原理是: 使用基类或接口变量编程. 在多态编程中,基类一般都是抽象类,其中拥有一个或多个抽象方法,各个子类可以根据需要重写这些方法.或者使用接口,每个接口都规定了一个或多个抽象方法,实现 ...

  6. vector使用篇之erase

    由于最近项目使用中发现了之前对vector的一个误区,由此发现自己对vect非常不了解,对此进行了一些了解,由此打算写一下关于vector使用方面的注意点,本篇先来讲一下vector的erase功能, ...

  7. margin负值的几种妙用

    1:定位+margin负值实现元素水平垂直居中 div{ position: absolute; z-index: 1; left: 50%; margin-left: -50px; width: 1 ...

  8. Xcode8 上传完.ipa包 官网超过2天还没反应

    出现这个问题一般邮件有提示,我这里说一下,我之前都上传没有问题,就更新完Xcode8,就不行. 这个问题其实是因为权限没有写完  这样就可以了.

  9. eclipse Run On Server 异常:could not load the Tomcat Server configuration at Servers\tomcat V5.0 Sertomcat

    eclipse Run On Server 异常:could not load the Tomcat Server configuration at Servers\tomcat V5.0 Serto ...

  10. Angular2 CLI 快速开发

    Angular2 CLI 快速开发 http://www.tuicool.com/articles/z6V3Ubz 解决npm 的 shasum check failed for错误(npm注册国内镜 ...