Example usage for com.google.gwt.json.client JSONValue isObject

List of usage examples for com.google.gwt.json.client JSONValue isObject

Introduction

In this page you can find the example usage for com.google.gwt.json.client JSONValue isObject.

Prototype

public JSONObject isObject() 

Source Link

Document

Returns non-null if this JSONValue is really a JSONObject.

Usage

From source file:com.mcherm.zithiacharsheet.client.model.JSONDeserializer.java

License:Apache License

public void update(JSONValue inputValue, ZithiaCharacter zithiaCharacter) {
    zithiaCharacter.changeStatsOnRaceUpdate(false);
    JSONObject inputObject = notNull(inputValue.isObject());
    updateFromField(inputObject, "race", zithiaCharacter.getRaceValue());
    updateFromField(inputObject, "names", zithiaCharacter.getNames());
    updateFromField(inputObject, "statValues", zithiaCharacter.getStatValues());
    updateFromField(inputObject, "skillList", zithiaCharacter.getSkillList());
    updateFromField(inputObject, "weaponTraining", zithiaCharacter.getWeaponTraining());
    updateFromField(inputObject, "talentList", zithiaCharacter.getTalentList());
    updateFromField(inputObject, "costs", zithiaCharacter.getCosts());
    updateFromField(inputObject, "combatValues", zithiaCharacter.getCombatValues());
    updateFromField(inputObject, "armorValue", zithiaCharacter.getArmorValue());
    updateFromField(inputObject, "notes", zithiaCharacter.getCharacterNotes());
    zithiaCharacter.changeStatsOnRaceUpdate(true);
}

From source file:com.moesol.gwt.maps.client.tms.FeatureReader.java

License:Open Source License

private List<Feature> parseFeatures(String text) {
    ArrayList<Feature> features = new ArrayList<Feature>();
    try {//from w  w  w  . j  ava 2  s.  c  o  m
        JSONArray array = null;
        JSONValue parsedValue = JSONParser.parseStrict(text);
        if (m_root != null) {
            // should be an object with an array with property m_root
            JSONObject rootObj = parsedValue.isObject();
            if (rootObj != null) {
                JSONValue arrayValue = rootObj.get(m_root);
                if (arrayValue != null) {
                    array = arrayValue.isArray();
                }
            }
        } else {
            array = parsedValue.isArray();
        }

        if (array != null) {
            for (int i = 0; i < array.size(); i++) {
                JSONObject obj = (JSONObject) array.get(i);

                String title = getStringProperty(m_titlePropertyName, obj);
                double lat = getDoubleProperty(m_latPropertyName, obj);
                double lng = getDoubleProperty(m_lngPropertyName, obj);
                String iconUrl = getStringProperty(m_iconPropertyName, obj);
                if (m_iconPropertyConverter != null) {
                    iconUrl = m_iconPropertyConverter.convert(iconUrl);
                }
                Feature feature = new Feature.Builder(title, lat, lng).iconUrl(iconUrl).build();
                features.add(feature);
            }
        }
    } catch (Throwable t) {
        Logger.getLogger(FeatureReader.class.getName()).log(Level.SEVERE, "Failed parsing features", t);
    }

    return features;
}

From source file:com.palmagroup.gwt.orders.client.gin.JsonConverter.java

License:Open Source License

/**
 * Decodes a JSONObject to a map./*w  ww . j  a  v  a2 s.com*/
 * 
 * @param jso
 *            the JSONObject
 * @return the map
 */
public static Map<String, Object> decode(JSONObject jso) {
    Map<String, Object> map = new FastMap<Object>();
    for (String key : jso.keySet()) {
        JSONValue j = jso.get(key);
        if (j.isObject() != null) {
            map.put(key, decode(j.isObject()));
        } else if (j.isArray() != null) {
            map.put(key, decodeToList(j.isArray()));
        } else if (j.isBoolean() != null) {
            map.put(key, j.isBoolean().booleanValue());
        } else if (j.isNumber() != null) {
            map.put(key, j.isNumber().doubleValue());
        } else if (j.isString() != null) {
            map.put(key, decodeValue(j.isString().stringValue()));
        }
    }
    return map;
}

From source file:com.parabay.client.utils.JSONCodec.java

License:Apache License

