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);            OperationContext octxt = lc.getOperationContext();                        Account acct = getRequestedAccount(lc);            Mailbox mbox = getRequestedMailbox(lc);                        ParsedItemID pid = ParsedItemID.Parse(request.getAttribute("id"));            int compNum = (int)request.getAttributeLong("comp");                        sLog.info("<CreateAppointmentException id="+pid+" comp="+compNum+">");            synchronized(mbox) {                Appointment appt = mbox.getAppointmentById(pid.getItemIDInt());                 Invite inv = appt.getInvite(pid.getSubIdInt(), compNum);                                if (inv.hasRecurId()) {                    throw ServiceException.FAILURE("Invite id="+pid+" comp="+compNum+" is not the a default invite", null);                }                                if (appt == null)                    throw ServiceException.FAILURE("Could not find Appointment for id="+pid+" comp="+compNum+">", null);                else if (!appt.isRecurring())                    throw ServiceException.FAILURE("Appointment "+appt.getId()+" is not a recurring appointment", null);                // <M>                Element msgElem = request.getElement(MailService.E_MSG);                                CalSendData dat = handleMsgElement(octxt, msgElem, acct, mbox, new CreateApptExceptionInviteParser(appt.getUid(), inv.getTimeZoneMap()));                                Element response = lc.createElement(MailService.CREATE_APPOINTMENT_EXCEPTION_RESPONSE);                            return sendCalendarMessage(octxt, acct, mbox, dat, response);            }                    } finally {            sWatch.stop(startTime);        }    }