ParsedItemID pid = ParsedItemID.Parse(request.getAttribute("id"));
ParsedItemID pid = ParsedItemID.parse(request.getAttribute("id"));
    public Element handle(Element request, Map context) throws ServiceException     {        long startTime = sWatch.start();        try {            ZimbraContext lc = getZimbraContext(context);            Account acct = getRequestedAccount(lc);            Mailbox mbx = getRequestedMailbox(lc);            OperationContext octxt = lc.getOperationContext();                        ParsedItemID pid = ParsedItemID.Parse(request.getAttribute("id"));            int compNum = (int)request.getAttributeLong("comp", 0);                        sLog.info("<ModifyAppointmentException id="+pid+" comp="+compNum+">");                        synchronized(mbx) {                // have to cancel the appointment                Appointment appt = mbx.getAppointmentById(pid.getItemIDInt());                 Invite inv = appt.getInvite(pid.getSubIdInt(), compNum);                                if (!inv.hasRecurId()) {//                    throw ServiceException.INVALID_REQUEST("Called ModifyAppointmentException on invite "+inv.getMailItemId()+//                            "with RECURRENCE_ID of 0", null);                }                                // response                Element response = lc.createElement(MailService.MODIFY_APPOINTMENT_EXCEPTION_RESPONSE);                return modifyAppointment(octxt, request, acct, mbx, inv, response);            } // synchronized on mailbox                        } finally {            sWatch.stop(startTime);        }            }