[工作代码]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来 ...
随机推荐
- POJ 1740 A New Stone Game(博弈)题解
题意:有n个石子堆,每一个都可以轮流做如下操作:选一个石堆,移除至少1个石子,然后可以把这堆石子随便拿几次,随便放到任意的其他石子数不为0的石子堆,也可以不拿.不能操作败. 思路:我们先来证明,如果某 ...
- 【安装】Mysql在Linux上安装
1.下载 下载地址:http://dev.mysql.com/downloads/mysql/5.6.html#downloads 下载版本:mysql-5.6.37-linux-glibc2.12- ...
- KMP 初级板子 待更新
复杂度 O(n+m) 这个博主写的蛮不错的 http://www.cnblogs.com/SYCstudio/p/7194315.html 1.本文中,所有的字符串从0开始编号2.为了在程序中表示方便 ...
- python从字符串解析方法名
方法如下 import requests func_name = 'get' fn_obj = getattr(requests,func_name) fn_obj('http://www.baidu ...
- 微信网页跳转页面常见bug处理
微信网页跳转页面常见bug处理 1.不要直接用a链接直接跳转 2.url后加上时间戳 function gohome() { window.location.href = "../home/ ...
- Miller_Rabin(米勒拉宾)素数测试算法
首先需要知道两个定理: 1: 费马小定理: 假如p是素数,且gcd(a,p)=1,那么 a(p-1)≡1(mod p). 2:二次探测定理:如果p是素数,x是小于p的正整数,且,那么要么x=1,要么x ...
- poj 2385 Apple Catching 基础dp
Apple Catching Description It is a little known fact that cows love apples. Farmer John has two ap ...
- python学习——大文件分割与合并
在平常的生活中,我们会遇到下面这样的情况: 你下载了一个比较大型的游戏(假设有10G),现在想跟你的同学一起玩,你需要把这个游戏拷贝给他. 然后现在有一个问题是文件太大(我们不考虑你有移动硬盘什么的情 ...
- css 键盘
<html lang="en"> <head> <meta charset="UTF-8"> <title>Do ...
- Phalcon框架数据库读写分离的实现方法
Phalcon框架和Yaf类似,是一款用C实现的拓展级别的框架,不过其功能实现更加丰富,设计思路基于依赖注入.容器等方式,更符合现代框架思想.本文主要针对Phalcon框架数据库层的读写分离进行说明, ...