0

При выполнении вызова к адаптеру 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, но запрос по-прежнему плохо. Что еще я мог попробовать?

+0

Я думаю, что проблема не между клиентом и МФУ, а скорее между МФП и бэкэнд. Значение ошибки «плохой запрос» было отправлено вашим бэкэнд. Можете ли вы поделиться своим адаптером? –

+0

@NathanH Вы правы, мой файл cookie не был привязан к запросу должным образом, что давало мне эту ошибку. –

+0

@ hitch.united вы можете переместить ответ на этот вопрос из комментария и в ответ? –

ответ

0

Оказывается, файл cookie для моего запроса не был надлежащим образом присоединен, что привело к ошибке 400.

Смежные вопросы