正在尝试使用REST从Java在MS Project Server 2013中创建项目

正在尝试使用REST从Java在MS Project Server 2013中创建项目,java,rest,ms-project-server-2013,Java,Rest,Ms Project Server 2013,我正在尝试使用Project Server 2013 REST API从java应用程序在Microsoft Project Server 2013中创建新项目,但遇到了问题 我可以使用以下方法(get)成功获取所有项目的atom+xml文件: stringurl=”http:///PWA/_api/ProjectServer/Projects"; HttpDigestAuthFilter=新的HttpDigestAuthFilter(“,”); Client Client=ClientBuil

我正在尝试使用Project Server 2013 REST API从java应用程序在Microsoft Project Server 2013中创建新项目,但遇到了问题

我可以使用以下方法(get)成功获取所有项目的atom+xml文件:

stringurl=”http:///PWA/_api/ProjectServer/Projects";
HttpDigestAuthFilter=新的HttpDigestAuthFilter(“,”);
Client Client=ClientBuilder.newClient(newclientconfig());
客户端注册(过滤);
WebTarget=client.target(url);
Builder=target.request();
accept(MediaType.APPLICATION\u ATOM\u XML);
InputStream InputStream=builder.get(InputStream.class);
试一试{
字符串体=IOUtils.toString(inputStream);
System.out.println(“body:+body”);
}捕获(IOE异常){
e、 printStackTrace();
}
但是,当我尝试使用以下内容发布帖子时,我收到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());
stringurl=”http:///PWA/_api/ProjectServer/Projects";
HttpDigestAuthFilter=新的HttpDigestAuthFilter(“,”);
Client Client=ClientBuilder.newClient(newclientconfig());
客户端注册(过滤);
WebTarget=client.target(url);
Builder=target.request();
表单=新表单();
表格.param(“名称”、“测试项目”);
表格.param(“标题”、“测试项目”);
param(“Description”,“我的Java测试项目”);
builder.header(“X-RequestDigest”、“表单摘要值”);
builder.header(“X-HTTP-Method”、“POST”);
accept(“application/json;odata=verbose”);
Response-Response=builder.post(Entity.Entity(form,MediaType.APPLICATION\u form\u URLENCODED\u TYPE));
System.out.println(response.getStatus()+“:“+response.toString());
同一个用户能够直接使用ProjectWebApp(ProjectCenter)网站成功地创建新项目,但我需要能够从Java应用程序以编程方式实现这一点

我曾尝试(但失败)使用project Server附带的wsdl(即http://servername/PWA/_vti\u bin/psi/project.asmx?wsdl),但当我使用Axis2生成Java代码时,生成的Java代码无法处理从project Server发回的响应。来自Project Server的响应将包括diffgr:diffgram,显然,我真正需要的一切都包含在其中。此外,响应还包括一个额外的项目元素(PROJ_LAST_CHANGE_TOKEN),该元素不在WSDL中

我也尝试过Microsoft Project 2013 SDK中包含的C#代码,但我尝试过的大多数文件要么无法编译,要么无法正常工作。我读过几个论坛,其中提到2013年的Microsoft网站帮助页面和示例代码可能是从Project Server 2010复制的,但尽管实际的API在2010年和2013年之间发生了变化,但示例代码和MSDN网站尚未更新

是否有人能够成功地创建新项目,然后能够从Java向Project Server 2013中的现有项目添加新任务


谢谢

JSON应该如下所示:

{
  'parameters' : {
    'Id':'e19281cf-e8c8-4dfa-879c-75b8b3619426',
    'EnterpriseProjectTypeId':'09fa52b4-059b-4527-926e-99f9be96437a',
    'Name':'Test',
    'Description':'Test',
    'Start':'12/27/2013'
  }
}

ID是您自己生成的GUID。企业项目类型id来自服务器场的项目类型id。

您好,REST API是从哪里获得的?是JAR吗?您好,我正在尝试使用第一个代码片段的代码从带有https url的project server获取所有项目,并收到403响应。使用https url访问project server时是否有不同的实现,您是否尝试过类似的方法?是否有关于这些有效负载的文档?MS Project Server 2013官方文档只提到了HTTP方法,但没有提到有效负载的外观。
{
  'parameters' : {
    'Id':'e19281cf-e8c8-4dfa-879c-75b8b3619426',
    'EnterpriseProjectTypeId':'09fa52b4-059b-4527-926e-99f9be96437a',
    'Name':'Test',
    'Description':'Test',
    'Start':'12/27/2013'
  }
}