Изменить URL-адрес HTTP в адаптере Worklight

Мне нужно создать HTTP-адаптер для рабочего освещения, но URL должен быть программно предоставлен через параметр.

1) Я смог передать имя пользователя / пароль, но не URL. Есть способ сделать это?

Я также пытаюсь создать свой собственный java-адаптер для вызова REST API. Он работает, когда я тестирую адаптер, но кажется, что мой ответ не в ожидаемом формате для рабочего освещения. Я получил эту ошибку:

2) BAD_PARAMETER_EXPECTED_DOCUMENT_OR_ARRAY_OF_DOCUMENT.

Мой адаптер Java возвращает JSONArtifact (JSONObject), но, похоже, рабочий свет хочет, чтобы это было встроено в другой JSONObject, такой как { "array":{...}}. Есть ли способ конвертировать JSONObject в формат, ожидаемый рабочим светом.

    import org.apache.wink.json4j.JSON; import org.apache.wink.json4j.JSONArtifact; import org.apache.wink.json4j.JSONException; частный заголовок headerUserAgent = новый заголовок ("User-Agent", "Mozilla"); частный заголовок headerAccept = new Header("Accept", "application/json"); приватная строка hostName; частная строка baseURL;

protected MyHttpClient(String userName, String userPassword, String hostName, String baseURL) {
    super(); Учетные данные defaultcreds = new UsernamePasswordCredentials(userName,
            userPassword);
    this.getState().setCredentials(AuthScope.ANY, defaultcreds);
    this.hostName = hostName;
    this.baseURL = baseURL;
}


private GetMethod getGetMethod(String url) генерирует URIException {
    GetMethod httpMethod = new GetMethod(new HttpsURL("https://"+hostName+baseURL+url).getEscapedURI());
    addCommonHeaders(HTTPMethod); вернуть httpMethod;
}
private JSONArtifact getResponseAsJSONObject(InputStream inputStream) throws IOException {
    InputStreamReader reader = new InputStreamReader(inputStream);
    try {
        JSONArtifact json = JSON.parse(reader); вернуть JSON;
    } catch (NullPointerException e) {
        // TODO Автоматически сгенерированный блок catch e.printStackTrace();
    } catch (JSONException e) {
        // TODO Автоматически сгенерированный блок catch e.printStackTrace();
    }
    return null;
         }

адаптер:

    функция getResponse(пользователь, пароль) {
        var client = new com.itdove.mypackage.MyHttpClient(пользователь, пароль,"myurl","mybaseurl");
        вернуть {
            массив: client.executeGet("mypath")
        };
    }

это работает с этим, но это решение не предоставляет URL службы в качестве параметра:

    функция getResponseAdapters (путь, имя пользователя, пароль) {

        var input = {
            метод: "получить",
            returnContentType: 'json',
            заголовки: {
                'User-Agent':'Mozilla',
                "Авторизация": "Базовый" +Base64.encode(имя пользователя + ":" + пароль),
            }, 
            путь: '/resources/' + путь
        };

        return WL.Server.invokeHttp(входной);
    }

    функция getResponse(имя пользователя, пароль) {
        вернуть getMySCAWSAdapters(путь, имя пользователя, пароль);
    }

Коллекция

                vAPPArrayAdapterOptions = {
                    имя: 'myResponseAdapter',
                    заменить: '',
                    Удалить: '',
                    добавлять: '',
                    загрузить: {
                        процедура: 'getResponse',
                        params: ["user","password"],
                        ключ: "массив"
                    },
                    принять: функция (данные) {
                        возврат (data.status === 200);
                    }
                },

    ...
                    vAPPArray = wlJsonStore.initCollection(
                            "VAPPArray",
                            vAPPArraySearchFields,
                            {адаптер: vAPPArrayAdapterOptions, 
                            onSuccess: initCollectionSuccessCallback, 
                            onFailure: initCollectionFailureCallback, 
                            нагрузка: истинно});

Большое спасибо Доминик

1 ответ

Решение

Нашел решение:

Во-первых, я использовал Apache под названием JSONArtifact вместо com.ibm.json.java.JSONArtifact!

Во-вторых, я изменил метод реализации моего коллектора, как показано ниже, чтобы добавить статус (не уверен, нужен он или нет)

функция getResponse(пользователь, пароль, имя хоста) {
    var client = new com.itdove.mypackage.IWDHttpClient(пользователь, пароль, имя хоста,"mypath");
    вернуть {
        массив:client.executeGet("mymethod"),
        statusCode: client.getStatusCode(),
        statusReason: client.getStatusReason()
    };
}

в myCollector.js перед вызовом initCollection я устанавливаю имя пользователя, пароль и имя хоста следующим образом.

        params = [settings.json.user, settings.json.password, settings.json.hostname];
        myAdapterOptions.load ["params"] = params;
Другие вопросы по тегам