工作中,我需要和另一个公司(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解析实例的更多相关文章

  1. XML—代码—DOM4J解析

    什么是xml: 众所周知,xml常用语数据存储和传输,文件后缀为 .xml: 它是可扩展标记语言(Extensible Markup Language,简称XML),是一种标记语言. 如何定义这些标记 ...

  2. dom4j解析xml格式文件实例

    以下给4种常见的xml文件的解析方式的分析对比: DOM  DOM4J  JDOM  SAX Dom解析    在内存中创建一个DOM树,该结构通常需要加载整个文档然后才能做工作.由于它是基于信息层次 ...

  3. dom4j解析xml字符串实例

    DOM4J 与利用DOM.SAX.JAXP机制来解析xml相比,DOM4J 表现更优秀,具有性能优异.功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文档来解析xml ...

  4. java dom4j解析xml实例(2)

    java利用dom4j解析xml 需要的jar包: dom4j官方网站在 http://www.dom4j.org/ 下载dom4j-1.6.1.zip 解开后有两个包,仅操作XML文档的话把dom4 ...

  5. java dom4j解析xml实例

    java利用dom4j解析xml 需要的jar包: dom4j官方网站在 http://www.dom4j.org/ 下载dom4j-1.6.1.zip 解开后有两个包,仅操作XML文档的话把dom4 ...

  6. 【JAVA使用XPath、DOM4J解析XML文件,实现对XML文件的CRUD操作】

    一.简介 1.使用XPath可以快速精确定位指定的节点,以实现对XML文件的CRUD操作. 2.去网上下载一个“XPath帮助文档”,以便于查看语法等详细信息,最好是那种有很多实例的那种. 3.学习X ...

  7. dom4j解析xml文档全面介绍

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

  8. 源生API解析XML文档与dom4j解析XML文档

    一.XML语言 XML是一种可扩展的标记语言,是一种强类型的语言,类似HTML(超文本标记语言,是一种弱类型的语言).XML是一种通用的数据交换格式(关系型数据库),综上所诉:XML可以传输数据,也可 ...

  9. 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来 ...

随机推荐

  1. SPOJ LAS(BFS)题解

    题目:VJ 思路: BFS+回溯,但是要剪枝,看了dalao的题解,超时+WA无数发,终于过了 #include<cstdio> #include<cstring> #incl ...

  2. Avito Cool Challenge 2018

    考挂了.. A - Definite Game 直接看代码吧. #include<cstdio> #include<cstring> #include<algorithm ...

  3. C# 测算代码运行时间 Stopwatch

    System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch(); stopwatch.Start(); stop ...

  4. (转)Nuts and Bolts of Applying Deep Learning

    Kevin Zakka's Blog About Nuts and Bolts of Applying Deep Learning Sep 26, 2016 This weekend was very ...

  5. The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path 解决方法

    项目忽然出现 The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Pat ...

  6. undefined!=false之解 及==比较的规则

    JS中有一个基本概念就是: JavaScript中undefined==null 但undefined!==null undefined与null转换成布尔值都是false 如果按照常规想法,比如下面 ...

  7. Vhost.conf 范例

    NameVirtualHost *:80 <VirtualHost *:80> ServerName haofei.com DocumentRoot "E:/test/" ...

  8. WPF基础学习笔记整理 (四) 布局

    WPF使用的是容器(container)进行布局: WPF窗口(Window类型)只能包含单个元素,故为了放置多个元素并增强界面效果,引入了容器: WPF布局容器都派生自System.Windows. ...

  9. 安装 mysql5.7.2 (Ubuntu 16.04 desktop amd64)

    1.下载mysql deb https://dev.mysql.com/downloads/mysql/ #移动到/usr/local/src/目录,解压 sudo mv mysql-server_5 ...

  10. nginx 启停命令

    nginx 启停配置 #!/bin/sh # # nginx Startup script for nginx # # chkconfig: - 85 15 # processname: nginx ...