/**
 * Converts a JSONValue to a Java object.
 * /*  w w w .  ja v a  2  s.  co  m*/
 * @param value
 * @return
 */
private Object buildJavaObjectFromJSONValue(JSONValue value) {
    if (value.isNull() != null) {
        return null;
    }
    if (value.isBoolean() != null) {
        return Boolean.valueOf(value.isBoolean().booleanValue());
    }
    if (value.isString() != null) {
        return value.isString().stringValue();
    }
    if (value.isNumber() != null) {
        return buildNumber(value.isNumber().toString());
    }
    if (value.isArray() != null) {
        return buildJavaArrayFromJSONArray(value.isArray());
    }
    if (value.isObject() != null) {
        return buildJavaMapFromJSONObject(value.isObject());
    }
    return null;
}

From source file:com.qualogy.qafe.gwt.client.util.JSNIUtil.java

License:Apache License

/**
 * Convert JavaScript objects to their Java representations.
 *///w  w w  . j av a 2s.  c  o  m
static Object resolveJavaValue(JSONValue jsonValue) {
    if (jsonValue == null) {
        return null;
    }
    Object value = null;
    if (jsonValue.isArray() != null) {
        value = resolveJavaList(jsonValue.isArray());
    } else if (jsonValue.isObject() != null) {
        value = resolveJavaMap(jsonValue.isObject());
    } else if (jsonValue.isBoolean() != null) {
        value = jsonValue.isBoolean().booleanValue();
    } else if (jsonValue.isNumber() != null) {
        value = jsonValue.isNumber().doubleValue();
    } else if (jsonValue.isString() != null) {
        value = jsonValue.isString().stringValue();
    }
    return value;
}

From source file:com.smartgwt.extensions.fileuploader.client.FileUploader.java

License:Open Source License

private void parseResult(JSONValue jsonValue) {
    JSONObject jsonObject = jsonValue.isObject();

    if (jsonObject != null) {
        String testData = "";
        Set<String> keys = jsonObject.keySet();
        for (String key : keys) {
            testData += key + ":" + jsonObject.get(key) + ";";
        }//from   www. j av a2  s. c  o  m
        GWT.log(testData, null);

        String result = String.valueOf(jsonObject.get(JSON_KEY_SUCCESS));
        if ("true".equals(result)) {
            onSuccess(messageDictionary.get(MSG_SUCCESS), jsonValue);
        } else {
            onFailure(String.valueOf(jsonObject.get(JSON_KEY_REASON)), jsonValue);
        }
    } else {
        onFailure(messageDictionary.get(MSG_SERVER_SIDE_ERROR), null);
    }
}

From source file:com.smartgwt.mobile.client.data.DataSource.java

License:Open Source License

private static Object fromJSONValue(JSONValue val, SimpleType type) {
    final JSONObject obj = val.isObject();
    // Special handling if we happen to encounter an object that is not a Date: Convert to
    // a `Record' instead of trying to do something with the stringified representation.
    if (obj != null && !(((Object) obj.getJavaScriptObject()) instanceof Date)
            && !JSOHelper.isDate(obj.getJavaScriptObject())) {
        return extractRecord(obj, Collections.<String, DataSourceField>emptyMap());
    } else {//from   w  ww  .j  av  a  2 s .c om
        return type._fromVal(val);
    }
}

From source file:com.smartgwt.mobile.client.data.DataSource.java

License:Open Source License

