2016-05-17 5 views
1

Я попытался подключиться к нашим SharePoint и POST некоторым данным в список.Опубликовать в SharePoint 2013 от Java

Пользователь может взаимодействовать с веб-приложением и отправлять некоторую информацию. Эти данные будут отправляться на Java-Web-интерфейс, работающий на tomcat. Java-код должен подключиться к нашему SharePoint и опубликовать данные в списке. Сегодня я прочитал много учебников и ressources в Интернете ... Большинство из них - устаревшие руды обсуждают легкомысленные ситуации! ТАК! Мое мнение прошептало: «Продолжайте и переходите к stackoverflow». И вот я, задавая этот вопрос:

Ситуация описана выше. Я вызываю веб-интерфейс 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 = "..."; 

Теперь, после того, как все, что я прочитал, я должен получить DigestValue из SharePoint, потому что я хочу сделать 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"); 

После получения Digest, Я в состоянии выполнить фактический запрос:

 //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. Я использую HttpClient из Apache. Для меня это выглядело как самая полезная библиотека . Это правильно?
  3. Каждый раз, когда я выполняю действие на интерфейсе, и мой код запускает запущен, я получаю сообщение об ошибке «Неавторизованная ошибка HTTP 401». Я попробовал различные виды кода, но никто не работал хорошо.

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

Возможно, кто имеет терпение, чтобы сказать мне, как это сделать. Спасибо.

ответ

0

Здесь вы действительно пытаетесь найти черную магию;) - Я предлагаю вам получить ваш HTTP POST/GET в инструменте, например Postman или другом инструменте REST, а затем вернуться к вашему коду.

Я не знаю точно, чего вы пытаетесь достичь, но может быть проще пройти через powershell (если вы пытаетесь создать сценарий миграции) или JavaScript (если вы на сайте).

Имейте в виду, что аутентификация отличается в SharePoint онлайн и SharePoint по предпосылке ... это также настраивается вашей компанией (вы можете, например, реализовать аут-аут на основе форм). Обязательно узнайте, что использует ваш SharePoint. (Или поделитесь дополнительной информацией, поэтому мы можем помочь)

+0

Должно быть, это решение может быть немного «отключено». ;) Но в Интернете можно найти много учебников по этой теме. Я передумаю и, возможно, попробую другое решение. – Nico

+0

Эй, Нико, я нашел эту ветку, может быть, это поможет вам встать на правильный путь: http://sharepoint.stackexchange.com/questions/79803/how-to-authenticate-user-in-sharepoint-online-using-javascript – Nils

+0

Спасибо. Он обращается к другой проблеме, но может быть солютеном. :) – Nico

Смежные вопросы