private Pazpar2ResponseData currentElement = null;\r
private Stack<Pazpar2ResponseData> dataElements = new Stack<Pazpar2ResponseData>();\r
private Pazpar2ResponseData result = null;\r
+ private String xml = null;\r
\r
private static final List<String> docTypes = \r
- Arrays.asList("bytarget","termlist","show","stat","record");\r
+ Arrays.asList("bytarget","termlist","show","stat","record","search");\r
\r
public Pazpar2ResponseParser() { \r
try {\r
}\r
}\r
\r
+ public static Pazpar2ResponseParser getParser() {\r
+ return new Pazpar2ResponseParser();\r
+ }\r
+ \r
private void initSax() throws ParserConfigurationException, SAXException {\r
SAXParserFactory spf = SAXParserFactory.newInstance();\r
spf.setNamespaceAware(true);\r
xmlReader.setContentHandler(this); \r
}\r
\r
- public Pazpar2ResponseData getObject (String response) {\r
- try {\r
+ /**\r
+ * Parses a Pazpar2 XML response -- or an error response as XML -- and produces a \r
+ * Pazpar2ResponseData object, i.e. a 'show' object\r
+ * \r
+ * @param response XML response string from Pazpar2\r
+ * @return Response data object\r
+ */\r
+ public Pazpar2ResponseData getDataObject (String response) {\r
+ this.xml = response;\r
+ try { \r
xmlReader.parse(new InputSource(new ByteArrayInputStream(response.getBytes("UTF-8"))));\r
} catch (UnsupportedEncodingException e) {\r
// TODO Auto-generated catch block\r
- e.printStackTrace();\r
+ e.printStackTrace(); \r
} catch (IOException e) {\r
// TODO Auto-generated catch block\r
e.printStackTrace();\r
} catch (SAXException e) {\r
// TODO Auto-generated catch block\r
- e.printStackTrace();\r
+ e.printStackTrace(); \r
}\r
return result;\r
}\r
@Override\r
public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {\r
if (localName.equals("show")) {\r
- currentElement = new ShowResponse();\r
+ currentElement = new ShowResponse(); \r
} else if (localName.equals("hit")) {\r
currentElement = new Hit();\r
} else if (localName.equals("location")) {\r
currentElement = new Location();\r
} else if (localName.equals("bytarget")) {\r
- currentElement = new ByTarget();\r
+ currentElement = new ByTarget(); \r
} else if (localName.equals("target")) {\r
currentElement = new Target();\r
} else if (localName.equals("stat")) {\r
- currentElement = new StatResponse();\r
+ currentElement = new StatResponse(); \r
} else if (localName.equals("termlist")) {\r
- currentElement = new TermListsResponse();\r
+ currentElement = new TermListsResponse(); \r
} else if (localName.equals("list")) {\r
currentElement = new TermListResponse();\r
((TermListResponse)currentElement).setName(atts.getValue("name"));\r
}\r
((TermListResponse)dataElements.peek()).addTerm((TermResponse)currentElement);\r
} else if (localName.equals("record")) {\r
- currentElement = new RecordResponse();\r
+ currentElement = new RecordResponse(); \r
+ } else if (localName.equals("search")) {\r
+ currentElement = new SearchResponse();\r
+ } else if (localName.equals("applicationerror")) {\r
+ currentElement = new CommandError();\r
+ } else if (localName.equals("error") && dataElements.peek().getType().equals("applicationerror")) {\r
+ currentElement = new Pazpar2Error(); \r
} else {\r
currentElement = new Pazpar2ResponseData();\r
}\r
if (!docTypes.contains(localName)) {\r
dataElements.peek().addElement(localName, currentElement);\r
}\r
+ if (this.xml != null) { // Store XML for doc level elements\r
+ currentElement.setXml(xml);\r
+ xml = null;\r
+ }\r
dataElements.push(currentElement); \r
}\r
\r
dataElements.pop();\r
}\r
}\r
-\r
-\r
}\r