Reputation: 8992
When making a call to an MFP adapter, i'm getting this response
{
"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":[
]
}
The thing is, when i make the same request to my websphere server through a browser, or calling the adapter directly from eclipse I get the expected response.
Relevant Android code
The call to the MFP server
public static void validateUserId(MobileFirstActivity activity, String userId, boolean saveUserId,
WLResponseListener listener) {
ValidateUserIdRequest validateUserIdRequest = new ValidateUserIdRequest(userId, saveUserId);
activity.performResourceRequest(validateUserIdRequest, listener);
}
The ValidateUserIdRequest object
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;
}
The method that actual performs the request
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();
}
}
}
The utility method that converts the String[] params to a compatible string.
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 gives me this as a result as per the documentation for Javascript based adapters
['mbltest3','1.0','false','Android']
I get the correct parameters on my MFP server, but the request is still bad. What else could I try?
Upvotes: 0
Views: 256
Reputation: 8992
Turns out the cookie for my request was not being properly attached resulting in the 400 error.
Upvotes: 0