2016-05-17 21 views
1

私はSharePointに接続しようとしましたが、一部のデータをリストにPOSTしました。JavaからSharePoint 2013にポスト

ユーザはWeb-Appとやり取りして情報を送信できます。これらのデータは、Tomcat上で動作するJava-Web-Interfaceに送信されます。 JavaコードはSharePointに接続し、リストにデータを投稿する必要があります。今日、私はウェブで多くのチュートリアルとリソースを読みました...彼らのほとんどは廃止された鉱石で、軽度に異なる状況について議論しています!そう!私の心はささやいた。「行き、stackoverflowに行ってください。そして、ここで私はこの質問をしています:

状況は上記のとおりです。私は、Web-InterfaceをJS(angularJS)と呼び、ユーザがフロントエンドに入力するE-Mail-Addressを渡します。ここではそれがに行く:私はPOSTリクエストを作りたいので

@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を取得する必要があります:

 //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の専門家ではないです。私の問題は、次のとおりです。

  1. 私はこれらのコード・フラグメントの全てが最新である天候や私は非推奨のものを使用しています 天気を知りません。おそらく誰かが 私を啓蒙することができます。
  2. 私はApacheのHttpClientを使用しています。私にとっては、利用可能なライブラリの中で最も多くのもののように見えた。 そうですか?
  3. フロントエンドでアクションを実行するたびに、コードが の実行を開始すると、HTTP 401 Unauthorizedエラーが発生します。私は 様々な種類のコードを試しましたが、うまくいきませんでした。

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

おそらく誰かがそれを行う方法を教えために忍耐を持っています。ありがとうございました。

答えて

0

Whoa ...あなたは本当にここでいくつかの黒い魔法を試しています;) - Postmanやその他のRESTツールのようなツールでHTTP POST/GETを取得し、コードに戻すことをお勧めします。

あなたが達成しようとしていることを正確にはわかりませんが、移行スクリプトを作成しようとしている場合はpowershellを、ウェブサイトの場合はJavaScriptを使用する方が簡単かもしれません。

SharePoint OnlineとSharePoint on premiseでは認証が異なることに注意してください。これは社内でもカスタマイズできます(フォームベースの認証も実装できます)。 SharePointが何を使用しているかを必ず確認してください。 (またはいくつかの情報を共有してください)

+0

Thougtこの解決策は、「オフ」になるかもしれません。 ;)しかし、インターネット上のこのトピックでは多くのチュートリアルを見つけることができます。私は再考し、おそらく別の解決策を試みるでしょう。 – Nico

+0

こんにちはニコ、私はこのスレッドを発見、多分それはあなたが正しい方法で得るのに役立ちます:http://sharepoint.stackexchange.com/questions/79803/how-to-authenticate-user-in-sharepoint-online-using-javascript – Nils

+0

ありがとうございます。それは別の問題になりますが、ソルテンかもしれません。 :) – Nico

関連する問題