private static Record extractRecord(JSONObject datumObj, Map<String, DataSourceField> fields) {
    final Map<String, Object> attributes = new HashMap<String, Object>();

    for (final String key : datumObj.keySet()) {
        final JSONValue val = datumObj.get(key);
        if (val == null)
            continue;

        final DataSourceField field = fields.get(key);
        final String typeName = (field == null ? null : field.getType());
        SimpleType type = typeName == null ? null : SimpleType.getType(typeName);

        final DataSource typeDS;
        if (type == null && field != null && (typeDS = field.getTypeAsDataSource()) != null) {
            final Map<String, DataSourceField> nestedFields = typeDS._getMergedFields();

            final Boolean multiple = field.isMultiple();
            if (multiple != null && multiple.booleanValue()) {
                final JSONArray nestedDataArr = val.isArray();
                attributes.put(key,/*from  w w  w .  j a v  a  2 s  .  c om*/
                        nestedDataArr == null ? null : extractRecordList(nestedDataArr, nestedFields));
            } else {
                final JSONObject nestedDatumObj = val.isObject();
                attributes.put(key,
                        nestedDatumObj == null ? null : extractRecord(nestedDatumObj, nestedFields));
            }
        } else {
            if (type == null)
                type = SimpleType.TEXT_TYPE;
            assert type != null;

            final Boolean multiple = (field == null ? null : field.isMultiple());
            if (multiple != null && multiple.booleanValue()) {
                assert field != null;
                final List<Object> l = new ArrayList<Object>();
                JSONArray arr = val.isArray();
                if (arr == null) {
                    l.add(fromJSONValue(val, type));
                } else {
                    for (int i = 0; i < arr.size(); ++i) {
                        JSONValue subVal = arr.get(i);
                        if (subVal == null)
                            continue;
                        l.add(fromJSONValue(subVal, type));
                    }
                }
                attributes.put(key, l);
            } else {
                attributes.put(key, fromJSONValue(val, type));
            }
        }
    }

    final Record record = new Record();
    record.putAll(attributes);
    return record;
}

From source file:com.smartgwt.mobile.client.data.DataSource.java

License:Open Source License

private static RecordList extractRecordList(JSONArray dataArr, Map<String, DataSourceField> fields) {
    final DataSourceField pkField = getPrimaryKeyField(fields);
    final String pkFieldName = pkField == null ? "id" : pkField.getName();

    final RecordList records = new RecordList();
    for (int i = 0; i < dataArr.size(); ++i) {
        final JSONValue datumVal = dataArr.get(i);
        if (datumVal == null)
            continue;
        JSONObject datumObj = datumVal.isObject();
        if (datumObj != null) {
            records.add(extractRecord(datumObj, fields));
        } else {//from ww w .j  a va  2s.c om
            if (datumVal.isNull() != null)
                continue;

            String idValue;
            JSONString datumStr = datumVal.isString();
            if (datumStr != null)
                idValue = datumStr.stringValue();
            else
                idValue = datumVal.toString();

            idValue = idValue.trim();
            final Record record = new Record();
            record.setAttribute(pkFieldName, idValue);
            records.add(record);
        }
    }

    return records;
}

From source file:com.smartgwt.mobile.client.data.DataSource.java

License:Open Source License

