Apache Abdera Client POST未发布到IBM Connections API

时间:2013-04-29 13:54:17

标签: java ibm-connections apache-abdera

我有一个使用Apache Abdera lib与我们的IBM Connections 4服务器的REST API进行通信的Web服务。

我遇到的问题是我的请求不起作用。当我说它不起作用时,我的意思是我所有的GET操作都能正常工作,返回我之后的数据,但是我尝试实现的第一个POST操作失败了。我的ClientResponse对象返回类型“REDIRECTION”和StatusText“found”。我的数据不会在连接上更新。

请注意,由于跨域限制,我正在通过JSONP AJAX调用调用此服务。(此Web服务与我们的连接环境位于同一服务器和域中)

这是我的代码:( P.S。我是一个java noob试图在连接状态更新中发布小型微博条目)

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    JSONObject json;
    JSONObject rtn = new JSONObject();
    String rtnVal = "";

    String username = request.getParameter("username");
    String password = request.getParameter("password");
    String statusPost = request.getParameter("msg");
    String container = request.getParameter("container");

    String url = Authentication.uri+"/connections/opensocial/basic/rest/ublog/@me/@all";
    if(container != null){
        url += "/"+container+"/comments";
    }

    json = new JSONObject();
    json.put("content", statusPost);
    try {
        AbderaClient client = Authentication.getClient(Authentication.EMPTY, username, password, Authentication.uri);
        RequestOptions options = client.getDefaultRequestOptions();
        options.setFollowRedirects(true);
        InputStream inStream = new ByteArrayInputStream(json.toString().getBytes("UTF-8"));

        ClientResponse resp = client.post(url, inStream, options);
        rtn.put("Status", resp.getType() + " : " + resp.getStatusText());
    } catch (URISyntaxException e) {
        e.printStackTrace();
    }

    response.setContentType("application/json");
    PrintWriter out = response.getWriter();
    out.println(request.getParameter("callback")+ "(" + (rtn)+")");
}

这是来自我的Ajax调用的console.log():

Ext.data.JsonP.callback3({"Status":"REDIRECTION : Found"})

1 个答案:

答案 0 :(得分:0)

我设法解决了我的问题。问题在于,当我进行身份验证时,我的身份验证uri指向http,我们的连接服务器自动重定向到https。将此uri更改为https解决了我的重定向问题