src/org/myorg/myscclient/ServiceLevelException.java |
package org.myorg.myscclient;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;
import org.openide.util.NbBundle;
import org.w3c.dom.Document;
class ServiceLevelException extends IOException {
private static final Logger LOG = Logger.getLogger(ServiceLevelException.class.getName());
private static final String errorCode = "/error/error_code";
private static final String errorDetails = "/error/error_details";
private ServiceErrorType type = ServiceErrorType.OTHER;
private String details = "";
public ServiceLevelException(String xmlDoc) {
super(xmlDoc);
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
Document xmlDocument = factory.newDocumentBuilder().parse(new ByteArrayInputStream(xmlDoc.getBytes("UTF-8")));
XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xPath = xPathFactory.newXPath();
XPathExpression xPathExpression = xPath.compile(errorCode);
this.type = ServiceErrorType.findById((String) xPathExpression.evaluate(xmlDocument, XPathConstants.STRING));
xPathExpression = xPath.compile(errorDetails);
this.details = (String) xPathExpression.evaluate(xmlDocument, XPathConstants.STRING);
} catch (Exception ex) {
LOG.log(Level.INFO, "Received incorrecr response form the server: ", ex);
LOG.log(Level.INFO, "Returned XML: {0}", xmlDoc);
}
}
public ServiceErrorType getType() {
return type;
}
public String getDetails() {
return details;
}
public static enum ServiceErrorType {
PARSE(1000, "MSG_Parse"),
VALIDATION(1001, "MSG_Validation"),
GENERATE(1002, "MSG_Generate"),
OTHER(1010, "MSG_Other");
private int code;
private String message;
ServiceErrorType(int code, String messageKey) {
this.code = code;
this.message = NbBundle.getMessage(ServiceLevelException.class, messageKey);
}
public int getCode() {
return code;
}
public String getMessage() {
return message;
}
public static ServiceErrorType findById(String code) {
int codeInt = Integer.parseInt(code);
for (ServiceErrorType x: values()) {
if (x.getCode() == codeInt) {
return x;
}
}
return null;
}
}
}