3

我有一个 Exchange Server 2007 SP1,并想使用 EWS Java API 1.1 创建一个约会。我有一个例外,我必须先设置时区定义。

    appointment.setStartTimeZone(new TimeZoneDefinition(){{
        setName( "W. Europe Standard Time" );
    }}); 

我试图直接设置它但得到了这个异常:

The time zone definition is invalid or unsupported

我看到了一些解决方法,您必须编辑 Java API(例如跳过 TimeZoneDefinition 验证),但如果可能的话,我不想在那里做任何更改。我希望有人知道如何正确设置 TimeZoneDefinition(无需修改基本 Java API)。

编辑:在 .NET 中,您似乎可以直接设置 TimeZoneDefinition,例如:

appointment.StartTimeZone = TimeZoneInfo.Local;

但我在 Java API 中找不到这样的东西

4

1 回答 1

0

我遇到了同样的问题 - 并且几乎尝试了所有方法(除了编辑 java ews api 本身)以使 StartTimeZone 的约会在我的 Spring Web 应用程序中与 Exchange 2007 SP1 一起工作 - 没有成功。

我发现如下评论:不幸的是,Exchange 2007 SP1 不支持 EWS 的 StartTimeZone 属性。如果要使用该属性,则必须使用 Exchange 2010。我应该去,寻找不那么“不稳定”的 Java Exchange 框架。

我很不高兴,因为我听说 .NET 世界中没有这样的问题,所以我决定采用以下解决方案:

我设置了一个自托管的 Nancy 服务器。

请参阅南希文档

并写了一个简单的 NancyModule:

namespace WebServiceNancy
{
public class APIModul : NancyModule
{
    public APIModul() : base("/")
    {

        Post["/saveFooApp"] = _ =>
        {   
            var jsonApp = this.Bind<AppData>();
            string ewsURL = "https://saveFooApp/ews/exchange.asmx";
            System.Uri ewsUri = new System.Uri(ewsURL);

            ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
            service.Url = ewsUri;

            service.Credentials = new WebCredentials(jsonApp.Username, jsonApp.Password);

            Appointment app = new Appointment(service);
            app.Subject = jsonApp.Title;
            app.Start = jsonApp.Start;
            app.End = jsonApp.End;

            app.Save(WellKnownFolderName.Calendar);

            return Response.AsText("OK").WithStatusCode(HttpStatusCode.OK);
        };
    }
}


public class AppData
{
    public string Title { get; set; }
    public DateTime Start { get; set; }
    public DateTime End { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
}
}

现在我可以通过 RestTemplate 将我的约会数据作为 json 对象从我的 Spring 控制器调用这个 WS:

SimpleDateFormat formatter = new  SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String startDate = formatter.format(fooMeeting.getMeetingStart());
String endDate = formatter.format(fooMeeting.getMeetingEnd());

JSONObject obj = new JSONObject();
obj.put("title", fooMeeting.getTitle());
obj.put("start", startDate);
obj.put("end", endDate);
obj.put("username", fooUser.getUsername());                 
obj.put("password", fooUser.getPassword());

RestTemplate rt = new RestTemplate();

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);

JSONSerializer jsonSer = new JSONSerializer();

HttpEntity<String> entity = new HttpEntity<String>(jsonSer.serialize(obj), headers);

ResponseEntity<String> response = rt.exchange("http://localhost:8282/saveFooApp", HttpMethod.POST, entity, String.class);               
System.out.println(response.getStatusCode());

Ofc 您需要决定在将凭据从一台服务器传递到另一台服务器时是否要使用某种密码加密 - 以及如何实现错误处理。

  • 但它对我来说就像一种魅力

  • 我对未来有关其他 EWS 功能的请求充满信心。

于 2016-02-25T07:05:17.593 回答