Estoy intentando llamar al método serveResource() de un portlet utilizando jQuery/ajax. Me las arreglé para obtener un portlet JSR-286 simple que funciona en Pluto 2.0 que es capaz de leer una cadena JSON del cuerpo de la solicitud, crear un objeto Java desde el JSON y devolver ese objeto aString() a mi JavaScript llamante. Sin embargo, cuando implemento * el mismo portlet en WebSphere Portal 6.1, el cuerpo de la solicitud está vacío cuando llega a serveResource().Llamada de Ajax a GenericPortlet.serveResource() en WebSphere Portal 6.1
Supongo que me falta algo básico/fundamental por lo que cualquier consejo sería apreciado. Creo que podría hacer funcionar mi muestra si insertara la cadena JSON en los parámetros de la URL, pero preferiría evitar ese enfoque por ahora, a menos que me den una razón por la cual mi enfoque actual es "malo".
Editar: * Para ser más específicos, implementé el mismo portlet para WAS7 que ejecuta un productor de WSRP y que consume el portlet a través de WebSphere Portal 6.1.
Javascript Fragmento:
function ajaxPost() {
var url = "<%= testServiceURL %>";
var current = $("input.current").val();
$.ajax(
{
url: url,
contentType: 'application/json; charset=utf-8',
dataType: 'html',
data: "{data: " + current + "}",
type: 'POST',
success: testSuccess,
error: testError
}
);
$("div.trace").append("ajax post fired<br />");
}
function testSuccess(data, textStatus, XMLHttpRequest)
{
$("div.trace").append("testSuccess(): " + data + "<br />");
}
portlets Fragmento:
public class TestPortlet extends GenericPortlet {
...
@Override
public void serveResource(ResourceRequest request, ResourceResponse response) throws PortletException, IOException {
String res = "Failed to read body";
boolean bodyRead = true;
StringBuffer sb = new StringBuffer();
String line = null;
try {
BufferedReader reader = request.getReader();
line = reader.readLine();
while (line != null) {
sb.append(line);
line = reader.readLine();
}
reader.close();
} catch (Exception e) {
bodyRead = false;
}
Foo f = null;
if (bodyRead) {
try {
Gson gson = new Gson();
f = gson.fromJson(sb.toString(), Foo.class);
res = "Received: " + f.toString();
} catch (Exception e) {
res = "Failed to convert body into Foo: '" + sb.toString() + "'";
}
}
response.setContentType("text/html");
response.getWriter().println(res);
}
}