Я бы использовал структуру данных, которая позволяет анализатору увидеть, произошел ли сбой или нет.Пример:
public class XMLResponse {
private boolean hasFailed;
private Employee employee;
public void setFailure(boolean in) {
this.hasFailed=in;
}
public void setEmployee(Employee in) {
this.employee=in;
}
}
И в вашем парсере посмотрите, является ли ответ ложным или нет.Это основано на том факте, что ваш ответ от веб-службы не содержит тег ответа, если он успешен.
Вот пример парсера, для его использования могут потребоваться некоторые настройки.Это полезно, только если в вашем ответе только 1 сотрудник, в противном случае вам нужно использовать список.
public class XMLHandler extends DefaultHandler {
private XMLResponse myResponse;
private Employee employee;
public XMLResponse getParsedData() {
return this.myResponse;
}
@Override
public void startDocument() throws SAXException {
myResponse = new XMLResponse();
employee = new Employee();
}
@Override
public void startElement(String namespaceURI, String localName,
String qName, Attributes atts) throws SAXException {
buffer = new StringBuffer();
if(localName.equals("employee")) {
employee.setId(atts.getValue("id"));
}
}
@Override
public void endElement(String namespaceURI, String localName, String qName)
throws SAXException {
if(localName.equals("response")) {
if(buffer.toString().contains("failure")) {
myResponse.setFailure(true);
}
}
else if(localName.equals("info")) {
/*
* This is only an example, could bee employee or whatever. You should use the startElement to get the tag.
*/
}
else if(localName.equals("name")) {
employee.setName(buffer.toString());
}
else if(localName.equals("age")) {
employee.setAge(buffer.toString());
}
else if(localName.equals("employee")) {
myResponse.setEmployee(employee);
}
}
/** Gets be called on the following structure:
* <tag>characters</tag> */
StringBuffer buffer;
@Override
public void characters(char ch[], int start, int length) {
buffer.append(ch,start,length);
}