这是我在这里的第一个问题,我希望找到一个人来回答它。
现在的情况:
目标:
我的想法是创建一个RESTful资源,在调用时生成上面提到的日历。这可行吗?或者我是否必须努力工作并设置一个可以提供以webcal://
开头的URI的服务器?
答案 0 :(得分:1)
没有人回答我的问题,但我在SO的其他帖子的帮助下解决了我的问题。
我曾尝试设置CalDAV服务器(本例中为DAViCal)。服务器工作,我也可以订阅创建的日历。但另一个问题仍然存在:我的门户网站中有用户通过portlet呈现“实际”压缩程序。当时只有一个日历,但是(!)用户可以过滤此日历以获取他感兴趣的事件子集。应该保存此日历并自动与主日历同步。
创建此子集很简单,但我无法将这些生成的日历与CalDAV服务器同步,因为我找不到创建用户的方法!我搜索了各种RFC(WebDAV RFC3744,它的扩展[RFC4791]以及CalDav RFC2446)。
所以我试着查找CalDAV服务器生成的输出。在提到的RFC的帮助下,它很容易理解。所以我设置了一个REST-Class,为了测试目的,只需构建一个日历并将其作为“text / calendar”(使用ical4j构建)返回。然后我打开iCalendar并订阅了我的REST-Class,一切正常。事件是按照我的意愿导入的。
这是我的测试虚拟课程。它正在创建一个2015-12-23作为“圣诞节前”的日历。
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):
<dependency>
<groupId>org.mnode.ical4j</groupId>
<artifactId>ical4j</artifactId>
<version>1.0.7</version>
</dependency>
我希望我可以帮助那些有同样问题的人。如果有任何问题请问,我会尽快回答。