Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Java发布到SharePoint 2013_Java_Rest_Sharepoint - Fatal编程技术网

从Java发布到SharePoint 2013

从Java发布到SharePoint 2013,java,rest,sharepoint,Java,Rest,Sharepoint,我已尝试连接到SharePoint并将一些数据发布到列表中 用户可以与Web应用程序交互并发送一些信息。这些数据将被发送到运行在tomcat上的Java Web接口。Java代码应该连接到我们的SharePoint并在列表中发布数据。今天,我在网上读了很多教程和资源。。。他们中的大多数人都不赞成或讨论不同的情况!所以我的心在低语:“继续访问stackoverflow。”我在这里,问这个问题: 情况如上所述。我调用一个web界面vie JS(angularJS),并传递一个用户在前端输入的电子邮件

我已尝试连接到SharePoint并将一些数据发布到列表中

用户可以与Web应用程序交互并发送一些信息。这些数据将被发送到运行在tomcat上的Java Web接口。Java代码应该连接到我们的SharePoint并在列表中发布数据。今天,我在网上读了很多教程和资源。。。他们中的大多数人都不赞成或讨论不同的情况!所以我的心在低语:“继续访问stackoverflow。”我在这里,问这个问题:

情况如上所述。我调用一个web界面vie JS(angularJS),并传递一个用户在前端输入的电子邮件地址。这里是:

@Path("webservice")
public class SetEmail {
    @POST
    @Path("/SetEmail")
    @Consumes(MediaType.APPLICATION_JSON + ";charset=UTF-8")
    @Produces("text/plain")
    public String addItem(String incoming) throws ClientProtocolException, IOException, AuthenticationException{

        String result = "error";
        JSONObject jsonObj = new JSONObject(incoming);
        String listName = "Leads";
        String username = "...";
        char[] password= new char[]{'...', '...', ...};
        String website = "...";
现在,在我阅读了所有内容之后,我必须从SharePoint获取DigestValue,因为我想发出一个POST请求:

        //Get the Digestvalue.
        CredentialsProvider provider = new BasicCredentialsProvider();
        provider.setCredentials(AuthScope.ANY, new NTCredentials(username, password.toString(), "http://...", "https://..."));
        HttpClient client = HttpClientBuilder.create().setDefaultCredentialsProvider(provider).build();

        HttpPost httpPost = new HttpPost(website + "_api/contextinfo");
        httpPost.addHeader("Accept", "application/json;odata=verbose");
        httpPost.addHeader("content-type", "application/json;odata=verbose");
        httpPost.addHeader("X-ClientService-ClientTag", "SDK-JAVA");
        HttpResponse response = client.execute(httpPost);

        byte[] content = EntityUtils.toByteArray(response.getEntity());
        String jsonString = new String(content, "UTF-8"); 
        System.out.println(response);
        JSONObject json = new JSONObject(jsonString);
        String FormDigestValue = json.getJSONObject("d").getJSONObject("GetContextWebInformation").getString("FormDigestValue");
获取摘要后,我能够执行实际请求:

        //POST the data.
        CloseableHttpClient client2 = HttpClients.createDefault();
        HttpPost httpPost2 = new HttpPost(website + "_api/web/lists/GetByTitle(" + listName + ")");

        httpPost2.setEntity(new StringEntity("test post"));
        NTCredentials creds = new NTCredentials(username, password.toString(), "http://...", "https://...");
        httpPost2.addHeader(new BasicScheme().authenticate(creds, httpPost2, null));
        httpPost2.addHeader("X-RequestDigest", FormDigestValue);
        httpPost2.addHeader("Accept", "application/json;odata=verbose");
        httpPost2.addHeader("Content-Type", "application/json;odata=verbose");

        CloseableHttpResponse response2 = client2.execute(httpPost2);
        System.out.println(response2);
        client2.close();
    }
}
我知道这不是最漂亮的代码,是的,我不是Java专家。我的问题是:

  • 我不知道这些代码片段是否都是最新的 我使用的是不推荐的。也许有人能做到 开导我吧
  • 我正在使用Apache的HttpClient。在我看来,这是最重要的 可用库。是这样吗
  • 每次我在前端执行操作时,代码都会启动 运行时,我收到一个HTTP 401未经授权的错误。我试过了 各种各样的代码,但没有一种工作得很好

    HttpResponseProxy{HTTP/1.1 401 Unauthorized [Server: Microsoft-IIS/8.0, SPR..
    

  • 也许有人有耐心告诉我怎么做。谢谢。

    哇。。。你真的在尝试一些黑魔法;)-我建议您使用类似工具或其他REST工具的工具来运行HTTP POST/get,然后返回代码

    我不知道您到底想实现什么,但通过powershell(如果您试图创建迁移脚本)或JavaScript(如果您在网站上)可能更容易实现


    请注意,SharePoint online和SharePoint内部部署中的身份验证不同。。。这也可以由您的公司自定义(例如,您也可以实现基于表单的身份验证)。确保知道您的SharePoint正在使用什么。(或分享更多信息,以便我们能提供帮助)

    哇。。。你真的在尝试一些黑魔法;)-我建议您使用类似工具或其他REST工具的工具来运行HTTP POST/get,然后返回代码

    我不知道您到底想实现什么,但通过powershell(如果您试图创建迁移脚本)或JavaScript(如果您在网站上)可能更容易实现


    请注意,SharePoint online和SharePoint内部部署中的身份验证不同。。。这也可以由您的公司自定义(例如,您也可以实现基于表单的身份验证)。确保知道您的SharePoint正在使用什么。(或共享更多信息,以便我们提供帮助)

    认为此解决方案可能有点“过时”。)但是你可以在网上找到很多关于这个主题的教程。我会重新考虑,也许会尝试另一种解决方案。嘿,尼科,我找到了这条线索,也许它能帮助你走上正确的道路:谢谢。它解决了另一个问题,但可能是一个解决方案。:)虽然这个解决方案可能有点“过时”。)但是你可以在网上找到很多关于这个主题的教程。我会重新考虑,也许会尝试另一种解决方案。嘿,尼科,我找到了这条线索,也许它能帮助你走上正确的道路:谢谢。它解决了另一个问题,但可能是一个解决方案。:)