import org.apache.xerces.parsers.*; import java.io.* ; import org.xml.sax.*; import org.xml.sax.helpers.*; public class Findfailure extends DefaultHandler { static String respon="<pp.response><pp.authresponse merchant=\"1001\" ordernumber=\"245\" transactionid=\"CC_FU2E7D4A9B3F\" authcode=\"OK7315\" avs=\"YYY\" cvv2result=\"X\" authstatus=\"AUTH\" /></pp.response> "; /*static String respon="<pp.response><pp.authresponse merchant=\"1001\" ordernumber=\"6\" failure=\"true\">General failure: com.purepayments.biz.InvalidCCNumberException: Invalid Credit Card Number (Check digit is invalid): 4012000033330025</pp.authresponse></pp.response>"; */ //static String remote_DTD="<!DOCTYPE pp.response PUBLIC \"-//IMALL//DTD PUREPAYMENTS 1.0//EN\" \"http://www.purepayments.com/dtd/purepayments.dtd\">"; // static String respon="<pp.response><pp.authresponse merchant=\"1001\" ordernumber=\"14\" authstatus=\"DCL\" transactionid=\"CC_FU2AC951D180\" failure=\"true\">Card declined</pp.authresponse><pp.adjustresponse merchant=\"1001\" ordernumber=\"14\" transactionid=\"CC_FU2AC951D17F\"/></pp.response>"; //Needed for testing with main() //static String local_DTD="<?xml version=\"1.0\" standalone=\"no\" ?><!DOCTYPE pp.response SYSTEM \"purepayments.dtd\">"; InputSource xmlurl=null; String element_data=" "; boolean found_failure=false; boolean found_cvv=false; boolean found_avs=false; String xmldoc=null; String [ ] results=new String[3]; public Findfailure(String xmldoc) { this.xmldoc =xmldoc.substring(xmldoc.indexOf("<pp.response>")); } public static void main(String[] args){ System.out.println( new Findfailure(respon).find()); } public String[] find() { try { SAXParser saxParser = new SAXParser(); saxParser.setContentHandler(this); // xmlurl=new InputSource(new URL(xmldoc).openStream()); // System.out.println(xmldoc); xmlurl=new InputSource(new ByteArrayInputStream(xmldoc.getBytes ())); saxParser.parse(xmlurl); } catch (SAXException ex) { // if (found_cvv)return "Incorrect CVV code from back of CreditCard"; // if (found_avs)return "Credit Card does not match Address"; if (found_failure) { if (element_data.indexOf("InvalidCCNumberException")>0) { results[0]="Invalid Credit Card Number"; return results; } if (element_data.indexOf("pp.address requires fullname")>0) { results[0]="Please be sure the name matches that on the Credit Card"; return results; } if (element_data.indexOf("Cannot authorize, expire date")>0) { results[0]="This Credit Card Has Expired"; return results; } int i=element_data.indexOf("Exception:"); if (i<0) { results[0]=element_data; return results ; } results[0]=element_data.substring(i+10,element_data.length()); return results ; } else { results[0]="OK"; return results ; } } catch (Exception e) { e.printStackTrace (); // Catch any other exceptions that may occur // results[0]="Error"; return results ; } results[0]="OK"; return results ; } /* public void processingInstruction(String target, String data) throws SAXException { int href=data.indexOf ("href="); int end_href=data.indexOf ("\"",href+6); xsldoc=data.substring (href+6,end_href); throw new SAXException(xsldoc); } */ public void characters(char[]ch,int start,int length)throws SAXException { element_data=new String(ch,start,length ); throw new SAXException("founderrortext") ; //foundit is not used. Just an OOP artifact. } public void startElement(String namespaceURI, String localName,String qName, Attributes atts) throws SAXException{ if (localName.equals ("pp.authresponse" )) { int jauth= atts.getLength () ; for (int i=0;i<jauth;i++) { if (atts.getLocalName (i).equals("failure")&&atts.getValue (i).equals ("true")){ found_failure=true; break; } if (atts.getLocalName (i).equals("avs")) { results[1]=atts.getValue (i); found_avs=true; } if (atts.getLocalName (i).equals("cvv2result")) { results[2]=atts.getValue (i); found_cvv=true; throw new SAXException("found_stuff") ; } } } } public void fatalError(SAXParseException exception) throws SAXException { System.out.println("**Parsing Fatal Error**\n" + " Line: " + exception.getLineNumber() + "\n" + " URI: " + exception.getSystemId() + "\n" + " Message: " + exception.getMessage()); throw new SAXException("Fatal Error encountered"); } }