import org.xml.sax.XMLReader;\r
import org.xml.sax.helpers.DefaultHandler;\r
\r
+import com.indexdata.mkjsf.pazpar2.ClientCommandResponse;\r
+import com.indexdata.mkjsf.pazpar2.data.sp.AuthResponse;\r
+import com.indexdata.mkjsf.pazpar2.data.sp.CategoriesResponse;\r
+import com.indexdata.mkjsf.pazpar2.data.sp.TargetCategory;\r
+\r
public class ResponseParser extends DefaultHandler {\r
\r
private XMLReader xmlReader = null;\r
private static Logger logger = Logger.getLogger(ResponseParser.class);\r
\r
public static List<String> docTypes = Arrays.asList( "bytarget","termlist","show","stat","record","search","init",\r
- /* SP extras */ "response" ); \r
+ /* SP extras */ "auth", "categories" ); \r
\r
public ResponseParser() {\r
try {\r
* @param response XML response string from Pazpar2\r
* @return Response data object\r
*/\r
- public ResponseDataObject getDataObject (String response) {\r
- this.xml = response;\r
+ public ResponseDataObject getDataObject (ClientCommandResponse response) {\r
+ this.xml = response.getResponseString();\r
try { \r
- xmlReader.parse(new InputSource(new ByteArrayInputStream(response.getBytes("UTF-8"))));\r
+ xmlReader.parse(new InputSource(new ByteArrayInputStream(response.getResponseToParse())));\r
} catch (UnsupportedEncodingException e) {\r
e.printStackTrace(); \r
} catch (IOException e) {\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 if (localName.equals("response")) { // Note, document element not named 'auth'\r
+ currentElement = new ServiceError(); \r
+ // Service Proxy extras \r
+ } else if (localName.equals("auth")) { \r
currentElement = new AuthResponse();\r
+ } else if (localName.equals("categories")) {\r
+ currentElement = new CategoriesResponse();\r
+ } else if (localName.equals("category") && dataElements.peek().getType().equals("categories")) {\r
+ currentElement = new TargetCategory();\r
+ // Catch all\r
} else {\r
currentElement = new ResponseDataObject();\r
}\r