Изменить 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;