我有一个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中找不到这样的东西
答案 0 :(得分:0)
我遇到了同样的问题 - 并尝试了大部分内容(除了来自editig java ews api本身),以使StartTimeZone的约会与我的Spring Web应用程序中的Exchange 2007 SP1一起使用 - 没有成功。
我发现了以下评论: 遗憾的是,Exchange 2007 SP1不支持EWS的StartTimeZone属性。如果要使用该属性,则必须使用Exchange 2010。 我应该去寻找不那么“诡异”的Java Exchange Framework。
我并不高兴,因为我听说在.NET领域没有这样的问题我决定采用以下解决方案:
我设置了一个自托管的Nancy Server。
写了一个简单的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 Controller来调用这个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());
当您将凭据从一台服务器传递到另一台服务器时,您需要决定是否要使用某种密码加密 - 以及如何实施错误处理。
但它对我来说就像一个魅力
我对未来有关其他EWS功能的要求非常有信心。