[工作代码]dom4j解析实例
工作中,我需要和另一个公司(A公司)共同开发一个模块,我写一个servlet接口,A公司携带xml格式的报文来访问。我采用流的形式读取,在处理后以流的形式写入,在返回(相应)给A公司。
demo:
package com.sinosoft.undwrt.bl.facade; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringBufferInputStream;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.xml.sax.SAXException; import com.sinosoft.sysframework.reference.DBManager;
import com.sinosoft.utiall.schema.PrpDriskSchema;
import com.sinosoft.utility.error.UserException; public class CheckIfPassFacade extends HttpServlet { /**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
} /**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { doPost(request, response);
} /**
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
* @author yaowengang
* @time 2016-1-26
* @desc 共享平台访问此servlet,以流的形式返回passFlag(是否审核通过true or false),passTime(审核通过时间),undwrter(审核通过人)
* @desc underwriteflag 1审核通过,9提交到核赔/核保(在双核或共享平台),6注销,
2下发修改,0暂存(在核心) ;
3自动核保(自核单子审核通过后);4无需核保(自核单子审核通过前的标识)
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String[] arrs= analyzeXML(request);
//获取指定元素的内容
String taskId= arrs[0];//businessNo
String businessType= arrs[1]; boolean isT= businessType.equals("T")? true: false;
DBManager dbManager = new DBManager();
List list= new ArrayList<String>();
ResultSet resultSet= null;
String underwriteFlag= null;
String passTime= null;
Boolean passFlag= null ;//true:审核通过,false:未审核通过
String undwrter =null;//核保人
BufferedOutputStream ou= null;
try {
if (taskId!=null&&!"".equals(taskId)) {
// boolean isT= taskId.startsWith("T") ? true :false ;//需要改,让平台作为参数传给我
dbManager.open("ddccDataSource");
if (isT) {//投保单
String sqlT= "select underwriteflag,passtime,underwritecode from prptmain where proposalno=?";
dbManager.prepareStatement(sqlT);
dbManager.setString(1, taskId);
resultSet = dbManager.executePreparedQuery();
while (resultSet.next()) {
underwriteFlag= resultSet.getString("underwriteflag");
passTime= resultSet.getString("passtime");
undwrter= resultSet.getString("underwritecode");
passFlag= underwriteFlag.equals("1");
if (!passFlag) {
passTime=null;
undwrter=null;
}
break;
}
/*if (passFlag) {
resultSet= null;
String sql2= "select passtime,underwritecode from prptmain where proposalno=?";
dbManager.prepareStatement(sql2);
dbManager.setString(1, taskId);
resultSet = dbManager.executePreparedQuery();
while (resultSet.next()) {
passTime= resultSet.getString("passtime");
undwrter= resultSet.getString("underwritecode");
break;
}
if (passTime==null) {
passTime="";
}
}*/ }else {//批单
String sqlP= "select underwriteflag,passtime,underwritecode from prpphead where endorseno=?";
dbManager.prepareStatement(sqlP);
dbManager.setString(1, taskId);
resultSet = dbManager.executePreparedQuery();
while (resultSet.next()) {
underwriteFlag= resultSet.getString("underwriteflag");
passTime= resultSet.getString("passtime");
undwrter= resultSet.getString("underwritecode");
passFlag= underwriteFlag.equals("1");
if (!passFlag) {
passTime=null;
undwrter=null;
}
/*passTime= resultSet.getString("passtime");
undwrter= resultSet.getString("underwritecode");*/
/*if (passTime==null) {
passTime="";
}*/
break;
}
/*if (passFlag) {
resultSet= null;
String sql2= "select passtime,underwritecode from prpphead where endorseno=?";
dbManager.prepareStatement(sql2);
dbManager.setString(1, taskId);
resultSet = dbManager.executePreparedQuery();
while (resultSet.next()) {
passTime= resultSet.getString("passtime");
undwrter= resultSet.getString("underwritecode");
break;
}
if (passTime==null) {
passTime="";
}
}*/
} }else {
throw new Exception("解析报文失败!请检查报文是否正确。");
} list.add(""+passFlag);
list.add(passTime);
list.add(undwrter);
String resultXML= assembleXML(list);
System.out.println("给平台返回的xml :"+resultXML);
ou = new BufferedOutputStream(response.getOutputStream());
ou.write(resultXML.getBytes());
ou.flush();
ou.close();
}catch (IOException e1) {
e1.printStackTrace();
}catch (SQLException e2) {
e2.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}finally{
if (dbManager!=null) {
try {
dbManager.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
} /**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
} /**
* @desc 将查询所得数据构造成xml格式,便于传送
* @param
* @throws UserException, ParserConfigurationException, FactoryConfigurationError, SAXException,Exception
*/
public String assembleXML(List<String> list) throws UserException, ParserConfigurationException, FactoryConfigurationError, SAXException,Exception {
StringBuilder strBuilder = new StringBuilder();
strBuilder.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
strBuilder.append("<ROOT>");
strBuilder.append("<HEAD>");
strBuilder.append("<INFO>");
strBuilder.append("<PASSFLAG>"+ list.get(0)+ "</PASSFLAG>");
strBuilder.append("<PASSTIME>"+ list.get(1)+ "</PASSTIME>");
strBuilder.append("<UNDWRTER>"+ list.get(2)+ "</UNDWRTER>");
strBuilder.append("</INFO>");
strBuilder.append("</HEAD>");
strBuilder.append("</ROOT>");
return strBuilder.toString();
} /**
* @desc dom4j框架解析来自request的报文
* @author yaowengang
* @throws IOException
* @date 20160224
* */
public String[] analyzeXML(HttpServletRequest request) throws IOException {// String[] datas= new String[2];
InputStream XMLInputStream= request.getInputStream();
BufferedReader XMLBuffReader= new BufferedReader(new InputStreamReader(XMLInputStream));
StringBuilder requestXMLSB= new StringBuilder("");
InputStream in= null;
try {
String tempXML;
while (true) {
tempXML= XMLBuffReader.readLine();
if (tempXML==null) {
break;
}
requestXMLSB.append(tempXML);
}
String requestXML= requestXMLSB.toString();
System.out.println("平台发的报文 :"+requestXML);
//解析收到的报文--采用dom4j框架
in= new StringBufferInputStream(requestXML);
SAXReader saxReader= new SAXReader();
Document document= null;
document = saxReader.read(in);
//获取根元素
Element root= document.getRootElement();
Element headElement= root.element("HEAD");
Element infoElement= headElement.element("INFO");
Element businessNoElement= infoElement.element("BUSINESSNO");
Element businessTypeElement= infoElement.element("BUSINESSTYPE");
//获取指定元素的内容
String businessNo= businessNoElement.getText();
String businessType= businessTypeElement.getText();
datas[0]= businessNo;
datas[1]= businessType; }catch (DocumentException e1) {
e1.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}finally{
if (XMLBuffReader!=null) {
XMLBuffReader.close();
}
if (in!=null) {
in.close();
}
}
return datas;
} }
[工作代码]dom4j解析实例的更多相关文章
- XML—代码—DOM4J解析
什么是xml: 众所周知,xml常用语数据存储和传输,文件后缀为 .xml: 它是可扩展标记语言(Extensible Markup Language,简称XML),是一种标记语言. 如何定义这些标记 ...
- dom4j解析xml格式文件实例
以下给4种常见的xml文件的解析方式的分析对比: DOM DOM4J JDOM SAX Dom解析 在内存中创建一个DOM树,该结构通常需要加载整个文档然后才能做工作.由于它是基于信息层次 ...
- dom4j解析xml字符串实例
DOM4J 与利用DOM.SAX.JAXP机制来解析xml相比,DOM4J 表现更优秀,具有性能优异.功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文档来解析xml ...
- java dom4j解析xml实例(2)
java利用dom4j解析xml 需要的jar包: dom4j官方网站在 http://www.dom4j.org/ 下载dom4j-1.6.1.zip 解开后有两个包,仅操作XML文档的话把dom4 ...
- java dom4j解析xml实例
java利用dom4j解析xml 需要的jar包: dom4j官方网站在 http://www.dom4j.org/ 下载dom4j-1.6.1.zip 解开后有两个包,仅操作XML文档的话把dom4 ...
- 【JAVA使用XPath、DOM4J解析XML文件,实现对XML文件的CRUD操作】
一.简介 1.使用XPath可以快速精确定位指定的节点,以实现对XML文件的CRUD操作. 2.去网上下载一个“XPath帮助文档”,以便于查看语法等详细信息,最好是那种有很多实例的那种. 3.学习X ...
- dom4j解析xml文档全面介绍
一.dom4j介绍 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点, ...
- 源生API解析XML文档与dom4j解析XML文档
一.XML语言 XML是一种可扩展的标记语言,是一种强类型的语言,类似HTML(超文本标记语言,是一种弱类型的语言).XML是一种通用的数据交换格式(关系型数据库),综上所诉:XML可以传输数据,也可 ...
- XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax
本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来 ...
随机推荐
- PMBOK十大知识领域是什么?
PMBOK十大知识领域是:整合管理.范围管理.时间管理.成本管理.质量管理.人力资源管理.沟通管理.风险管理.采购管理.干系人管理. 各用一句话概括项目管理知识体系十大知识领域: 1.整合管理:其作用 ...
- 记录openwrt下补丁apply的过程中出错,但是可以单独打上该补丁
背景: 在openwrt的编译框架下无法正确打上补丁,而单独使用git却可以成功 这个补丁到底与其它补丁有何不同? 该补丁的生成的过程解析: 旧文件:vi 打开旧文件会提示no newline at ...
- linux下kermit工具的使用
1.环境: ubuntu16.04 2.背景: 想更换下位机内核 3.使用kermit进行串口传输 举例:传输文件到下位机 2.1首先进入下位机的uboot 2.2 使用uboot自带的命令从串口接收 ...
- POJ1128 Frame Stacking(拓扑排序+dfs)题解
Description Consider the following 5 picture frames placed on an 9 x 8 array. ........ ........ ... ...
- react 为元素添加自定义事件监听器
https://zhenyong.github.io/react/tips/dom-event-listeners.html class MovieItem extends React.Compone ...
- 【第十二章】 springboot + mongodb(复杂查询)
简单查询:使用自定义的XxxRepository接口即可.(见 第十一章 springboot + mongodb(简单查询)) 复杂查询:使用MongoTemplate以及一些查询条件构建类(Bas ...
- Linux 安装 mysql 转 http://www.cnblogs.com/fnlingnzb-learner/p/5830622.html
到mysql官网下载mysql编译好的二进制安装包,在下载页面Select Platform:选项选择linux-generic,然后把页面拉到底部,64位系统下载Linux - Generic (g ...
- com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input
作者原创,转载请注明转载地址 第一次遇到该异常,在网上搜了很长时间也没找到解决答案,特此记录 1.异常展示: com.fasterxml.jackson.databind.JsonMappingExc ...
- MVC ---- 如何使用Predicate以及如何自定定义Predicate委托
微软公司提供只能返回bool值,接受一个参数的委托类型(Predicate). //Predicate委托 public static class PredicateDemo{ //内置方法 publ ...
- nginx configuration
Now that you know how to manage the service itself, you should take a few minutes to familiarize you ...