X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fcom%2Findexdata%2Fpz2utils4jsf%2Fpazpar2%2Fdata%2FPazpar2ResponseParser.java;h=73f0cf57a9bc02f21dab9294e9b720361f3b818d;hb=801fbed2d559e224160d473e0860dd765354569f;hp=a08fdbc64fee86ff8d2510c748c0ebfacf1dabcb;hpb=1724e77234e35c61de392b943730b76771ce5bb3;p=mkjsf-moved-to-github.git diff --git a/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/data/Pazpar2ResponseParser.java b/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/data/Pazpar2ResponseParser.java index a08fdbc..73f0cf5 100644 --- a/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/data/Pazpar2ResponseParser.java +++ b/src/main/java/com/indexdata/pz2utils4jsf/pazpar2/data/Pazpar2ResponseParser.java @@ -36,9 +36,10 @@ public class Pazpar2ResponseParser extends DefaultHandler { private Pazpar2ResponseData currentElement = null; private Stack dataElements = new Stack(); private Pazpar2ResponseData result = null; + private String xml = null; private static final List docTypes = - Arrays.asList("bytarget","termlist","show","stat","record"); + Arrays.asList("bytarget","termlist","show","stat","record","search"); public Pazpar2ResponseParser() { try { @@ -52,6 +53,10 @@ public class Pazpar2ResponseParser extends DefaultHandler { } } + public static Pazpar2ResponseParser getParser() { + return new Pazpar2ResponseParser(); + } + private void initSax() throws ParserConfigurationException, SAXException { SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setNamespaceAware(true); @@ -60,18 +65,26 @@ public class Pazpar2ResponseParser extends DefaultHandler { xmlReader.setContentHandler(this); } - public Pazpar2ResponseData getObject (String response) { - try { + /** + * Parses a Pazpar2 XML response -- or an error response as XML -- and produces a + * Pazpar2ResponseData object, i.e. a 'show' object + * + * @param response XML response string from Pazpar2 + * @return Response data object + */ + public Pazpar2ResponseData getDataObject (String response) { + this.xml = response; + try { xmlReader.parse(new InputSource(new ByteArrayInputStream(response.getBytes("UTF-8")))); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block - e.printStackTrace(); + e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block - e.printStackTrace(); + e.printStackTrace(); } return result; } @@ -83,19 +96,19 @@ public class Pazpar2ResponseParser extends DefaultHandler { @Override public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { if (localName.equals("show")) { - currentElement = new ShowResponse(); + currentElement = new ShowResponse(); } else if (localName.equals("hit")) { currentElement = new Hit(); } else if (localName.equals("location")) { currentElement = new Location(); } else if (localName.equals("bytarget")) { - currentElement = new ByTarget(); + currentElement = new ByTarget(); } else if (localName.equals("target")) { currentElement = new Target(); } else if (localName.equals("stat")) { - currentElement = new StatResponse(); + currentElement = new StatResponse(); } else if (localName.equals("termlist")) { - currentElement = new TermListsResponse(); + currentElement = new TermListsResponse(); } else if (localName.equals("list")) { currentElement = new TermListResponse(); ((TermListResponse)currentElement).setName(atts.getValue("name")); @@ -108,7 +121,13 @@ public class Pazpar2ResponseParser extends DefaultHandler { } ((TermListResponse)dataElements.peek()).addTerm((TermResponse)currentElement); } else if (localName.equals("record")) { - currentElement = new RecordResponse(); + currentElement = new RecordResponse(); + } else if (localName.equals("search")) { + currentElement = new SearchResponse(); + } else if (localName.equals("applicationerror")) { + currentElement = new CommandError(); + } else if (localName.equals("error") && dataElements.peek().getType().equals("applicationerror")) { + currentElement = new Pazpar2Error(); } else { currentElement = new Pazpar2ResponseData(); } @@ -119,6 +138,10 @@ public class Pazpar2ResponseParser extends DefaultHandler { if (!docTypes.contains(localName)) { dataElements.peek().addElement(localName, currentElement); } + if (this.xml != null) { // Store XML for doc level elements + currentElement.setXml(xml); + xml = null; + } dataElements.push(currentElement); } @@ -136,6 +159,4 @@ public class Pazpar2ResponseParser extends DefaultHandler { dataElements.pop(); } } - - }