Java解析Soap XML
package com.jstrd.tipstock.webservice.jt.base; import java.io.ByteArrayInputStream;
import java.util.Iterator; import javax.xml.soap.MessageFactory;
import javax.xml.soap.MimeHeaders;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPMessage; public class SoapUtil { /**
* 解析soapXML
* @param soapXML
* @return
*/
public static WebserviceResultBean parseSoapMessage(String soapXML) {
WebserviceResultBean resultBean = new WebserviceResultBean();
try {
SOAPMessage msg = formatSoapString(soapXML);
SOAPBody body = msg.getSOAPBody();
Iterator<SOAPElement> iterator = body.getChildElements();
parse(iterator, resultBean);
} catch (Exception e) {
e.printStackTrace();
}
return resultBean;
} public static void main(String[] args) {
System.out.println("开始解析soap..."); String deptXML = "<SOAP:Envelope xmlns:SOAP=\"http://schemas.xmlsoap.org/soap/envelope/\"><SOAP:Header/><SOAP:Body><ns:OP_SDMS_Consume_Material_SynResponse xmlns:ns=\"http://toSDMS.material.service.ffcs.com\" xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"><ns:return><ns:BASEINFO><MSGID>?</MSGID><PMSGID>?</PMSGID><SENDTIME>20140212094609</SENDTIME><S_PROVINCE>?</S_PROVINCE><S_SYSTEM>?</S_SYSTEM><SERVICENAME>?</SERVICENAME><T_PROVINCE>?</T_PROVINCE><T_SYSTEM>?</T_SYSTEM><RETRY>?</RETRY></ns:BASEINFO><ns:MESSAGE><RESULT>E</RESULT><REMARK/><XMLDATA><![CDATA[<response><RESULT>E</RESULT><MESSAGE>平台系统处理时发生异常!保存接口接收数据出错!</MESSAGE></response>]]></XMLDATA></ns:MESSAGE></ns:return></ns:OP_SDMS_Consume_Material_SynResponse></SOAP:Body></SOAP:Envelope>";
WebserviceResultBean ret = parseSoapMessage(deptXML);
try {
SOAPMessage msg = formatSoapString(deptXML);
SOAPBody body = msg.getSOAPBody();
Iterator<SOAPElement> iterator = body.getChildElements();
PrintBody(iterator, null);
} catch (Exception e) {
e.printStackTrace();
} System.out.println("解析soap结束...");
} /**
* 把soap字符串格式化为SOAPMessage
*
* @param soapString
* @return
* @see [类、类#方法、类#成员]
*/
private static SOAPMessage formatSoapString(String soapString) {
MessageFactory msgFactory;
try {
msgFactory = MessageFactory.newInstance();
SOAPMessage reqMsg = msgFactory.createMessage(new MimeHeaders(),
new ByteArrayInputStream(soapString.getBytes("UTF-8")));
reqMsg.saveChanges();
return reqMsg;
} catch (Exception e) {
e.printStackTrace();
return null;
}
} /**
* 解析soap xml
* @param iterator
* @param resultBean
*/
private static void parse(Iterator<SOAPElement> iterator, WebserviceResultBean resultBean) {
while (iterator.hasNext()) {
SOAPElement element = iterator.next();
// System.out.println("Local Name:" + element.getLocalName());
// System.out.println("Node Name:" + element.getNodeName());
// System.out.println("Tag Name:" + element.getTagName());
// System.out.println("Value:" + element.getValue());
if ("ns:BASEINFO".equals(element.getNodeName())) {
continue;
} else if ("ns:MESSAGE".equals(element.getNodeName())) {
Iterator<SOAPElement> it = element.getChildElements();
SOAPElement el = null;
while (it.hasNext()) {
el = it.next();
if ("RESULT".equals(el.getLocalName())) {
resultBean.setResult(el.getValue());
System.out.println("#### " + el.getLocalName() + " ==== " + el.getValue());
} else if ("REMARK".equals(el.getLocalName())) {
resultBean.setRemark(null != el.getValue() ? el.getValue() : "");
System.out.println("#### " + el.getLocalName() + " ==== " + el.getValue());
} else if ("XMLDATA".equals(el.getLocalName())) {
resultBean.setXmlData(el.getValue());
System.out.println("#### " + el.getLocalName() + " ==== " + el.getValue());
}
}
} else if (null == element.getValue()
&& element.getChildElements().hasNext()) {
parse(element.getChildElements(), resultBean);
}
}
} private static void PrintBody(Iterator<SOAPElement> iterator, String side) {
while (iterator.hasNext()) {
SOAPElement element = (SOAPElement) iterator.next();
System.out.println("Local Name:" + element.getLocalName());
System.out.println("Node Name:" + element.getNodeName());
System.out.println("Tag Name:" + element.getTagName());
System.out.println("Value:" + element.getValue());
if (null == element.getValue()
&& element.getChildElements().hasNext()) {
PrintBody(element.getChildElements(), side + "-----");
}
}
}
}
Java解析Soap XML的更多相关文章
- 请用java解析下xml
Java XML简介 XML(EXtensible Markup Language) 可扩展标记语言 可以说是一个文本文件 作用数交互 配置应用程序 Xml解析技术 三种方式 Dom 文档数据 ...
- Java 解析自定义XML文件
这里我用 maven项目 作为 演示 配置pom.xml文件 完整的pom.xml文件信息 <?xml version="1.0" encoding="UTF-8& ...
- Java解析XML文档——dom解析xml
一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object M ...
- SOAP XML报文解析
import java.util.HashMap;import java.util.List;import java.util.Map; import org.dom4j.Document;impor ...
- java解析xml的三种方法
java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXE ...
- java解析XML(转载)
使用Dom4j解析XML dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的 ...
- java解析XML文件
dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源 ...
- 【JAVA解析XML文件实现CRUD操作】
一.简介. 1.xml解析技术有两种:dom和sax 2.dom:Document Object Model,即文档对象模型,是W3C组织推荐的解析XML的一种方式. sax:Simple API f ...
- Java眼中的XML--文件读取--2 应用SAX方式解析XML
1.获取一个SAXParserFactory的实例.2.通过factory获取SAXParser实例. 3.新建一个包和继承自DefaultHandler的类. 因为SAX遍历方式,比如便利一个节 ...
随机推荐
- 漫谈可视化Prefuse(六)---改动源码定制边粗细
可视化一路走来,体会很多:博客一路写来,收获颇丰:代码一路码来,思路越来越清晰.终究还是明白了一句古话:纸上得来终觉浅,绝知此事要躬行. 跌跌撞撞整合了个可视化小tool,零零碎碎结交了众多的志同道合 ...
- 基于caffe的艺术迁移学习 style-transfer-windows+caffe
这个是在去年微博里面非常流行的,在git_hub上的代码是https://github.com/fzliu/style-transfer 比如这是梵高的画 这是你自己的照片 然后你想生成这样 怎么实现 ...
- a configuration error occurred during startup. place verify the preference field whth the prompt:TomcatJDK name:
错误一:安装Tomcat的时候出现了错误,这里要是找不到Tomcat6.0我们可以设置其enbale显示就可以,上面的错误解决办法: 错误二:在eclipse中启动Tomcat6.0的时候现在说800 ...
- Node.js系列基础学习----安装,实现Hello World, REPL
Node.js基础学习 简介 简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台.Node.js是一 ...
- dp --- hdu 4939 : Stupid Tower Defense
Stupid Tower Defense Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/ ...
- [Asp.net 5] Configuration-新一代的配置文件(神奇的Binder)
关于配置文件的目录:[Asp.net 5] Configuration-新一代的配置文件 之前看过MVC4.0的源码,里面就有Binder.作用是将前台页面传递过来的键值对/字典表绑定到特定的对象.此 ...
- C# 中反射获取某类的子类和根据类型名动态创建对象
有时候,为了快速批量处理已经实现某个基类或者某个接口的子类,需要通过反射的方式获取到他们的类类型(Type),然后再通过 1 Activator.CreateInstance(objType); 或者 ...
- c#如何采集需要登录的页面
首先说明:代码片段是从网络获取,然后自己修改.我想好的东西应该拿来分享. 先说下原理:当我们采集页面的时候,如果被采集的网站需要登录才能采集.不管是基于Cookie还是基于Session,我们都会首先 ...
- MVC之前的那点事儿系列(7):WebActivator的实现原理详解
文章内容 上篇文章,我们分析如何动态注册HttpModule的实现,本篇我们来分析一下通过上篇代码原理实现的WebActivator类库,WebActivator提供了3种功能,允许我们分别在Http ...
- GET DIAGNOSTICS Syntax
http://dev.mysql.com/doc/refman/5.7/en/get-diagnostics.html GET [CURRENT | STACKED] DIAGNOSTICS { st ...