@SGWTInternal
protected void _sendGWTRequest(DSRequest dsRequest) {
    final int transactionNum = com.smartgwt.mobile.client.rpc.RPCManager._getNextTransactionNum();
    dsRequest._setTransactionNum(transactionNum);
    // For the time being, the request ID and transactionNum are the same.
    dsRequest.setRequestId(Integer.toString(transactionNum));

    final boolean strictJSON = Canvas._booleanValue(getStrictJSON(), false);
    final DSOperationType opType = dsRequest.getOperationType();
    final OperationBinding opBinding = getOperationBinding(dsRequest);

    final DSDataFormat dataFormat;
    if (opBinding == null)
        dataFormat = DSDataFormat.JSON;//from w  w  w . j av  a  2 s .  co m
    else if (opBinding.getDataFormat() != null)
        dataFormat = opBinding.getDataFormat();
    else
        dataFormat = DSDataFormat.JSON;
    assert dataFormat != null;

    DSProtocol protocol;
    if (opBinding != null && opBinding.getDataProtocol() != null) {
        protocol = opBinding.getDataProtocol();
    } else {
        protocol = getDataProtocol();
        if (protocol == null) {
            protocol = (opType == null || opType == DSOperationType.FETCH) ? null : DSProtocol.POSTMESSAGE;
        }
    }

    final Object originalData = dsRequest.getData();
    Object transformedData;
    switch (protocol == null ? DSProtocol.GETPARAMS : protocol) {
    case GETPARAMS:
    case POSTPARAMS:
        transformedData = transformRequest(dsRequest);
        if (transformedData == null)
            transformedData = Collections.EMPTY_MAP;
        else if (!(transformedData instanceof Map)) {
            // TODO Issue a warning.
            transformedData = Collections.EMPTY_MAP;
        }
        break;
    case POSTMESSAGE:
        transformedData = transformRequest(dsRequest);
        if (!(transformedData instanceof String)) {
            if (dataFormat != DSDataFormat.JSON) {
                throw new UnsupportedOperationException(
                        "Only serialization of DSRequests in JSON format is supported.");
            }
            transformedData = dsRequest._serialize(strictJSON);
            if (dsRequest.getContentType() == null) {
                // For best interoperability with ASP.NET AJAX services, send Content-Type:application/json.
                // http://weblogs.asp.net/scottgu/archive/2007/04/04/json-hijacking-and-how-asp-net-ajax-1-0-mitigates-these-attacks.aspx
                dsRequest.setContentType("application/json;charset=UTF-8");
            }
        }
        break;
    default:
        assert protocol != null;
        throw new UnsupportedOperationException(
                "In transforming the DSRequest, failed to handle case:  protocol:" + protocol.getValue());
    }
    if (transformedData != dsRequest) {
        dsRequest.setData(transformedData);
    }
    dsRequest.setOriginalData(originalData);
    if (dsRequest.getDataSource() == null)
        dsRequest.setDataSource(getID());
    final DSRequest finalDSRequest = dsRequest;
    assert finalDSRequest.getOperationType() == opType;

    if (protocol == null) {
        assert opType == DSOperationType.FETCH;
        if (transformedData == null
                || (transformedData instanceof Map && ((Map<?, ?>) transformedData).isEmpty())) {
            protocol = DSProtocol.GETPARAMS;
        } else {
            protocol = DSProtocol.POSTMESSAGE;
            transformedData = dsRequest._serialize(strictJSON);
            if (dsRequest.getContentType() == null) {
                dsRequest.setContentType("application/json;charset=UTF-8");
            }
        }
    }

    URIBuilder workBuilder;

    {
        String work = finalDSRequest.getDataURL();

        if (work == null) {
            if (opType != null) {
                switch (opType) {
                case FETCH:
                    work = getFetchDataURL();
                    break;
                case ADD:
                    work = getAddDataURL();
                    break;
                case UPDATE:
                    work = getUpdateDataURL();
                    break;
                case REMOVE:
                    work = getRemoveDataURL();
                    break;
                case VALIDATE:
                    work = getValidateDataURL();
                    break;
                case CUSTOM:
                    work = getCustomDataURL();
                    break;
                }
            }

            // common url
            if (work == null) {
                work = getDataURL();

                // construct default url
                if (work == null) {
                    work = RPCManager.getActionURL();
                    if (work.endsWith("/")) {
                        work = work.substring(0, work.length() - 1);
                    }
                }
            }
        }

        workBuilder = new URIBuilder(work);
    }

    // build up the query string
    final DateTimeFormat datetimeFormat = finalDSRequest._getDatetimeFormat();

    {
        Map<String, Object> params = finalDSRequest.getParams();

        if (protocol == DSProtocol.GETPARAMS || protocol == DSProtocol.POSTPARAMS) {
            if (params == null)
                params = new LinkedHashMap<String, Object>();

            if (protocol == DSProtocol.GETPARAMS) {
                assert transformedData instanceof Map;
                @SuppressWarnings("unchecked")
                final Map<String, Object> m = (Map<String, Object>) transformedData;
                params.putAll(m);
            }

            if (getSendMetaData()) {
                String metaDataPrefix = getMetaDataPrefix();
                if (metaDataPrefix == null)
                    metaDataPrefix = "_";

                params.put(metaDataPrefix + "operationType", opType);
                params.put(metaDataPrefix + "operationId", finalDSRequest.getOperationId());
                params.put(metaDataPrefix + "startRow", finalDSRequest.getStartRow());
                params.put(metaDataPrefix + "endRow", finalDSRequest.getEndRow());
                params.put(metaDataPrefix + "sortBy", finalDSRequest._getSortByString());
                params.put(metaDataPrefix + "useStrictJSON", Boolean.TRUE);
                params.put(metaDataPrefix + "textMatchStyle", finalDSRequest.getTextMatchStyle());
                params.put(metaDataPrefix + "oldValues", finalDSRequest.getOldValues());
                params.put(metaDataPrefix + "componentId", finalDSRequest.getComponentId());

                params.put(metaDataPrefix + "dataSource", dsRequest.getDataSource());
                params.put("isc_metaDataPrefix", metaDataPrefix);
            }

            params.put("isc_dataFormat", dataFormat.getValue());
        }

        if (params != null) {
            for (final Map.Entry<String, Object> e : params.entrySet()) {
                workBuilder.setQueryParam(e.getKey(), e.getValue(), strictJSON, false, datetimeFormat);
            }
        }
    }

    // automatically add the data format even to user-provided dataURLs unless they contain the param already
    if (!workBuilder.containsQueryParam("isc_dataFormat")) {
        workBuilder.appendQueryParam("isc_dataFormat", dataFormat.getValue());
    }

    if (protocol == DSProtocol.POSTPARAMS) {
        assert transformedData instanceof Map;
        @SuppressWarnings("unchecked")
        final Map<String, Object> m = (Map<String, Object>) transformedData;

        String requestContentType = finalDSRequest.getContentType();
        if (requestContentType != null)
            requestContentType = requestContentType.trim();

        if (requestContentType == null || requestContentType.startsWith("application/x-www-form-urlencoded")) {
            URIBuilder postBodyBuilder = new URIBuilder("");
            for (final Map.Entry<String, Object> e : m.entrySet()) {
                postBodyBuilder.setQueryParam(e.getKey(), e.getValue(), strictJSON, false, datetimeFormat);
            }
            // Exclude the '?'.
            transformedData = postBodyBuilder.toString().substring(1);
        } //else if (requestContentType.startsWith("multipart/form-data")) {} // TODO
        else {
            throw new IllegalArgumentException(
                    "Request content type '" + requestContentType + "' is not supported.");
        }
    }

    RequestBuilder.Method httpMethod = getHttpMethod(finalDSRequest.getHttpMethod());
    if (httpMethod == null) {
        if (protocol == DSProtocol.GETPARAMS)
            httpMethod = RequestBuilder.GET;
        else if (protocol == DSProtocol.POSTPARAMS || protocol == DSProtocol.POSTMESSAGE) {
            httpMethod = RequestBuilder.POST;
        } else {
            if (opType == null || opType == DSOperationType.FETCH) {
                httpMethod = RequestBuilder.GET;
            } else {
                httpMethod = RequestBuilder.POST;
            }
        }
    } else if (httpMethod == RequestBuilder.GET) {
        if (protocol == DSProtocol.POSTPARAMS ||
        //protocol == DSProtocol.POSTXML
                protocol == DSProtocol.POSTMESSAGE) {
            // TODO Warn that GET requests do not support bodies.
            httpMethod = RequestBuilder.POST;
        }
    }

    String requestContentType = finalDSRequest.getContentType();
    if (requestContentType != null) {
        if (httpMethod == RequestBuilder.GET) {
            // TODO Warn that GET requests do not support bodies.
            requestContentType = null;
        }
    } else {
        if (protocol == DSProtocol.POSTPARAMS)
            requestContentType = "application/x-www-form-urlencoded";
        //else if (protocol == DSProtocol.POSTXML) requestContentType = "text/xml";
    }

    final RequestBuilder rb = new RequestBuilder(httpMethod, workBuilder.toString());
    final Integer timeoutMillis = finalDSRequest.getTimeout();
    rb.setTimeoutMillis(timeoutMillis == null ? RPCManager._getDefaultTimeoutMillis()
            : Math.max(1, timeoutMillis.intValue()));

    final String authorization = finalDSRequest.getAuthorization();
    if (authorization != null)
        rb.setHeader("Authorization", authorization);

    final Map<String, String> httpHeaders = finalDSRequest.getHttpHeaders();
    if (httpHeaders != null) {
        for (Map.Entry<String, String> entry : httpHeaders.entrySet()) {
            rb.setHeader(entry.getKey(), entry.getValue());
        }
    }

    if (dataFormat == DSDataFormat.XML) {
        rb.setHeader("Accept", "application/xml,text/xml,*/*");
    } else if (dataFormat == DSDataFormat.JSON) {
        rb.setHeader("Accept", "application/json,*/*");
    }

    if (requestContentType != null) {
        rb.setHeader("Content-Type", requestContentType);
    }

    if (httpMethod != RequestBuilder.GET) {
        switch (protocol) {
        case POSTPARAMS: // `transformedData` has already been created and is now a String.
        case POSTMESSAGE:
            rb.setRequestData((String) transformedData);
            break;
        case GETPARAMS:
            // Already handled earlier when the query params were appended to `workBuilder'.
            break;
        default:
            throw new UnsupportedOperationException(
                    "In setting the request data, failed to handle case protocol:" + protocol);
        }
    }

    rb.setCallback(new RequestCallback() {
        @Override
        public void onError(Request request, Throwable exception) {
            final DSResponse dsResponse = new DSResponse(finalDSRequest);
            final int status;
            if (exception instanceof RequestTimeoutException)
                status = RPCResponse.STATUS_SERVER_TIMEOUT;
            else
                status = RPCResponse.STATUS_FAILURE;
            dsResponse.setStatus(status);
            onError(dsResponse);
        }

        private void onError(DSResponse dsResponse) {
            final DSRequest dsRequest = finalDSRequest;
            final boolean errorEventCancelled = ErrorEvent._fire(DataSource.this, dsRequest, dsResponse);
            if (!errorEventCancelled)
                RPCManager._handleError(dsResponse, dsRequest);
        }

        @Override
        public void onResponseReceived(Request request, Response response) {
            assert response != null;

            String responseText = response.getText();
            if (responseText == null)
                responseText = "";
            assert responseText != null;

            int httpResponseCode = response.getStatusCode();

            final HTTPHeadersMap responseHTTPHeaders = new HTTPHeadersMap();
            for (final Header h : response.getHeaders()) {
                if (h != null) {
                    responseHTTPHeaders.put(h.getName(), h.getValue());
                }
            }

            int status = 0;
            if (0 == httpResponseCode || // file:// requests (e.g. if Showcase is packaged with PhoneGap.)
            (200 <= httpResponseCode && httpResponseCode < 300) || httpResponseCode == 304) // 304 Not Modified
            {
                status = RPCResponse.STATUS_SUCCESS;
            } else {
                status = RPCResponse.STATUS_FAILURE;
                final DSResponse errorResponse = new DSResponse(finalDSRequest);
                errorResponse.setStatus(RPCResponse.STATUS_FAILURE);
                errorResponse.setHttpResponseCode(httpResponseCode);
                errorResponse._setHttpHeaders(responseHTTPHeaders);
                onError(errorResponse);
                return;
            }

            Object rawResponse;
            final DSResponse dsResponse;

            String origResponseContentType = responseHTTPHeaders.get("Content-Type");
            if (origResponseContentType == null
                    || (origResponseContentType = origResponseContentType.trim()).length() == 0) {
                origResponseContentType = "application/octet-stream";
            }

            String responseContentType = origResponseContentType;
            // remove the media type parameter if present
            // http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.7
            final int semicolonPos = responseContentType.indexOf(';');
            if (semicolonPos != -1) {
                responseContentType = responseContentType.substring(0, semicolonPos).trim();
                if (responseContentType.length() == 0)
                    responseContentType = "application/octet-stream";
            }

            if (dataFormat == DSDataFormat.CUSTOM) {
                rawResponse = responseText;

                dsResponse = new DSResponse(finalDSRequest, status);
                dsResponse.setHttpResponseCode(httpResponseCode);
                dsResponse._setHttpHeaders(responseHTTPHeaders);
                dsResponse.setContentType(origResponseContentType);

                transformResponse(dsResponse, finalDSRequest, responseText);
            } else {
                if (dataFormat == DSDataFormat.XML) {
                    final Element rootEl;
                    if (responseText.isEmpty()) {
                        rawResponse = rootEl = null;
                        dsResponse = new DSResponse(finalDSRequest, status);
                    } else {
                        final Document document;
                        try {
                            document = XMLParser.parse(responseText);
                        } catch (DOMParseException ex) {
                            onError(request, ex);
                            return;
                        }

                        rootEl = document.getDocumentElement();
                        rawResponse = rootEl;

                        dsResponse = new DSResponse(finalDSRequest, status, rootEl);

                        String dataTagName, recordName;
                        if (opBinding == null) {
                            dataTagName = _getDataTagName();
                            recordName = null;
                        } else {
                            dataTagName = opBinding._getDataTagName(_getDataTagName());
                            recordName = opBinding.getRecordName();
                        }
                        if (recordName == null)
                            recordName = _getRecordName();

                        final Element dataEl = extractDataElement(rootEl, dataTagName);
                        final List<Element> recordNodes = extractRecordElements(dataEl, recordName);

                        if (recordNodes != null && !recordNodes.isEmpty()) {
                            final RecordList records = extractRecordList(recordNodes);
                            dsResponse.setData(records);
                        } else if (rootEl.equals(dataEl)) {
                            dsResponse._setData(XMLUtil.getTextContent(dataEl));
                        }
                    }
                    dsResponse.setHttpResponseCode(httpResponseCode);
                    dsResponse._setHttpHeaders(responseHTTPHeaders);

                    transformResponse(dsResponse, finalDSRequest, rootEl);
                } else {
                    String jsonPrefix = getJsonPrefix();
                    if (jsonPrefix == null)
                        jsonPrefix = "";
                    String jsonSuffix = getJsonSuffix();
                    if (jsonSuffix == null)
                        jsonSuffix = "";

                    // auto-detect default wrapper text returned by RestHandler
                    if (responseText.startsWith(jsonPrefix) && responseText.endsWith(jsonSuffix)) {
                        responseText = responseText.substring(jsonPrefix.length(),
                                responseText.length() - jsonSuffix.length());
                        responseContentType = "application/json";
                    }

                    if (dataFormat == DSDataFormat.JSON) {
                        if (responseText.isEmpty()) {
                            rawResponse = null;
                            dsResponse = new DSResponse(finalDSRequest, status);
                        } else {
                            JSONObject responseObj;
                            try {
                                responseObj = JSONParser.parseLenient(responseText).isObject();
                            } catch (JSONException ex) {
                                onError(request, ex);
                                return;
                            }
                            if (responseObj != null && responseObj.containsKey("response")) {
                                JSONValue val = responseObj.get("response");
                                responseObj = (val == null ? null : val.isObject());
                            }
                            rawResponse = responseObj;

                            dsResponse = new DSResponse(finalDSRequest, status, responseObj);

                            if (responseObj != null && responseObj.containsKey("data")) {
                                final JSONValue dataVal = responseObj.get("data");
                                assert dataVal != null;

                                final JSONString dataStr = dataVal.isString();
                                if (dataStr != null) {
                                    dsResponse._setData(dataStr.stringValue());
                                } else {
                                    JSONArray dataArr = dataVal.isArray();
                                    if (dataArr == null) {
                                        JSONObject datumObj = dataVal.isObject();
                                        if (datumObj != null) {
                                            dataArr = new JSONArray();
                                            dataArr.set(0, datumObj);
                                        }
                                    }
                                    if (dataArr != null) {
                                        final RecordList records = extractRecordList(dataArr);
                                        dsResponse.setData(records);
                                    }
                                }
                            }
                        }
                        dsResponse.setHttpResponseCode(httpResponseCode);
                        dsResponse._setHttpHeaders(responseHTTPHeaders);

                        transformResponse(dsResponse, finalDSRequest, rawResponse);
                    } else {
                        throw new UnsupportedOperationException("Unhandled dataFormat:" + dataFormat);
                    }
                }
            }

            if (dsResponse.getInvalidateCache()) {
                //invalidateDataSourceDataChangedHandlers(finalDSRequest, dsResponse);
            }

            status = dsResponse.getStatus();
            if (status >= 0) {
                DSDataChangedEvent.fire(DataSource.this, dsResponse, finalDSRequest);
            } else {
                // Unless it was a validation error, or the request specified willHandleError,
                // go through centralized error handling (if alerting the failure string
                // can be dignified with such a name!)
                if (status != -4 && !finalDSRequest._getWillHandleError()) {
                    onError(dsResponse);
                    return;
                }
            }

            // fireResponseCallbacks
            final DSCallback callback = finalDSRequest.getCallback(),
                    afterFlowCallback = finalDSRequest._getAfterFlowCallback();
            if (callback != null) {
                callback.execute(dsResponse, rawResponse, finalDSRequest);
            }
            if (afterFlowCallback != null && afterFlowCallback != callback) {
                afterFlowCallback.execute(dsResponse, rawResponse, finalDSRequest);
            }
        }
    });

    try {
        rb.send();
    } catch (RequestException re) {
        re.printStackTrace();
    }
    ++_numDSRequestsSent;
}