Note that there are some explanatory texts on larger screens.

plurals
  1. POInserting XML data into MySQL database
    primarykey
    data
    text
    <p>I am trying to insert XML data into a MySQL database. The SAX parser I wrote works on its own when tested. However, whenever I try to insert records into the database, I get a NullPointerException even though I made sure to assign values to workflow elements that were null. Here is my database Table code. package database;</p> <pre><code>//STEP 1. Import required packages import java.sql.*; import java.io.*; import org.w3c.dom.*; import javax.xml.parsers.*; public class Table { // JDBC driver name and database URL static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://baldwin.isri.cmu.edu/SciSIP"; // Database credentials static final String USER = "user"; static final String PASS = "pass"; public Table() { } public void createTable() { Connection con = null; Statement stmt = null; try{ //STEP 2: Register JDBC driver Class.forName("com.mysql.jdbc.Driver"); //STEP 3: Open a connection System.out.println("Connecting to a selected database..."); con = DriverManager.getConnection(DB_URL, USER, PASS); System.out.println("Connected database successfully..."); //STEP 4: Execute a query System.out.println("Creating table in given database..."); stmt = con.createStatement(); String sql = "CREATE TABLE IF NOT EXISTS workflow" + "(id INTEGER not NULL AUTO_INCREMENT, " + " annotationBean VARCHAR(255), " + " date VARCHAR(255), " + " text VARCHAR(255), " + " identification VARCHAR(255), " + " PRIMARY KEY ( id ))"; stmt.executeUpdate(sql); System.out.println("Created table in given database..."); } catch(SQLException se) { //Handle errors for JDBC se.printStackTrace(); } catch(Exception e) { //Handle errors for Class.forName e.printStackTrace(); } finally { //finally block used to close resources try { if(stmt != null) con.close(); } catch(SQLException se) { }// do nothing try { if(con != null) con.close(); } catch(SQLException se) { se.printStackTrace(); }//end finally try }//end try System.out.println("Goodbye!"); } public void insertRecord(String annotationBean, String date, String text, String identification) { Connection con = null; Statement stmt = null; try { Class.forName("com.mysql.jdbc.Driver"); //Load the driver con = DriverManager.getConnection(DB_URL, USER, PASS); stmt = con.createStatement(); String sql = "INSERT INTO `workflow` VALUES ('"+annotationBean+"', '"+date+"', '"+text+"', '"+identification+"')"; stmt.execute(sql); //Insert a row System.out.println("Record Inserted into Database..."); } catch(SQLException se) { //Handle errors for JDBC se.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { //finally block used to close resources try { if(stmt != null) con.close(); } catch(SQLException se) { }// do nothing try { if(con != null) con.close(); } catch(SQLException se) { se.printStackTrace(); }//end finally try }//end try } </code></pre> <p>Here is my parser code with the insert record statement.</p> <pre><code>package parser; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import database.Table; public class XML_Parser_SAX extends DefaultHandler{ List aWorkflow; private String tempVal; //to maintain context private Workflow tempWorkflow; public XML_Parser_SAX(){ aWorkflow = new ArrayList(); } public void runExample() { parseDocument(); printData(); } private void parseDocument() { //get a factory SAXParserFactory spf = SAXParserFactory.newInstance(); try { //get a new instance of parser SAXParser sp = spf.newSAXParser(); //parse the file and also register this class for call backs sp.parse("workflow.xml", this); }catch(SAXException se) { se.printStackTrace(); }catch(ParserConfigurationException pce) { pce.printStackTrace(); }catch (IOException ie) { ie.printStackTrace(); } } /** * Iterate through the list and print * the contents */ private void printData(){ System.out.println("Number of Tasks in Workflow: '" + aWorkflow.size() + "'."); Iterator it = aWorkflow.iterator(); while(it.hasNext()) { System.out.println(it.next().toString()); } } //Event Handlers public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { //reset tempVal = ""; if(qName.equalsIgnoreCase("annotationBean")) { //create a new instance of employee tempWorkflow = new Workflow(); tempWorkflow.setAnnotationBean(attributes.getValue("class")); System.out.println("class"); } } public void characters(char[] ch, int start, int length) throws SAXException { tempVal = new String(ch,start,length); } public void endElement(String uri, String localName, String qName) throws SAXException { if(qName.equalsIgnoreCase("annotationBean")) { //add it to the list aWorkflow.add(tempWorkflow); System.out.println("annotationBean"); } else if (qName.equalsIgnoreCase("date")) { if (tempVal != null) { tempWorkflow.setDate(tempVal); } else { tempWorkflow.setDate("null"); } System.out.println(tempWorkflow.getDate()); } else if (qName.equalsIgnoreCase("text")) { if (tempVal != null) { tempWorkflow.setText(tempVal); } else { tempWorkflow.setText("null"); } System.out.println(tempWorkflow.getText()); } else if (qName.equalsIgnoreCase("identification")) { if (tempVal != null) { tempWorkflow.setIdentification(tempVal); } else { tempWorkflow.setIdentification("null"); } System.out.println(tempWorkflow.getIdentification()); } Table t = new Table(); //t.createTable(); t.insertRecord(tempWorkflow.getAnnotationBean(), tempWorkflow.getDate(), tempWorkflow.getText(), tempWorkflow.getIdentification()); } public static void main(String[] args){ XML_Parser_SAX parse = new XML_Parser_SAX(); parse.runExample(); } } </code></pre> <p>Can someone please tell me why this is giving me the NullPointerException? Thanks in advance!!!</p> <p>Here is the stacktrace:</p> <pre><code>Exception in thread "main" java.lang.NullPointerException at parser.XML_Parser_SAX.endElement(XML_Parser_SAX.java:126) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:606) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1741) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2898) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:488) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:302) at javax.xml.parsers.SAXParser.parse(SAXParser.java:274) at parser.XML_Parser_SAX.parseDocument(XML_Parser_SAX.java:49) at parser.XML_Parser_SAX.runExample(XML_Parser_SAX.java:35) at parser.XML_Parser_SAX.main(XML_Parser_SAX.java:131) </code></pre> <p>Yes, workflow.xml exists. Here is a copy of it below.</p> <pre><code>&lt;workflow xmlns="http://taverna.sf.net/2008/xml/t2flow" version="1" producedBy="taverna- 2.4.0"&gt;&lt;dataflow id="8781d5f4-d0ba-48a8-a1d1-14281bd8a917" role="top"&gt;&lt;name&gt;Hello_World&lt;/name&gt; &lt;inputPorts /&gt;&lt;outputPorts&gt;&lt;port&gt;&lt;name&gt;greeting&lt;/name&gt;&lt;annotations /&gt;&lt;/port&gt;&lt;/outputPorts&gt; &lt;processors&gt;&lt;processor&gt;&lt;name&gt;hello&lt;/name&gt;&lt;inputPorts /&gt;&lt;outputPorts&gt;&lt;port&gt;&lt;name&gt;value&lt;/name&gt; &lt;depth&gt;0&lt;/depth&gt;&lt;granularDepth&gt;0&lt;/granularDepth&gt;&lt;/port&gt;&lt;/outputPorts&gt;&lt;annotations /&gt; &lt;activities&gt;&lt;activity&gt;&lt;raven&gt;&lt;group&gt;net.sf.taverna.t2.activities&lt;/group&gt; &lt;artifact&gt;stringconstant-activity&lt;/artifact&gt;&lt;version&gt;1.4&lt;/version&gt;&lt;/raven&gt; &lt;class&gt;net.sf.taverna.t2.activities.stringconstant.StringConstantActivity&lt;/class&gt;&lt;inputMap /&gt; &lt;outputMap&gt;&lt;map from="value" to="value" /&gt;&lt;/outputMap&gt;&lt;configBean encoding="xstream"&gt; &lt;net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean xmlns=""&gt; &lt;value&gt;Hello, World!&lt;/value&gt; &lt;/net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean&gt;&lt;/configBean&gt; &lt;annotations /&gt;&lt;/activity&gt;&lt;/activities&gt;&lt;dispatchStack&gt;&lt;dispatchLayer&gt;&lt;raven&gt; &lt;group&gt;net.sf.taverna.t2.core&lt;/group&gt;&lt;artifact&gt;workflowmodel-impl&lt;/artifact&gt; &lt;version&gt;1.4&lt;/version&gt;&lt;/raven&gt; &lt;class&gt;net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize&lt;/class&gt; &lt;configBean encoding="xstream"&gt; &lt;net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns=""&gt; &lt;maxJobs&gt;1&lt;/maxJobs&gt; &lt;/net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig&gt; &lt;/configBean&gt;&lt;/dispatchLayer&gt;&lt;dispatchLayer&gt;&lt;raven&gt;&lt;group&gt;net.sf.taverna.t2.core&lt;/group&gt; &lt;artifact&gt;workflowmodel-impl&lt;/artifact&gt;&lt;version&gt;1.4&lt;/version&gt;&lt;/raven&gt; &lt;class&gt;net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce&lt;/class&gt; &lt;configBean encoding="xstream"&gt;&lt;null xmlns="" /&gt;&lt;/configBean&gt;&lt;/dispatchLayer&gt;&lt;dispatchLayer&gt; &lt;raven&gt;&lt;group&gt;net.sf.taverna.t2.core&lt;/group&gt;&lt;artifact&gt;workflowmodel-impl&lt;/artifact&gt; &lt;version&gt;1.4&lt;/version&gt;&lt;/raven&gt; &lt;class&gt;net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover&lt;/class&gt;&lt;configBean encoding="xstream"&gt;&lt;null xmlns="" /&gt;&lt;/configBean&gt;&lt;/dispatchLayer&gt;&lt;dispatchLayer&gt;&lt;raven&gt; &lt;group&gt;net.sf.taverna.t2.core&lt;/group&gt;&lt;artifact&gt;workflowmodel-impl&lt;/artifact&gt; &lt;version&gt;1.4&lt;/version&gt;&lt;/raven&gt; &lt;class&gt;net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry&lt;/class&gt;&lt;configBean encoding="xstream"&gt;&lt;net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns=""&gt; &lt;backoffFactor&gt;1.0&lt;/backoffFactor&gt; &lt;initialDelay&gt;1000&lt;/initialDelay&gt; &lt;maxDelay&gt;5000&lt;/maxDelay&gt; &lt;maxRetries&gt;0&lt;/maxRetries&gt; &lt;/net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig&gt;&lt;/configBean&gt; &lt;/dispatchLayer&gt;&lt;dispatchLayer&gt;&lt;raven&gt;&lt;group&gt;net.sf.taverna.t2.core&lt;/group&gt; &lt;artifact&gt;workflowmodel-impl&lt;/artifact&gt;&lt;version&gt;1.4&lt;/version&gt;&lt;/raven&gt; &lt;class&gt;net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke&lt;/class&gt;&lt;configBean encoding="xstream"&gt;&lt;null xmlns="" /&gt;&lt;/configBean&gt;&lt;/dispatchLayer&gt;&lt;/dispatchStack&gt; &lt;iterationStrategyStack&gt;&lt;iteration&gt;&lt;strategy /&gt;&lt;/iteration&gt;&lt;/iterationStrategyStack&gt; &lt;/processor&gt;&lt;/processors&gt;&lt;conditions /&gt;&lt;datalinks&gt;&lt;datalink&gt;&lt;sink type="dataflow"&gt; &lt;port&gt;greeting&lt;/port&gt;&lt;/sink&gt;&lt;source type="processor"&gt;&lt;processor&gt;hello&lt;/processor&gt; &lt;port&gt;value&lt;/port&gt;&lt;/source&gt;&lt;/datalink&gt;&lt;/datalinks&gt;&lt;annotations&gt;&lt;annotation_chain encoding="xstream"&gt;&lt;net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns=""&gt; &lt;annotationAssertions&gt; &lt;net.sf.taverna.t2.annotation.AnnotationAssertionImpl&gt; &lt;annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.Author"&gt; &lt;text&gt;Stian Soiland-Reyes&lt;/text&gt; &lt;/annotationBean&gt; &lt;date&gt;2012-01-03 15:10:48.73 GMT&lt;/date&gt; &lt;creators /&gt; &lt;curationEventList /&gt; &lt;/net.sf.taverna.t2.annotation.AnnotationAssertionImpl&gt; &lt;/annotationAssertions&gt; &lt;/net.sf.taverna.t2.annotation.AnnotationChainImpl&gt;&lt;/annotation_chain&gt;&lt;annotation_chain encoding="xstream"&gt;&lt;net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns=""&gt; &lt;annotationAssertions&gt; &lt;net.sf.taverna.t2.annotation.AnnotationAssertionImpl&gt; &lt;annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.DescriptiveTitle"&gt; &lt;text&gt;Hello World&lt;/text&gt; &lt;/annotationBean&gt; &lt;date&gt;2012-01-03 15:10:54.167 GMT&lt;/date&gt; &lt;creators /&gt; &lt;curationEventList /&gt; &lt;/net.sf.taverna.t2.annotation.AnnotationAssertionImpl&gt; &lt;/annotationAssertions&gt; &lt;/net.sf.taverna.t2.annotation.AnnotationChainImpl&gt;&lt;/annotation_chain&gt; &lt;annotation_chain_2_2 encoding="xstream"&gt;&lt;net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns=""&gt; &lt;annotationAssertions&gt; &lt;net.sf.taverna.t2.annotation.AnnotationAssertionImpl&gt; &lt;annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.IdentificationAssertion"&gt; &lt;identification&gt;8781d5f4-d0ba-48a8-a1d1-14281bd8a917&lt;/identification&gt; &lt;/annotationBean&gt; &lt;date&gt;2012-01-03 15:12:21.684 GMT&lt;/date&gt; &lt;creators /&gt; &lt;curationEventList /&gt; &lt;/net.sf.taverna.t2.annotation.AnnotationAssertionImpl&gt; </code></pre> <p> </p> <pre><code>&lt;text&gt;One of the simplest workflows possible. No workflow input ports, a single workflow output port "greeting", outputting "Hello, world!" as produced by the String Constant "hello".&lt;/text&gt; &lt;/annotationBean&gt; &lt;date&gt;2012-01-03 15:12:15.643 GMT&lt;/date&gt; &lt;creators /&gt; &lt;curationEventList /&gt; &lt;/net.sf.taverna.t2.annotation.AnnotationAssertionImpl&gt; &lt;/annotationAssertions&gt; &lt;/net.sf.taverna.t2.annotation.AnnotationChainImpl&gt;&lt;/annotation_chain&gt;&lt;/annotations &gt; &lt;/dataflow&gt;&lt;/workflow&gt; </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload