首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EWSJavaAPI1.1创建约会缺失的TimeZoneDefinition

EWSJavaAPI1.1创建约会缺失的TimeZoneDefinition
EN

Stack Overflow用户
提问于 2012-05-24 10:18:43
回答 1查看 3K关注 0票数 3

我有一个Exchange 2007 SP1,希望使用EWSJavaAPI1.1创建一个约会。我得到了一个例外,我必须首先设置时区定义。

代码语言:javascript
复制
    appointment.setStartTimeZone(new TimeZoneDefinition(){{
        setName( "W. Europe Standard Time" );
    }}); 

我试图直接设置它,但得到了这个例外:

代码语言:javascript
复制
The time zone definition is invalid or unsupported

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

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

代码语言:javascript
复制
appointment.StartTimeZone = TimeZoneInfo.Local;

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

EN

回答 1

Stack Overflow用户

发布于 2016-02-25 07:05:17

我也面临着同样的问题--除了java本身,我尝试了一切(除了editig之外),在我的中使用Exchange2007SP1与StartTimeZone进行约会--但都没有成功。

我发现了这样的注释:不幸的是,Exchange 2007 SP1不支持EWS的StartTimeZone属性。如果要使用该属性,则必须使用Exchange 2010。我应该去寻找更少的"flacky“。

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

我建立了一个自我托管的南希服务器。

南希文件

并编写了一个简单的NancyModule:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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的有趣之处的未来要求非常有信心。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10735514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档