【发布时间】:2013-11-08 22:51:38
【问题描述】:
我正在尝试使用 Project Server 2013 REST API 从 Java 应用程序在 Microsoft Project Server 2013 中创建新项目,但遇到了麻烦。
我可以使用以下 (GET) 成功获取所有项目的 atom+xml 文件:
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();
}
但是,当我尝试使用以下命令进行 POST 时,我收到 status=403, reason=FORBIDDEN:
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(项目中心)网站成功创建新项目,但我需要能够通过我的 Java 应用程序以编程方式执行此操作。
我已经尝试(但失败了)使用 Project Server 附带的 WSDL(即 http://servername/PWA/_vti_bin/psi/project.asmx?wsdl),但是当我使用 Axis2 生成 Java 代码时,生成的 java 代码无法处理从 Project Server 发回的响应。来自 Project Server 的响应将包括 diffgr:diffgram,显然,我真正需要的一切都在其中。此外,响应还包括一个不在 WSDL 中的 Project (PROJ_LAST_CHANGE_TOKEN) 的额外元素。
我还尝试了 Microsoft Project 2013 SDK 中包含的 C# 代码,但我尝试的大多数文件要么无法编译,要么无法按原样工作。我读过几个论坛,其中提到 2013 年的 Microsoft 网站帮助页面和示例代码可能是从 Project Server 2010 复制的,但尽管实际 API 在 2010 年和 2013 年之间发生了变化,但示例代码和 MSDN 网站尚未更新。
是否有人成功地创建了新项目,然后能够通过 Java 将新任务添加到 Project Server 2013 中的现有项目中?
谢谢
【问题讨论】:
-
您好,您从哪里获得 REST API?它是一个 JAR 吗?
-
您好,我正在尝试使用第一个 sn-p 的代码从具有 https url 的项目服务器获取所有项目,我收到 403 响应。使用 https url 访问项目服务器时是否有不同的实现,你有没有尝试过这样的事情?
标签: java rest ms-project-server-2013