Example usage for org.openqa.selenium.remote ErrorCodes UNHANDLED_ERROR

List of usage examples for org.openqa.selenium.remote ErrorCodes UNHANDLED_ERROR

Introduction

In this page you can find the example usage for org.openqa.selenium.remote ErrorCodes UNHANDLED_ERROR.

Prototype

int UNHANDLED_ERROR

To view the source code for org.openqa.selenium.remote ErrorCodes UNHANDLED_ERROR.

Click Source Link

Usage

From source file:com.jobaline.uiautomation.framework.selenium.phantomJsThreeHourTimeoutFix.HttpCommandExecutor.java

License:Apache License

private Response createResponse(HttpResponse httpResponse, HttpContext context,
        EntityWithEncoding entityWithEncoding) throws IOException {
    final Response response;

    Header header = httpResponse.getFirstHeader("Content-Type");

    if (header != null && header.getValue().startsWith("application/json")) {
        String responseAsText = entityWithEncoding.getContentString();

        try {/*from   w w w.j a v a 2 s . c  o m*/
            response = new JsonToBeanConverter().convert(Response.class, responseAsText);
        } catch (ClassCastException e) {
            if (responseAsText != null && "".equals(responseAsText)) {
                // The remote server has died, but has already set some headers.
                // Normally this occurs when the final window of the firefox driver
                // is closed on OS X. Return null, as the return value _should_ be
                // being ignored. This is not an elegant solution.
                return null;
            }
            throw new WebDriverException("Cannot convert text to response: " + responseAsText, e);
        }
    } else {
        response = new Response();

        if (header != null && header.getValue().startsWith("image/png")) {
            response.setValue(entityWithEncoding.getContent());
        } else if (entityWithEncoding.hasEntityContent()) {
            response.setValue(entityWithEncoding.getContentString());
        }

        HttpHost finalHost = (HttpHost) context.getAttribute(HTTP_TARGET_HOST);
        String uri = finalHost.toURI();
        String sessionId = HttpSessionId.getSessionId(uri);
        if (sessionId != null) {
            response.setSessionId(sessionId);
        }

        int statusCode = httpResponse.getStatusLine().getStatusCode();
        if (!(statusCode > 199 && statusCode < 300)) {
            // 4xx represents an unknown command or a bad request.
            if (statusCode > 399 && statusCode < 500) {
                response.setStatus(ErrorCodes.UNKNOWN_COMMAND);
            } else if (statusCode > 499 && statusCode < 600) {
                // 5xx represents an internal server error. The response status should already be set, but
                // if not, set it to a general error code.
                if (response.getStatus() == ErrorCodes.SUCCESS) {
                    response.setStatus(ErrorCodes.UNHANDLED_ERROR);
                }
            } else {
                response.setStatus(ErrorCodes.UNHANDLED_ERROR);
            }
        }

        if (response.getValue() instanceof String) {
            // We normalise to \n because Java will translate this to \r\n
            // if this is suitable on our platform, and if we have \r\n, java will
            // turn this into \r\r\n, which would be Bad!
            response.setValue(((String) response.getValue()).replace("\r\n", "\n"));
        }
    }

    response.setState(errorCodes.toState(response.getStatus()));
    return response;
}

From source file:org.openqa.grid.web.servlet.DriverServlet.java

License:Apache License

protected void process(HttpServletRequest request, HttpServletResponse response) throws IOException {
    RequestHandler req = null;/*from ww  w .  j av  a  2 s .co  m*/
    SeleniumBasedRequest r = null;
    try {
        r = SeleniumBasedRequest.createFromRequest(request, getRegistry());
        req = new RequestHandler(r, response, getRegistry());
        req.process();

    } catch (Throwable e) {
        if (r instanceof WebDriverRequest && !response.isCommitted()) {
            // http://code.google.com/p/selenium/wiki/JsonWireProtocol#Error_Handling
            response.reset();
            response.setContentType("application/json");
            response.setCharacterEncoding("UTF-8");
            response.setStatus(500);

            JSONObject resp = new JSONObject();
            try {
                final ExternalSessionKey serverSession = req.getServerSession();
                resp.put("sessionId", serverSession != null ? serverSession.getKey() : null);
                resp.put("status", ErrorCodes.UNHANDLED_ERROR);
                JSONObject value = new JSONObject();
                value.put("message", e.getMessage());
                value.put("class", e.getClass().getCanonicalName());

                JSONArray stacktrace = new JSONArray();
                for (StackTraceElement ste : e.getStackTrace()) {
                    JSONObject st = new JSONObject();
                    st.put("fileName", ste.getFileName());
                    st.put("className", ste.getClassName());
                    st.put("methodName", ste.getMethodName());
                    st.put("lineNumber", ste.getLineNumber());
                    stacktrace.put(st);
                }
                value.put("stackTrace", stacktrace);
                resp.put("value", value);

            } catch (JSONException e1) {
                e1.printStackTrace();
            }
            String json = resp.toString();

            byte[] bytes = json.getBytes("UTF-8");
            InputStream in = new ByteArrayInputStream(bytes);
            try {
                response.setHeader("Content-Length", Integer.toString(bytes.length));
                ByteStreams.copy(in, response.getOutputStream());
            } finally {
                in.close();
                response.flushBuffer();
            }
        } else {
            throw (new IOException(e));
        }
    }

}