Java解析Soap XML

时间:2022-02-02 19:03:07
 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的更多相关文章

  1. 请用java解析下xml

    Java   XML简介 XML(EXtensible Markup Language)  可扩展标记语言 可以说是一个文本文件 作用数交互  配置应用程序 Xml解析技术 三种方式 Dom 文档数据 ...

  2. Java 解析自定义XML文件

    这里我用 maven项目 作为 演示 配置pom.xml文件 完整的pom.xml文件信息 <?xml version="1.0" encoding="UTF-8& ...

  3. Java解析XML文档——dom解析xml

    一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object M ...

  4. SOAP XML报文解析

    import java.util.HashMap;import java.util.List;import java.util.Map; import org.dom4j.Document;impor ...

  5. java解析xml的三种方法

    java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXE ...

  6. java解析XML(转载)

    使用Dom4j解析XML dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的 ...

  7. java解析XML文件

    dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源 ...

  8. 【JAVA解析XML文件实现CRUD操作】

    一.简介. 1.xml解析技术有两种:dom和sax 2.dom:Document Object Model,即文档对象模型,是W3C组织推荐的解析XML的一种方式. sax:Simple API f ...

  9. Java眼中的XML--文件读取--2 应用SAX方式解析XML

    1.获取一个SAXParserFactory的实例.2.通过factory获取SAXParser实例.  3.新建一个包和继承自DefaultHandler的类.  因为SAX遍历方式,比如便利一个节 ...

随机推荐

  1. &lbrack;DFNews&rsqb; EnCase v7&period;08发布

    EnCase v7.08 近日正式发布,7.08增加了Evidence Processor Manager以及Evidence Processor,不仅可以在本地实现证据处理队列,也支持了通过网络进行 ...

  2. 【BZOJ 4456】【UOJ &num;184】【ZJOI 2016】旅行者

    http://www.lydsy.com/JudgeOnline/problem.php?id=4456 http://uoj.ac/problem/184 参考(抄)的晨爷的题解(代码) 对矩形进行 ...

  3. &lbrack;转&rsqb; Visual Studio Code behind a proxy

    http://www.tuicool.com/articles/jyyIBf3 http://blog.majcica.com/2016/04/07/visual-studio-code-behind ...

  4. Form&lowbar;Form树形结构HTree的介绍(案例)

    2013-02-09 Created By BaoXinjian

  5. &ast;&ast;&ast;JAVA多线程的应用场景和应用目的举例

    多线程使用的主要目的在于: 1.吞吐量:你做WEB,容器帮你做了多线程,但是他只能帮你做请求层面的.简单的说,可能就是一个请求一个线程.或多个请求一个线程.如果是单线程,那同时只能处理一个用户的请求. ...

  6. UVA 10985 - Rings&&num;39&semi;n&&num;39&semi;Ropes&lpar;floyd&rpar;

    Problem D Rings'n'Ropes Time Limit: 3 seconds "Well, that seems to be the situation. But, I don ...

  7. git 分支命名规范

    为规范开发,保持代码提交记录以及 git 分支结构清晰,方便后续维护,现规范 git 的相关操作. 主要规范两点: git 分支命名规范 git 提交记录规范 1. git 分支命名规范 git 分支 ...

  8. Java输入输出流详解

    通过数据流.序列化和文件系统提供系统输入和输出. Java把这些不同来源和目标的数据都统一抽象为数据流.Java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出的代码并不是很简洁,因为 ...

  9. MFC源码解读(一)最原始一个MFC程序,手写不用向导

    从这一篇开始,详细记录一下MFC的源码解读 四个文件,分别为: stdafx.h,stdafx.cpp,hello.h,hello.cpp 代码如下: //stdafx.h #include < ...

  10. 将Mongo装为Windows的服务

    PHP的mongo扩展: 首先 下载一个PHP的mongo扩展, 地址:http://download.csdn.net/detail/qq_36387589/9819259 然后修改php.ini. ...