首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于ical4j的GlassFish订阅服务

基于ical4j的GlassFish订阅服务
EN

Stack Overflow用户
提问于 2015-10-12 07:33:18
回答 1查看 163关注 0票数 1

这是我在这里的第一个问题,我希望找到一个人来回答。

现在的情况:

  • GlassFish 4服务器
  • 用于ICS生成的ical4j
  • 方法手动下载.ics (可变时间序列)
  • 只有一个日历
  • 不允许在日历上进行更改(只在前面)

目标:

  • 提供一个在日历上订阅的链接

我的想法是创建一个RESTful资源,在调用时生成上面提到的日历。那能行吗?还是我必须走艰苦的道路,设置一个服务器,可以从webcal://开始提供URI?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-16 09:12:48

没有人回答我的问题,但我在其他帖子的帮助下解决了我的问题。

我试图设置一个CalDAV服务器(在本例中是DAViCal)。服务器正常工作,我也可以订阅创建的日历。但另一个问题仍然存在:我的门户中有一些用户在portlet上显示了“实际的”calander。当时只有一个日历,但是(!)用户可以为他感兴趣的事件的子集过滤这个日历。此日历应保存并自动与主日历同步。

创建这个子集很容易,但是我无法将生成的日历与CalDAV服务器同步,因为我还没有找到创建用户的方法!我在各种RFCs中搜索过(WebDAV RFC3744,它是ExtensionsRFC4791,还有CalDav RFC2446)。

因此,我只想查找CalDAV服务器生成的输出。在上述RFCs的帮助下,这是相当容易理解的。因此,我设置了一个REST类,为了测试目的,只需构建一个日历,并将其作为“文本/日历”返回(用ical4j构建)。然后我打开了iCalendar,订阅了我的休息课,一切都很好。这些事件就像我想要的那样被导入了。

这是我的虚拟测试课。它正在创建一个以2015-12-23作为“圣诞节前一天”的日历。

代码语言:javascript
复制
import java.net.SocketException;
import java.net.URISyntaxException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
import net.fortuna.ical4j.model.Calendar;
import net.fortuna.ical4j.model.Date;
import net.fortuna.ical4j.model.component.VEvent;
import net.fortuna.ical4j.model.property.CalScale;
import net.fortuna.ical4j.model.property.Name;
import net.fortuna.ical4j.model.property.Organizer;
import net.fortuna.ical4j.model.property.ProdId;
import net.fortuna.ical4j.model.property.Version;
import net.fortuna.ical4j.util.UidGenerator;

@Path("calendar")
public class CalendarRest {

    @GET
    @Path("test")
    @Produces("text/calendar")
    public Response getCalendarTest() {
        try {
            java.util.Calendar javaCalendar = java.util.Calendar.getInstance();
            javaCalendar.set(java.util.Calendar.MONTH, java.util.Calendar.DECEMBER);
            javaCalendar.set(java.util.Calendar.DAY_OF_MONTH, 23);

            Calendar calendar = new Calendar();
            calendar.getProperties().add(new ProdId("-//Ben Fortuna//iCal4j 1.0//EN"));
            calendar.getProperties().add(Version.VERSION_2_0);
            calendar.getProperties().add(CalScale.GREGORIAN);
            calendar.getProperties().add(new Name("Eventcalendar"));

            // VEVENT
            VEvent christmas = new VEvent(new Date(javaCalendar.getTime()), "Pre Christmas Day");
            christmas.getProperties().add(new Organizer("TestOrganizer"));
            // initialise as an all-day event..
            UidGenerator ug = new UidGenerator("1");
            christmas.getProperties().add(ug.generateUid());
            
            calendar.getComponents().add(christmas);

            return Response
                    .ok(calendar.toString())
                    .build();
        } catch (SocketException ex) {
            Logger.getLogger(CalendarRest.class.getName()).log(Level.SEVERE, null, ex);
        } catch (URISyntaxException ex) {
            Logger.getLogger(CalendarRest.class.getName()).log(Level.SEVERE, null, ex);
        }
        return Response.serverError().build();
    }
}

这是我第一次尝试,并立即解决了我的问题!它只是为了演示目的而不是完整的(参见捕获的异常)。

要让一切正常工作,你必须遵守RFC2446!

所使用的依赖项(maven):

代码语言:javascript
复制
<dependency>
  <groupId>org.mnode.ical4j</groupId>
  <artifactId>ical4j</artifactId>
  <version>1.0.7</version>
</dependency>

我希望我能帮助那些有同样问题的人。如果有任何问题,只要问一问,我会尽量尽快回答。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33075556

复制
相关文章

相似问题

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