Я пытаюсь создать новые проекты в Microsoft Project Server 2013 из java-приложения, используя REST API Project Server 2013, но у меня возникают проблемы.
Я могу успешно получить файл atom+xml всех проектов, используя следующее (GET):
String url = "http://<servername>/PWA/_api/ProjectServer/Projects";
HttpDigestAuthFilter filter = new HttpDigestAuthFilter("<username>", "<password>");
Client client = ClientBuilder.newClient(new ClientConfig());
client.register(filter);
WebTarget target = client.target(url);
Builder builder = target.request();
builder.accept(MediaType.APPLICATION_ATOM_XML);
InputStream inputStream = builder.get(InputStream.class);
try {
String body = IOUtils.toString(inputStream);
System.out.println("body : " + body);
} catch (IOException e) {
e.printStackTrace();
}
Однако я получаю статус = 403, причина = ЗАПРЕЩЕНО, когда пытаюсь выполнить POST, используя следующее:
String url = "http://<servername>/PWA/_api/ProjectServer/Projects";
HttpDigestAuthFilter filter = new HttpDigestAuthFilter("<username>", "<password>");
Client client = ClientBuilder.newClient(new ClientConfig());
client.register(filter);
WebTarget target = client.target(url);
Builder builder = target.request();
Form form = new Form();
form.param("Name", "Test Project");
form.param("Title", "Test Project");
form.param("Description", "My Test Project from Java");
builder.header("X-RequestDigest", "form digest value");
builder.header("X-HTTP-Method", "POST");
builder.accept("application/json;odata=verbose");
Response response = builder.post(Entity.entity(form, MediaType.APPLICATION_FORM_URLENCODED_TYPE));
System.out.println(response.getStatus() + " : " + response.toString());
Тот же пользователь может успешно создавать новые проекты с помощью веб-сайта Project Web App (Project Center) напрямую, но мне нужно иметь возможность делать это программно из моего приложения Java.
Я пытался (и потерпел неудачу) использовать WSDL (например, http://servername/PWA/_vti_bin/psi/project.asmx?wsdl), которые поставляются с Project Server, но когда я использовал Axis2 для создания кода Java, сгенерированный Java-код не может обработать ответы, отправленные обратно с Project Server. Ответ от Project Server будет включать diffgr:diffgram, и, по-видимому, все, что мне действительно нужно, содержится в нем. Кроме того, ответ включал дополнительный элемент для проекта (PROJ_LAST_CHANGE_TOKEN), которого не было в WSDL.
Я также пробовал код C#, включенный в SDK Microsoft Project 2013, но большинство файлов, которые я пробовал, либо не компилировались, либо не работали как есть. Я прочитал несколько форумов, на которых упоминается, что страницы справки веб-сайта Microsoft и пример кода для 2013 года могли быть скопированы из Project Server 2010, но, хотя фактические API-интерфейсы изменились между 2010 и 2013 годами, пример кода и веб-сайты MSDN не были обновлены.
Кому-нибудь удалось создать новые проекты, а затем добавить новые задачи в существующий проект в Project Server 2013 с Java?
Спасибо