При выполнении вызова к адаптеру MFP, я получаю этот ответIBM MobileFirst 7.1 - Ошибка при создании запроса от клиента Android
{
"statusCode":400,
"errors":[
],
"isSuccessful":true,
"statusReason":"Bad Request",
"html":{
"body":"",
"html":"http://www.w3.org/1999/xhtml",
"xmlns":"http://www.w3.org/1999/xhtml"
},
"responseHeaders":{
"Content-Language":"en-US",
"Date":"Thu, 11 Feb 2016 14:47:03 GMT",
"Content-Length":"0",
"Expires":"Thu, 01 Dec 1994 16:00:00 GMT",
"Set-Cookie":[
"JSESSIONID=0000e8OwOu5nRy5GHcnq5aOyJ6W:-1; Path=/; HttpOnly",
"JSESSIONID=0000kr3JjAeXlHQyeCFsWm9Sagx:-1; Path=/; HttpOnly"
],
"Connection":"Close",
"X-Powered-By":"Servlet/3.0",
"Cache-Control":"no-cache=\"set-cookie, set-cookie2\""
},
"warnings":[
],
"totalTime":200,
"responseTime":198,
"authRequired":true,
"info":[
]
}
Дело в том, когда я сделать такой же запрос на мой WEBSPHERE сервер через браузер или вызов адаптера непосредственно из eclipse, я получаю ожидаемый ответ.
Соответствующий Android код
вызов на сервер MFP
public static void validateUserId(MobileFirstActivity activity, String userId, boolean saveUserId,
WLResponseListener listener) {
ValidateUserIdRequest validateUserIdRequest = new ValidateUserIdRequest(userId, saveUserId);
activity.performResourceRequest(validateUserIdRequest, listener);
}
Объект ValidateUserIdRequest
class ValidateUserIdRequest implements ResourceRequest {
private final String userId;
private static final String appVersion = BuildConfig.VERSION_NAME;
private final String saveUserId;
private static final String devicePrint = "Android";
public ValidateUserIdRequest(String userId, boolean saveUserId) {
this.userId = userId;
this.saveUserId = String.valueOf(saveUserId);
}
@Override
public int setEndpointResource() {
return R.string.ValidateUserId;
}
@Override
public void setParams(WLResourceRequest resourceRequest) {
resourceRequest.setQueryParameter("params",
ResourceUtils.convertMapToParamString(
userId, appVersion, saveUserId, devicePrint));
}
@Override
public String setRequestMethod() {
return WLResourceRequest.GET;
}
Метод, который фактические выполняет эту просьбу
public void performResourceRequest(final ResourceRequest resourceRequest, final WLResponseListener listener) {
if (!isConnectedToMfpServer) {
connectToMfpServer(new WLResponseListener() {
@Override
public void onSuccess(WLResponse wlResponse) {
isConnectedToMfpServer = true;
performResourceRequest(resourceRequest, listener);
}
@Override
public void onFailure(WLFailResponse wlFailResponse) {
isConnectedToMfpServer = false;
listener.onFailure(wlFailResponse);
}
});
} else {
try {
URI endpoint = new URI(getString(resourceRequest.setEndpointResource()));
WLResourceRequest request = new WLResourceRequest(endpoint, resourceRequest.setRequestMethod());
resourceRequest.setParams(request);
request.send(listener);
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
}
Метод утилита, которая преобразует String [] Params к совместимому строки.
public static String convertMapToParamString(String... params) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("[");
for (int i = 0; i < params.length; i++) {
stringBuilder.append("'").append(params[i]).append("'");
if (i != (params.length - 1)) {
stringBuilder.append(",");
}
}
stringBuilder.append("]");
return stringBuilder.toString();
}
convertMapToParamString дает мне это в результатеas per the documentation for Javascript based adapters
['mbltest3','1.0','false','Android']
Я получаю правильные параметры на моем сервере MFP, но запрос по-прежнему плохо. Что еще я мог попробовать?
Я думаю, что проблема не между клиентом и МФУ, а скорее между МФП и бэкэнд. Значение ошибки «плохой запрос» было отправлено вашим бэкэнд. Можете ли вы поделиться своим адаптером? –
@NathanH Вы правы, мой файл cookie не был привязан к запросу должным образом, что давало мне эту ошибку. –
@ hitch.united вы можете переместить ответ на этот вопрос из комментария и в ответ? –