A DOM parser which parses an XML and will retrieve all tags and tag values and stores them in table.
Limitations
parses upto 4 levels of XML structure. Can extend any number of levels using similar loops.
Limitations
parses upto 4 levels of XML structure. Can extend any number of levels using similar loops.
import java.io.File;
import java.sql.Date;
import java.text.SimpleDateFormat;
import java.text.DateFormat;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.xml.sax.InputSource;
import com.cna.rating.service.communications.RatingOtoXManager;
import com.inet.utility.DataStore;
import org.apache.log4j.Logger;
import com.inet.utility.SystemStartupProperties;
import java.util.Vector;
import java.util.ArrayList;
import com.inet.core.PageProcess;
import com.inet.print.Ifileextend;
import com.inet.print.PrintException;
import com.inet.print.PrintJob;
import com.inet.utility.DataStore;
import com.inet.utility.ExceptionError;
import com.inet.utility.InetFormat;
import com.inet.utility.InetParm;
//import com.inet.utility.SystemStartupProperties;
import com.inet.utility.ValidateInputException;
import com.inet.pageobjects.smtpMail;
import java.io.StringReader;
import java.io.Reader;
import java.io.IOException;
import java.io.PrintWriter;
/* to import the JAXP APIs */
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;
/* for the exceptions */
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
/* import the W3C definition for a DOM and DOM exceptions*/
import org.w3c.dom.Text;
import org.w3c.dom.Document;
import org.w3c.dom.DOMException;
import org.w3c.dom.Element;
import java.net.UnknownHostException;
public class StoreAppData implements Runnable{
private static Logger logger = Logger.getRootLogger();
static boolean process;
DataStore pendingAppStore=null;
Thread t =null;
public void ProcessPendingApp(){
t =new Thread(this);
t.start();
}
public void run(){
try{
if(pendingAppStore == null){
pendingAppStore = new DataStore("rating");
}
while(true)
{
int appCount=0;
ArrayList appRequestList = checkPendingApplications();
appCount = appRequestList.size();
if (appCount>0)
{
for (int i=0; i<appCount; i++){
String pending_app_id = appRequestList.get(i).toString();
saveProcessXMLFieldData(pending_app_id);
}//End For loop
}
logger.debug(" going to Sleeeeeeeeeeeeeep");
Thread.sleep(50000);
} //End While
}catch(Exception e){
logger.debug("Error Message is "+e.getMessage());
}//End Catch
finally {
if (pendingAppStore != null){
pendingAppStore.closeConnection();
}
}
} // End of run() method
public ArrayList checkPendingApplications() throws Exception{
ArrayList pending_Req_ids = new ArrayList();
boolean resultPresent=true;
try {
if (pendingAppStore == null){
pendingAppStore = new DataStore("rating");
}
//Get all the pending app_req_id from pending_appQueue table
String appIdQuery = "select * from pending_appQueue";
pendingAppStore.execute_stmt(appIdQuery.toString(), 0, 0);
int app_id_count = pendingAppStore.getRecordCount();
if (app_id_count>0)
{
resultPresent = false;
}
int i=0;
while ((!resultPresent) && (i<app_id_count))
{
resultPresent=pendingAppStore.next();
pending_Req_ids.add(pendingAppStore.getString("app_req_id"));
logger.debug("Value Arraylist is "+pending_Req_ids.get(i).toString());
i++;
}
pendingAppStore.close_resultset();
}
catch (IOException ioe) {
// I/O error
ioe.printStackTrace();
}
catch(Exception E)
{
logger.debug("Error Message is "+E.getMessage());
}
return pending_Req_ids;
}
// Function for storing Field data and workqueue starts
public void saveProcessXMLFieldData(String appRequest) throws Exception,SAXException,
ParserConfigurationException {
// Parsing the xml file starts
String xmldata="";
String custr_nbr = "99999";
String custr_rolodex_key = "99999";
java.util.Date app_rcvd_dt= new java.util.Date();
SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yy");
String s = formatter.format(app_rcvd_dt);
//Parsing the XML using DOM object model
try {
Document doc;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
if (pendingAppStore == null){
pendingAppStore = new DataStore("rating");
}
String appXMLData ="select app_xml from application_stage where app_req_id ="+appRequest;
pendingAppStore.execute_stmt(appXMLData.toString(), 0, 0);
xmldata = pendingAppStore.getString(0);
pendingAppStore.close_resultset();
Reader reader = new StringReader(xmldata);
InputSource inputSource = new InputSource(reader);
doc = builder.parse(inputSource);
String proState =((doc.getElementsByTagName("ProState")).item(0)).getFirstChild().getNodeValue();
String producerEmail =((doc.getElementsByTagName("ProContEmail")).item(0)).getFirstChild().getNodeValue();
String producerName =((doc.getElementsByTagName("ProName")).item(0)).getFirstChild().getNodeValue();
String customerName =((doc.getElementsByTagName("CusName")).item(0)).getFirstChild().getNodeValue();
String app_id =((doc.getElementsByTagName("AppID")).item(0)).getFirstChild().getNodeValue();
String app_ver =((doc.getElementsByTagName("AppVersion")).item(0)).getFirstChild().getNodeValue();
String effDate =((doc.getElementsByTagName("EffectiveDate")).item(0)).getFirstChild().getNodeValue();
SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy");
java.util.Date effectiveDt = new Date(sdf.parse(effDate).getTime());
String effectiveDate = formatter.format(effectiveDt);
int nodeCount = doc.getDocumentElement().getChildNodes().getLength();
Element eachChildNode;
String childNodeName = "";
String childNodeValue = "";
String appIdQuery ="select app_id from application_stage where app_req_id ="+appRequest;
pendingAppStore.execute_stmt(appIdQuery.toString(), 0, 0);
String app_id_value = pendingAppStore.getString(0);
pendingAppStore.close_resultset();
String prdctgnrlcd_Query ="select prdct_gnrl_cd from prdct_application where app_id ='"+app_id_value+"'";
pendingAppStore.execute_stmt(prdctgnrlcd_Query.toString(), 0, 0);
String prdct_gnrl_cd = pendingAppStore.getString(0);
pendingAppStore.close_resultset();
System.out.println("Insertion into app_details_stage table starts");
logger.debug("Insertion into app_details_stage table starts");
for (int i=0; i<nodeCount; i++)
{
eachChildNode=(Element) doc.getDocumentElement().getChildNodes().item(i);
int childlength = doc.getDocumentElement().getChildNodes().item(i).getChildNodes().getLength();
boolean childPresent = eachChildNode.hasChildNodes();
if (childlength>1)
{
for (int j=0; j<childlength; j++)
{
if (doc.getDocumentElement().getChildNodes().item(i).getChildNodes().item(j).hasChildNodes())
{
int innerChildLength =doc.getDocumentElement().getChildNodes().item(i).getChildNodes().item(j).getChildNodes().getLength();
if (innerChildLength>1)
{
for (int k=0; k<innerChildLength;k++)
{
childNodeName = doc.getDocumentElement().getChildNodes().item(i).getChildNodes().item(j).getChildNodes().item(k).getNodeName();
if (doc.getDocumentElement().getChildNodes().item(i).getChildNodes().item(j).getChildNodes().item(k).hasChildNodes())
{
childNodeValue = doc.getDocumentElement().getChildNodes().item(i).getChildNodes().item(j).getChildNodes().item(k).getFirstChild().getNodeValue();
String insertApplicationDetailQuery = "insert into app_details_stage (app_req_id,app_field_name,app_field_value,prdct_gnrl_cd,app_id,app_ver)"+
"values("+appRequest+",'"+childNodeName+"','"+childNodeValue+"',"+prdct_gnrl_cd+",'"+app_id+"','"+app_ver+"')";
pendingAppStore.execute_stmt(insertApplicationDetailQuery.toString(), 0, 0);
pendingAppStore.close_resultset();
}
else{
childNodeValue="";
String insertApplicationDetailQuery = "insert into app_details_stage (app_req_id,app_field_name,app_field_value,prdct_gnrl_cd,app_id,app_ver)"+
"values("+appRequest+",'"+childNodeName+"','"+childNodeValue+"',"+prdct_gnrl_cd+",'"+app_id+"','"+app_ver+"')";
pendingAppStore.execute_stmt(insertApplicationDetailQuery.toString(), 0, 0);
pendingAppStore.close_resultset();
}
}
}
else
{
childNodeName = doc.getDocumentElement().getChildNodes().item(i).getChildNodes().item(j).getNodeName();
childNodeValue = doc.getDocumentElement().getChildNodes().item(i).getChildNodes().item(j).getFirstChild().getNodeValue();
String insertApplicationDetailQuery = "insert into app_details_stage (app_req_id,app_field_name,app_field_value,prdct_gnrl_cd,app_id,app_ver)"+
"values("+appRequest+",'"+childNodeName+"','"+childNodeValue+"',"+prdct_gnrl_cd+",'"+app_id+"','"+app_ver+"')";
pendingAppStore.execute_stmt(insertApplicationDetailQuery.toString(), 0, 0);
pendingAppStore.close_resultset();
}
}
else
{
childNodeName = doc.getDocumentElement().getChildNodes().item(i).getChildNodes().item(j).getNodeName();
childNodeValue = "";
String insertApplicationDetailQuery = "insert into app_details_stage (app_req_id,app_field_name,app_field_value,prdct_gnrl_cd,app_id,app_ver)"+
"values("+appRequest+",'"+childNodeName+"','"+childNodeValue+"',"+prdct_gnrl_cd+",'"+app_id+"','"+app_ver+"')";
pendingAppStore.execute_stmt(insertApplicationDetailQuery.toString(), 0, 0);
pendingAppStore.close_resultset();
}
} //End j loop
} //End if child length
else
{
if (doc.getDocumentElement().getChildNodes().item(i).hasChildNodes())
{
childNodeName = doc.getDocumentElement().getChildNodes().item(i).getNodeName();
childNodeValue = doc.getDocumentElement().getChildNodes().item(i).getFirstChild().getNodeValue();
String insertApplicationDetailQuery = "insert into app_details_stage (app_req_id,app_field_name,app_field_value,prdct_gnrl_cd,app_id,app_ver)"+
"values("+appRequest+",'"+childNodeName+"','"+childNodeValue+"',"+prdct_gnrl_cd+",'"+app_id+"','"+app_ver+"')";
pendingAppStore.execute_stmt(insertApplicationDetailQuery.toString(), 0, 0);
pendingAppStore.close_resultset();
}
else{
childNodeName = doc.getDocumentElement().getChildNodes().item(i).getNodeName();
childNodeValue="";
String insertApplicationDetailQuery = "insert into app_details_stage (app_req_id,app_field_name,app_field_value,prdct_gnrl_cd,app_id,app_ver)"+
"values("+appRequest+",'"+childNodeName+"','"+childNodeValue+"',"+prdct_gnrl_cd+",'"+app_id+"','"+app_ver+"')";
pendingAppStore.execute_stmt(insertApplicationDetailQuery.toString(), 0, 0);
pendingAppStore.close_resultset();
}
} //End else child length
} //End i loop
logger.debug("Insertion into app_details_stage table ends");
System.out.println("Insertion into app_details_stage table Ends");
//parsing the xml file ends
// inserting data into work_queue table starts
pendingAppStore.init_parm();
pendingAppStore.create_parameter("@product_gnrl_cd","Code_Large","I",prdct_gnrl_cd);
pendingAppStore.create_parameter("@proState","char","I",proState);
pendingAppStore.execute_sproc("getAdmittedStatus_SSP", 0);
String wqueue_status = pendingAppStore.getString(0);
pendingAppStore.close_resultset();
logger.debug("The Admitted Status is "+wqueue_status);
// Getting underwriter team from stored procedure get_undwr_team_SSP starts
pendingAppStore.init_parm();
pendingAppStore.create_parameter("@product_gnrl_cd","Code_Large","I",prdct_gnrl_cd);
pendingAppStore.create_parameter("@proState","char","I",proState);
pendingAppStore.execute_sproc("get_undwr_team_SSP", 0);
String undwr_team = pendingAppStore.getString(0);
pendingAppStore.close_resultset();
logger.debug("The Underwriter team is "+undwr_team);
// Getting underwriter team from stored procedure get_undwr_team_SSP ends
String workDescQuery = "select work_desc_cd from work_desc where work_desc='"+wqueue_status+"'";
pendingAppStore.execute_stmt(workDescQuery, 0, 0);
String work_desc_cd = pendingAppStore.getString(0);
pendingAppStore.close_resultset();
logger.debug("The work_desc_cd of Admitted Status is "+work_desc_cd);
String inet_ind = "I";
pendingAppStore.init_parm(); //resetting the parameters
//Passing input parameters to the stored procedure to insert record into work_queue
pendingAppStore.create_parameter("@appRequest","Quote","I",appRequest);
pendingAppStore.create_parameter("@wqStatus","char","I",wqueue_status);
pendingAppStore.create_parameter("@wqueue_rcvd_dt","DATE","I",s);
pendingAppStore.create_parameter("@wqueue_crtd_dt","DATE","I",s);
pendingAppStore.create_parameter("@lst_chng_dt","DATE","I",s);
pendingAppStore.create_parameter("@inet_ind","char","I",inet_ind);
pendingAppStore.create_parameter("@product_gnrl_cd","Code_Large","I",prdct_gnrl_cd);
pendingAppStore.create_parameter("@work_desc_cd","Code_Small","I",work_desc_cd);
pendingAppStore.create_parameter("@undwr_team","char","I",undwr_team);
pendingAppStore.create_parameter("@custr_nbr","Code_Large","I",custr_nbr);
pendingAppStore.create_parameter("@custr_rolodex_key","Code_Large","I",custr_rolodex_key);
pendingAppStore.create_parameter("@wqueue_pol_effv_dt","DATE","I",effectiveDate);
pendingAppStore.execute_sproc("WorkQueueItemEpack_EZ_ISP", 0);
pendingAppStore.close_resultset();
// inserting in work_queue table ends
//Sending Email to Producer Email id
sendEmail(producerName,producerEmail);
logger.debug("Entry made in work_queue table and mail sent to producer saying Thanks for submission ");
//Delete the processed app_req_id from pending_appQueue
String delProcessedAppId ="delete from pending_appQueue where app_req_id ="+appRequest;
pendingAppStore.execute_stmt(delProcessedAppId.toString(), 0, 0);
}
// Handling the Parser exceptions starts
catch (SAXException sxe) {
// Error generated during parsing
Exception x = sxe;
if (sxe.getException() != null)
x = sxe.getException();
x.printStackTrace();
} catch (ParserConfigurationException pce) {
// Parser with specified options can't be built
pce.printStackTrace();
} catch (IOException ioe) {
// I/O error
ioe.printStackTrace();
}
catch (Exception e) {
logger.debug("Excetption is " + e);
}
// Handling the Parser exceptions ends
}
// Function for storing Field data and workqueue ends
/**
* This method is sendEmail
* @input param : producerName,producerEmail,applicationExpired
* @return param : None
* @exception : Exception
*/
public void sendEmail(String producerName,String producerEmail) throws Exception {
try {
String ls_email_id = producerEmail;
String ls_message ="";
ls_message = "
Thank you for forwarding your submission."+
"
A regional underwriter will contact you shortly."+
"
Please do not respond to this Email.";
String ls_smtphost =
new String(
SystemStartupProperties.getSystemProperties(
"smtp.host"));
String ls_from =
new String(
SystemStartupProperties.getSystemProperties(
"smtp.from"));
String ls_subject = "CNA Epack EZ Application for "+producerName;
smtpMail mail = new smtpMail(ls_smtphost);
if (mail == null){
throw new ExceptionError("0C001225SY Mail server unavailable");
}
mail.compose(ls_from);
mail.setSubject(ls_subject);
mail.setTo(ls_email_id);
mail.setMessage(ls_message);
mail.send();
}
catch (Exception lo_Exception) {
logger.debug(lo_Exception.getMessage());
}
}
//Method sending Email - Ends here
}